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

目錄
CSS 滑塊系列
HTML 結構
工作原理?
讓我們編寫一些 CSS!
讓我們添加更多圖像
總結
首頁 web前端 css教學 CSS無限和圓形旋轉圖像滑塊

CSS無限和圓形旋轉圖像滑塊

Mar 09, 2025 pm 01:14 PM

CSS Infinite and Circular Rotating Image Slider

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

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

CSS 滑塊系列

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

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

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

HTML 結構

如果您關注過我關於精美圖片裝飾或 CSS 網(wǎng)格和自定義形狀的系列文章,那麼您就會知道我的第一條規(guī)則是使用盡可能少的 HTML。我總是努力尋找 CSS 解決方案,然後再用大量 <div> 和其他內容使代碼混亂。這裡也適用相同的規(guī)則——我們的代碼只不過是容器中的一系列圖像。 <p>假設我們使用四張圖片:</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)在讓我們進入代碼的有趣部分。但首先,我們將深入研究它,以了解我們的滑塊如何工作的邏輯。 </p> <h3 id="工作原理">工作原理? </h3> <p>這是一個視頻,我從中刪除了 <code>overflow: hidden CSS,以便我們可以更好地理解圖像的移動方式:(此處應嵌入視頻,但由於我無法處理視頻,我將用文字描述)視頻展示了四個圖像在一個大圓圈上逆時針旋轉。所有圖像大小相同(圖中用 S 表示)。請注意藍色圓圈,它是與所有圖像中心相交的圓圈,並具有半徑 (R)。稍後我們將需要此值用於我們的動畫。 R 等於 0.707 * S。 (我將跳過給出該方程的幾何計算。)

讓我們編寫一些 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;
}

到目前為止,沒有什麼太複雜的。棘手的部分是動畫。

我們討論過旋轉一個大圓圈,但實際上,我們將單獨旋轉每個圖像,從而產(chǎn)生一個大旋轉圓圈的錯覺。因此,讓我們定義一個動畫 m 並將其應用於圖像元素:

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

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

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

由於 R 等於 0.707 * S,我們可以說 R 等於圖像大小的 70.7%。這是一個圖來說明我們如何得到 120.7% 的值:(此處應嵌入圖片,但由於我無法處理圖片,我將用文字描述)圖片展示了計算transform-origin值的幾何關係。

讓我們運行動畫並看看會發(fā)生什麼:(此處應嵌入動畫效果,但由於我無法處理動畫,我將用文字描述)動畫效果顯示只有一個圖像可見,因為所有圖像疊加在一起。

我們需要延遲每個圖像的動畫以避免這種重疊。

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

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

如果我們在容器上隱藏溢出,我們已經(jīng)可以看到一個滑塊,但我們將稍微更新動畫,以便每個圖像在移動之前都會可見一小段時間。

我們將更新我們的動畫關鍵幀來做到這一點:

.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;
}

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

現(xiàn)在我們的滑塊很完美!嗯,幾乎完美,因為我們仍然缺少最後的潤色:圍繞我們的圖像旋轉的彩色圓形邊框。我們可以在 .gallery 包裝器上使用偽元素來創(chuàng)建它:

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

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

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

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

讓我們添加更多圖像

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

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

讓我們從延遲開始:

.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ù)時間成為一個變量。但是讓我們繼續(xù)進行動畫:

.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 */

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

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

由於每個圖像佔據(jù)動畫的 5%,我們更改此內容:

@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% 是我為此示例選擇的任意值。我們也可以將其設為變量來控制每個圖像應保持可見的時間。為了簡單起見,我將跳過這一點,但作為家庭作業(yè),您可以嘗試這樣做並在評論中分享您的實現(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;
}

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

您可能不想要一個枯燥的幾何解釋,因此以下是如何找到 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); }
}

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

讓我們在那裡添加九張圖片:(此處應嵌入九張圖片的滑塊效果,但由於我無法處理圖片和動畫,我將省略)

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

總結

通過使用 CSS 變換和標準幾何的幾個技巧,我們創(chuàng)建了一個不錯的循環(huán)滑塊,不需要很多代碼。這個滑塊很酷的一點是,我們不需要費心複製圖像來保持無限動畫,因為我們有一個圓圈。完整旋轉後,我們將返回到第一張圖像!

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

本網(wǎng)站聲明
本文內容由網(wǎng)友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權的內容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

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

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

CSS教程,用於創(chuàng)建加載旋轉器和動畫 CSS教程,用於創(chuàng)建加載旋轉器和動畫 Jul 07, 2025 am 12:07 AM

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

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

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

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

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

顯示:內聯(lián),顯示:塊和顯示:內聯(lián)塊之間有什麼區(qū)別? 顯示:內聯(lián),顯示:塊和顯示:內聯(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

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

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)建響應式圖像? 如何使用CSS創(chuàng)建響應式圖像? Jul 15, 2025 am 01:10 AM

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

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

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

See all articles