国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
CSS 滑塊系列
HTML 結(jié)構(gòu)
工作原理?
讓我們編寫一些 CSS!
讓我們添加更多圖像
總結(jié)
首頁 web前端 css教學(xué) 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;
}

到目前為止,沒有什麼太複雜的。棘手的部分是動(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è)帶有重複圓錐漸變的圓圈作為背景,同時(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);
}

讓我們簡(jiǎn)化它以更好地查看模式:

.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è)圖像佔(zhàn)據(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í)間。為了簡(jiǎn)單起見,我將跳過這一點(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è)谀茄e添加九張圖片:(此處應(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)心複製圖像來保持無限動(dòng)畫,因?yàn)槲覀冇幸粋€(gè)圓圈。完整旋轉(zhuǎn)後,我們將返回到第一張圖像!

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

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)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脫衣器

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”? 什麼是'渲染障礙CSS”? Jun 24, 2025 am 12:42 AM

CSS會(huì)阻塞頁面渲染是因?yàn)闉g覽器默認(rèn)將內(nèi)聯(lián)和外部CSS視為關(guān)鍵資源,尤其是使用引入的樣式表、頭部大量內(nèi)聯(lián)CSS以及未優(yōu)化的媒體查詢樣式。 1.提取關(guān)鍵CSS並內(nèi)嵌至HTML;2.延遲加載非關(guān)鍵CSS通過JavaScript;3.使用media屬性優(yōu)化加載如打印樣式;4.壓縮合併CSS減少請(qǐng)求。建議使用工具提取關(guān)鍵CSS,結(jié)合rel="preload"異步加載,合理使用media延遲加載,避免過度拆分與復(fù)雜腳本控制。

如何在無花果中使用Lotties 如何在無花果中使用Lotties Jun 14, 2025 am 10:17 AM

在接下來的教程中,我將向您展示如何在無花果中創(chuàng)建Lottie動(dòng)畫。我們將使用兩種彩色設(shè)計(jì)來超越如何在無花果上進(jìn)行動(dòng)畫,然後向您展示如何從Figma到Lottie動(dòng)畫。您只需要免費(fèi)無花果

外部與內(nèi)部CSS:最好的方法是什麼? 外部與內(nèi)部CSS:最好的方法是什麼? Jun 20, 2025 am 12:45 AM

thebestapphachforcssdepprodsontheproject'sspefificneeds.forlargerprojects,externalcsSissBetterDuoSmaintoMaintainability andReusability; forsMallerProjectsorsingle-pageApplications,InternaltCsmightBemoresobleable.InternalCsmightBemorese.it.it'sclucialtobalancepopryseceneceenceprodrenceprodrenceNeed

我的CSS必須在較低的情況下嗎? 我的CSS必須在較低的情況下嗎? Jun 19, 2025 am 12:29 AM

否,CSSDOESNOTHAVETOBEINLOWERCASE.CHOMENDENS,使用flowercaseisrecommondendendending:1)一致性和可讀性,2)避免使用促進(jìn)性技術(shù),3)潛在的Performent FormanceBenefits,以及4)RightCollaboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraboraborationWithInteams。

CSS案例靈敏度:了解重要的 CSS案例靈敏度:了解重要的 Jun 20, 2025 am 12:09 AM

cssismostlycaseminemintiment,buturlsandfontfamilynamesarecase敏感。 1)屬性和valueslikeColor:紅色; prenotcase-sensive.2)urlsmustmustmatchtheserver'server'scase,例如

什麼是AutoPrefixer,它如何工作? 什麼是AutoPrefixer,它如何工作? Jul 02, 2025 am 01:15 AM

Autoprefixer是一個(gè)根據(jù)目標(biāo)瀏覽器範(fàn)圍自動(dòng)為CSS屬性添加廠商前綴的工具。 1.它解決了手動(dòng)維護(hù)前綴易出錯(cuò)的問題;2.通過PostCSS插件形式工作,解析CSS、分析需加前綴的屬性、依配置生成代碼;3.使用步驟包括安裝插件、設(shè)置browserslist、在構(gòu)建流程中啟用;4.注意事項(xiàng)有不手動(dòng)加前綴、保持配置更新、非所有屬性都加前綴、建議配合預(yù)處理器使用。

什麼是CSS計(jì)數(shù)器? 什麼是CSS計(jì)數(shù)器? Jun 19, 2025 am 12:34 AM

csscounterscanautomationallymentermentermentections和lists.1)usecounter-ensettoInitializize,反插入式發(fā)芽,andcounter()orcounters()

CSS:何時(shí)重要(何時(shí)不)? CSS:何時(shí)重要(何時(shí)不)? Jun 19, 2025 am 12:27 AM

在CSS中,選擇器和屬性名不區(qū)分大小寫,而值、命名顏色、URL和自定義屬性則區(qū)分大小寫。 1.選擇器和屬性名不區(qū)分大小寫,例如background-color和Background-Color相同。 2.值中的十六進(jìn)制顏色不區(qū)分大小寫,但命名顏色區(qū)分大小寫,如red有效而Red無效。 3.URL區(qū)分大小寫,可能導(dǎo)致文件加載問題。 4.自定義屬性(變量)區(qū)分大小寫,使用時(shí)需注意大小寫一致。

See all articles