亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
CSS 滑塊系列
HTML 結(jié)構(gòu)
工作原理?
讓我們編寫一些 CSS!
讓我們添加更多圖像
總結(jié)
首頁 web前端 css教程 CSS無限和圓形旋轉(zhuǎn)圖像滑塊

CSS無限和圓形旋轉(zhuǎn)圖像滑塊

Mar 09, 2025 pm 01:14 PM

CSS Infinite and Circular Rotating Image Slider

圖片滑塊(也稱為輪播圖)隨處可見。有很多 CSS 技巧可以創(chuàng)建常見的滑塊,其中圖片從左向右滑動(dòng)(或反之亦然)。許多 JavaScript 庫也創(chuàng)建了具有復(fù)雜動(dòng)畫的精美滑塊。在本文中,我們不會(huì)做任何這些事情。

我們將通過一系列文章來探索一些奇特且不常見的純 CSS 滑塊。如果您厭倦了看到相同的經(jīng)典滑塊,那么您來對(duì)地方了!

CSS 滑塊系列

  • 循環(huán)旋轉(zhuǎn)圖片滑塊 (您當(dāng)前位置)
  • 瀏覽寶麗來圖片
  • 無限 3D 滑塊

在第一篇文章中,我們將從我稱之為“循環(huán)旋轉(zhuǎn)圖片滑塊”的內(nèi)容開始:

很酷吧?讓我們剖析代碼!

HTML 結(jié)構(gòu)

如果您關(guān)注過我關(guān)于精美圖片裝飾或 CSS 網(wǎng)格和自定義形狀的系列文章,那么您就會(huì)知道我的第一條規(guī)則是使用盡可能少的 HTML。我總是努力尋找 CSS 解決方案,然后再用大量 <div> 和其他內(nèi)容使代碼混亂。這里也適用相同的規(guī)則——我們的代碼只不過是容器中的一系列圖像。 <p>假設(shè)我們使用四張圖片:</p> <pre class="brush:php;toolbar:false">&lt;div&gt; &lt;img alt=&quot;&quot; src=&quot;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;&quot;&gt; &lt;/div&gt;</pre> <p>就是這樣!現(xiàn)在讓我們進(jìn)入代碼的有趣部分。但首先,我們將深入研究它,以了解我們的滑塊如何工作的邏輯。</p> <h3 id="工作原理">工作原理?</h3> <p>這是一個(gè)視頻,我從中刪除了 <code>overflow: hidden CSS,以便我們可以更好地理解圖像的移動(dòng)方式:(此處應(yīng)嵌入視頻,但由于我無法處理視頻,我將用文字描述)視頻展示了四個(gè)圖像在一個(gè)大圓圈上逆時(shí)針旋轉(zhuǎn)。所有圖像大小相同(圖中用 S 表示)。請(qǐng)注意藍(lán)色圓圈,它是與所有圖像中心相交的圓圈,并具有半徑 (R)。稍后我們將需要此值用于我們的動(dòng)畫。R 等于 0.707 * S。(我將跳過給出該方程的幾何計(jì)算。)

讓我們編寫一些 CSS!

我們將使用 CSS 網(wǎng)格將所有圖像放置在彼此上方的同一區(qū)域中:

.gallery {
  --s: 280px; /* 控制大小 */

  display: grid;
  width: var(--s);
  aspect-ratio: 1;
  padding: calc(var(--s) / 20); /* 我們稍后將看到它的用途 */
  border-radius: 50%;
}

.gallery > img {
  grid-area: 1 / 1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
}

到目前為止,沒有什么太復(fù)雜的。棘手的部分是動(dòng)畫。

我們討論過旋轉(zhuǎn)一個(gè)大圓圈,但實(shí)際上,我們將單獨(dú)旋轉(zhuǎn)每個(gè)圖像,從而產(chǎn)生一個(gè)大旋轉(zhuǎn)圓圈的錯(cuò)覺。因此,讓我們定義一個(gè)動(dòng)畫 m 并將其應(yīng)用于圖像元素:

.gallery > img {
  /* 與之前相同 */
  animation: m 8s infinite linear;
  transform-origin: 50% 120.7%;
}

@keyframes m {
  100% { transform: rotate(-360deg); }
}

主要技巧在于突出顯示的行。默認(rèn)情況下,CSS transform-origin 屬性等于中心(或 50% 50%),這使得圖像圍繞其中心旋轉(zhuǎn),但我們不需要這樣做。我們需要圖像圍繞包含我們圖像的大圓圈的中心旋轉(zhuǎn),因此 transform-origin 的新值。

由于 R 等于 0.707 * S,我們可以說 R 等于圖像大小的 70.7%。這是一個(gè)圖來說明我們?nèi)绾蔚玫?120.7% 的值:(此處應(yīng)嵌入圖片,但由于我無法處理圖片,我將用文字描述)圖片展示了計(jì)算transform-origin值的幾何關(guān)系。

讓我們運(yùn)行動(dòng)畫并看看會(huì)發(fā)生什么:(此處應(yīng)嵌入動(dòng)畫效果,但由于我無法處理動(dòng)畫,我將用文字描述)動(dòng)畫效果顯示只有一個(gè)圖像可見,因?yàn)樗袌D像疊加在一起。

我們需要延遲每個(gè)圖像的動(dòng)畫以避免這種重疊。

<div>
  <img alt="" src=""><img alt="" src=""><img alt="" src=""><img alt="" src="">
</div>

情況已經(jīng)好轉(zhuǎn)了!

如果我們?cè)谌萜魃想[藏溢出,我們已經(jīng)可以看到一個(gè)滑塊,但我們將稍微更新動(dòng)畫,以便每個(gè)圖像在移動(dòng)之前都會(huì)可見一小段時(shí)間。

我們將更新我們的動(dòng)畫關(guān)鍵幀來做到這一點(diǎn):

.gallery {
  --s: 280px; /* 控制大小 */

  display: grid;
  width: var(--s);
  aspect-ratio: 1;
  padding: calc(var(--s) / 20); /* 我們稍后將看到它的用途 */
  border-radius: 50%;
}

.gallery > img {
  grid-area: 1 / 1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
}

對(duì)于每個(gè) 90deg(360deg/4,其中 4 是圖像的數(shù)量),我們將添加一個(gè)小的暫停。在滑動(dòng)到下一個(gè)圖像之前,每個(gè)圖像將保持可見總持續(xù)時(shí)間的 5%(27%-22%、52%-47% 等)。我將使用 cubic-bezier() 函數(shù)更新 animation-timing-function 以使動(dòng)畫更精美:(此處應(yīng)嵌入動(dòng)畫效果,但由于我無法處理動(dòng)畫,我將省略)

現(xiàn)在我們的滑塊很完美!嗯,幾乎完美,因?yàn)槲覀內(nèi)匀蝗鄙僮詈蟮臐櫳簢@我們的圖像旋轉(zhuǎn)的彩色圓形邊框。我們可以在 .gallery 包裝器上使用偽元素來創(chuàng)建它:

.gallery > img {
  /* 與之前相同 */
  animation: m 8s infinite linear;
  transform-origin: 50% 120.7%;
}

@keyframes m {
  100% { transform: rotate(-360deg); }
}

我創(chuàng)建了一個(gè)帶有重復(fù)圓錐漸變的圓圈作為背景,同時(shí)使用了一種僅顯示填充區(qū)域的遮罩技巧。然后我將為圖像定義的相同動(dòng)畫應(yīng)用于它。(此處應(yīng)嵌入動(dòng)畫效果,但由于我無法處理動(dòng)畫,我將省略)

我們完成了!我們有一個(gè)很酷的循環(huán)滑塊:

讓我們添加更多圖像

使用四張圖片很好,但如果我們可以將其擴(kuò)展到任意數(shù)量的圖像,那就更好了。畢竟,這是圖片滑塊的目的。我們應(yīng)該能夠考慮 N 張圖片。

為此,我們將通過引入 Sass 使代碼更通用。首先,我們?yōu)閳D像數(shù)量 ($n) 定義一個(gè)變量,我們將更新我們硬編碼圖像數(shù)量 (4) 的每個(gè)部分。

讓我們從延遲開始:

.gallery > img:nth-child(2) { animation-delay: -2s; } /* -1 * 8s / 4 */
.gallery > img:nth-child(3) { animation-delay: -4s; } /* -2 * 8s / 4 */
.gallery > img:nth-child(4) { animation-delay: -6s; } /* -3 * 8s / 4 */

延遲的公式是 (1 - $i)*duration/$n,這給了我們以下 Sass 循環(huán):

@keyframes m {
  0%, 3% { transform: rotate(0); }
  22%, 27% { transform: rotate(-90deg); }
  47%, 52% { transform: rotate(-180deg); }
  72%, 77% { transform: rotate(-270deg); }
  98%, 100% { transform: rotate(-360deg); }
}

如果我們真的想,我們也可以使持續(xù)時(shí)間成為一個(gè)變量。但是讓我們繼續(xù)進(jìn)行動(dòng)畫:

.gallery {
  padding: calc(var(--s) / 20); /* 此處需要填充 */
  position: relative;
}

.gallery::after {
  content: "";
  position: absolute;
  inset: 0;
  padding: inherit; /* 繼承相同的填充 */
  border-radius: 50%;
  background: repeating-conic-gradient(#789048 0 30deg, #DFBA69 0 60deg);
  mask:
    linear-gradient(#fff 0 0) content-box,
    linear-gradient(#fff 0 0);
  mask-composite: exclude;
}

.gallery::after,
.gallery > img {
  animation: m 8s infinite cubic-bezier(.5, -0.2, .5, 1.2);
}

讓我們簡化它以更好地查看模式:

.gallery > img:nth-child(2) { animation-delay: -2s; } /* -1 * 8s / 4 */
.gallery > img:nth-child(3) { animation-delay: -4s; } /* -2 * 8s / 4 */
.gallery > img:nth-child(4) { animation-delay: -6s; } /* -3 * 8s / 4 */

每個(gè)狀態(tài)之間的步長等于 25%——即 100%/4——我們添加一個(gè) -90deg 角——即 -360deg/4。這意味著我們可以這樣編寫循環(huán):

@for $i from 2 to ($n + 1) {
  .gallery > img:nth-child(#{$i}) {
    animation-delay: calc(#{(1 - $i) / $n} * 8s);
  }
}

由于每個(gè)圖像占據(jù)動(dòng)畫的 5%,我們更改此內(nèi)容:

@keyframes m {
  0%, 3% { transform: rotate(0); }
  22%, 27% { transform: rotate(-90deg); }
  47%, 52% { transform: rotate(-180deg); }
  72%, 77% { transform: rotate(-270deg); }
  98%, 100% { transform: rotate(-360deg); }
}

……與此:

<div>
  <img alt="" src=""><img alt="" src=""><img alt="" src=""><img alt="" src="">
</div>

需要注意的是,5% 是我為此示例選擇的任意值。我們也可以將其設(shè)為變量來控制每個(gè)圖像應(yīng)保持可見的時(shí)間。為了簡單起見,我將跳過這一點(diǎn),但作為家庭作業(yè),您可以嘗試這樣做并在評(píng)論中分享您的實(shí)現(xiàn)!

.gallery {
  --s: 280px; /* 控制大小 */

  display: grid;
  width: var(--s);
  aspect-ratio: 1;
  padding: calc(var(--s) / 20); /* 我們稍后將看到它的用途 */
  border-radius: 50%;
}

.gallery > img {
  grid-area: 1 / 1;
  width: 100%;
  height: 100%;
  object-fit: cover;
  border-radius: inherit;
}

最后一點(diǎn)是更新 transform-origin。我們將需要一些幾何技巧。無論圖像數(shù)量是多少,配置始終相同。我們將圖像(小圓圈)放置在一個(gè)大圓圈內(nèi),我們需要找到半徑 R 的值。

您可能不想要一個(gè)枯燥的幾何解釋,因此以下是如何找到 R:

.gallery > img {
  /* 與之前相同 */
  animation: m 8s infinite linear;
  transform-origin: 50% 120.7%;
}

@keyframes m {
  100% { transform: rotate(-360deg); }
}

如果我們將其表示為百分比,則得到:

.gallery > img:nth-child(2) { animation-delay: -2s; } /* -1 * 8s / 4 */
.gallery > img:nth-child(3) { animation-delay: -4s; } /* -2 * 8s / 4 */
.gallery > img:nth-child(4) { animation-delay: -6s; } /* -3 * 8s / 4 */

……這意味著 transform-origin 值等于:

@keyframes m {
  0%, 3% { transform: rotate(0); }
  22%, 27% { transform: rotate(-90deg); }
  47%, 52% { transform: rotate(-180deg); }
  72%, 77% { transform: rotate(-270deg); }
  98%, 100% { transform: rotate(-360deg); }
}

我們完成了!我們有一個(gè)適用于任何數(shù)量圖像的滑塊!

讓我們?cè)谀抢锾砑泳艔垐D片:(此處應(yīng)嵌入九張圖片的滑塊效果,但由于我無法處理圖片和動(dòng)畫,我將省略)

添加任意數(shù)量的圖像并使用圖像總數(shù)更新 $n 變量。

總結(jié)

通過使用 CSS 變換和標(biāo)準(zhǔn)幾何的幾個(gè)技巧,我們創(chuàng)建了一個(gè)不錯(cuò)的循環(huán)滑塊,不需要很多代碼。這個(gè)滑塊很酷的一點(diǎn)是,我們不需要費(fèi)心復(fù)制圖像來保持無限動(dòng)畫,因?yàn)槲覀冇幸粋€(gè)圓圈。完整旋轉(zhuǎn)后,我們將返回到第一張圖像!

以上是CSS無限和圓形旋轉(zhuǎn)圖像滑塊的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫 CSS教程,用于創(chuàng)建加載旋轉(zhuǎn)器和動(dòng)畫 Jul 07, 2025 am 12:07 AM

創(chuàng)建CSS加載旋轉(zhuǎn)器的方法有三種:1.使用邊框的基本旋轉(zhuǎn)器,通過HTML和CSS實(shí)現(xiàn)簡單動(dòng)畫;2.使用多個(gè)點(diǎn)的自定義旋轉(zhuǎn)器,通過不同延遲時(shí)間實(shí)現(xiàn)跳動(dòng)效果;3.在按鈕中添加旋轉(zhuǎn)器,通過JavaScript切換類來顯示加載狀態(tài)。每種方法都強(qiáng)調(diào)了設(shè)計(jì)細(xì)節(jié)如顏色、大小、可訪問性和性能優(yōu)化的重要性,以提升用戶體驗(yàn)。

解決CSS瀏覽器兼容性問題和前綴 解決CSS瀏覽器兼容性問題和前綴 Jul 07, 2025 am 01:44 AM

處理CSS瀏覽器兼容性和前綴問題需理解瀏覽器支持差異并合理使用廠商前綴。1.了解常見問題如Flexbox、Grid支持不一,position:sticky失效,動(dòng)畫表現(xiàn)不同;2.查閱CanIuse確認(rèn)特性支持情況;3.正確使用-webkit-、-moz-、-ms-、-o-等廠商前綴;4.推薦使用Autoprefixer自動(dòng)添加前綴;5.安裝PostCSS并配置browserslist指定目標(biāo)瀏覽器;6.構(gòu)建時(shí)自動(dòng)處理兼容性;7.老項(xiàng)目可用Modernizr檢測特性;8.不必追求所有瀏覽器一致,確

顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? 顯示:內(nèi)聯(lián),顯示:塊和顯示:內(nèi)聯(lián)塊之間有什么區(qū)別? Jul 11, 2025 am 03:25 AM

Themaindifferencesbetweendisplay:inline,block,andinline-blockinHTML/CSSarelayoutbehavior,spaceusage,andstylingcontrol.1.Inlineelementsflowwithtext,don’tstartonnewlines,ignorewidth/height,andonlyapplyhorizo??ntalpadding/margins—idealforinlinetextstyling

造型與CSS不同訪問的鏈接 造型與CSS不同訪問的鏈接 Jul 11, 2025 am 03:26 AM

設(shè)置訪問過鏈接的樣式能提升用戶體驗(yàn),尤其在內(nèi)容密集型網(wǎng)站中幫助用戶更好導(dǎo)航。1.使用CSS的:visited偽類可定義已訪問鏈接樣式,如顏色變化;2.注意瀏覽器出于隱私限制僅允許修改部分屬性;3.顏色選擇應(yīng)與整體風(fēng)格協(xié)調(diào),避免突兀;4.移動(dòng)端可能不顯示該效果,建議結(jié)合其他視覺提示如icon輔助標(biāo)識(shí)。

使用CSS剪輯路徑創(chuàng)建自定義形狀 使用CSS剪輯路徑創(chuàng)建自定義形狀 Jul 09, 2025 am 01:29 AM

使用CSS的clip-path屬性可以裁剪元素為自定義形狀,如三角形、圓形缺口、多邊形等,無需依賴圖片或SVG。其優(yōu)勢包括:1.支持circle、ellipse、polygon等多種基本形狀;2.可響應(yīng)式調(diào)整,適配移動(dòng)端;3.易于動(dòng)畫化,可結(jié)合hover或JavaScript實(shí)現(xiàn)動(dòng)態(tài)效果;4.不影響布局流,僅裁剪顯示區(qū)域。常見用法如圓形裁剪clip-path:circle(50pxatcenter)和三角形裁剪clip-path:polygon(50%0%,1000%,00%)。注意

CSS繪畫API是什么? CSS繪畫API是什么? Jul 04, 2025 am 02:16 AM

thecsspaintingapienablesdemimageGenerationinCsssingJavascript.1.developersCreateApaintWorkletClassWithaPaint()method.2.theyregisteritviaregisterpaint()。3.thecustompAntFunctionSthenusitySthenusedisthenusedisthenusedIncerspropertieslikeBacknockforg-image-image.thisallows.thisallowsforderforderynamecvis

如何使用CSS創(chuàng)建響應(yīng)式圖像? 如何使用CSS創(chuàng)建響應(yīng)式圖像? Jul 15, 2025 am 01:10 AM

要使用CSS創(chuàng)建響應(yīng)式圖片,主要可通過以下方法實(shí)現(xiàn):1.使用max-width:100%和height:auto讓圖片在保持比例的同時(shí)自適應(yīng)容器寬度;2.結(jié)合HTML的srcset和sizes屬性智能加載適配不同屏幕的圖片源;3.利用object-fit和object-position控制圖片裁剪與焦點(diǎn)展示。這些方法共同確保圖片在不同設(shè)備上清晰、美觀地呈現(xiàn)。

什么是常見的CSS瀏覽器不一致? 什么是常見的CSS瀏覽器不一致? Jul 26, 2025 am 07:04 AM

不同瀏覽器對(duì)CSS解析存在差異,導(dǎo)致顯示效果不一致,主要包括默認(rèn)樣式差異、盒模型計(jì)算方式、Flexbox和Grid布局支持程度及某些CSS屬性行為不一致。1.默認(rèn)樣式處理不一致,解決方法是使用CSSReset或Normalize.css統(tǒng)一初始樣式;2.舊版IE的盒模型計(jì)算方式不同,建議統(tǒng)一使用box-sizing:border-box;3.Flexbox和Grid在邊緣情況或舊版本中表現(xiàn)有差異,應(yīng)多測試并使用Autoprefixer;4.某些CSS屬性行為不一致,需查閱CanIuse并提供降級(jí)

See all articles