目錄
CSS 計數器怎麼樣?
數據屬性怎麼樣?
桌面
移動/平板電腦
自定義屬性怎麼樣?
原生CSS 萬歲
首頁 web前端 css教學 創建交錯動畫的不同方法

創建交錯動畫的不同方法

Apr 19, 2025 am 10:28 AM

Different Approaches for Creating a Staggered Animation

基本動畫很簡單:定義關鍵幀、命名動畫、應用於元素。但有時需要更複雜的技巧才能達到理想的動畫效果。例如,聲音均衡器可能對每個條形使用相同的動畫,但它們是交錯的,以產生獨立動畫的錯覺。

最近在構建儀表板時,希望其中一個小部件的項目以交錯動畫的方式顯示。

就像上面的聲音均衡器一樣,我開始使用:nth-child選擇器。我使用無序列表(<ul></ul> )作為父容器,賦予它一個類,並使用:nth-child偽選擇器來通過animation-delay偏移每個列表項的動畫。

 .my-list li {
  animation: my-animation 300ms ease-out;
}

.my-list li:nth-child(1) {
  animation-delay: 100ms;
}

.my-list li:nth-child(2) {
  animation-delay: 200ms;
}

.my-list li:nth-child(3) {
  animation-delay: 300ms;
}

/* 以此類推*/

此技術確實可以很好地交錯項目,特別是如果您知道列表中在任何給定時間有多少項目。但是,當項目數量不可預測時(這正是我為儀表板構建的小部件的情況),這種方法就會失效。我確實不想每次列表中項目數量發生變化時都返回到這段代碼,所以我編寫了一個快速的Sass 循環,它最多可以處理50 個項目,並隨著每個項目的增加而增加動畫延遲:

 .my-list {
  li {
    animation: my-animation 300ms ease-out;

    @for $i from 1 through 50 {
      &:nth-child(#{$i}) {
        animation-delay: 100ms * $i;
      }
    }
  }
}

這應該可以解決問題!然而,感覺太笨拙了。當然,它不會給文件增加太多重量,但是您知道編譯後的CSS 將包含許多未使用的選擇器,例如nth-child(45)

一定有更好的方法。通常我會求助於JavaScript 來查找所有項目並添加延遲,但是……這次我花了一些時間探索一下是否可以用CSS 獨自完成。

CSS 計數器怎麼樣?

我首先想到的是將CSS 計數器與calc()函數結合使用:

 .my-list {
  counter-reset: my-counter;
}

.my-list li {
  counter-increment: my-counter;
  animation-delay: calc(counter(my-counter) * 100ms);
}

不幸的是,這行不通,因為規範說明計數器不能在calc()中使用:

calc()表達式的組件可以是字面值或attr()calc()表達式。

事實證明,一些人喜歡這個想法,但它還沒有超出草案階段。

數據屬性怎麼樣?

在閱讀了規範的摘錄後,我了解到calc()可以使用attr() 。並且,根據CSS 值和單位規範:

在CSS3 中, attr()表達式可以返回許多不同類型的值

這讓我想到;也許數據屬性可以解決問題。


  • Item 1
  • Item 2
  • Item 3
  • Item 4
.my-list li {
  animation-delay: calc(attr(data-count) * 150ms);
}

但是我的希望破滅了,因為這個的瀏覽器支持非常糟糕!

此瀏覽器支持數據來自Caniuse,其中包含更多詳細信息。數字表示瀏覽器在該版本及更高版本中支持該功能。

桌面

移動/平板電腦

所以,回到繪圖板。

自定義屬性怎麼樣?

我的下一個想法是使用CSS 自定義屬性。它並不漂亮,但它有效了?

事實證明它也很靈活。例如,動畫可以反轉:

它還可以做一些完全隨機的事情並且同時動畫元素:

我們甚至可以更進一步,做一個對角線揮動:

瀏覽器支持並沒有那麼糟糕(戳戳Internet Explorer )。

此瀏覽器支持數據來自Caniuse,其中包含更多詳細信息。數字表示瀏覽器在該版本及更高版本中支持該功能。

桌面

移動/平板電腦

CSS 的一個很棒的功能是它會忽略它不理解的東西,這要歸功於級聯。這意味著所有內容都將一起動畫到視圖中。如果這不是您的風格,您可以添加一個功能查詢來覆蓋默認動畫:

 .my-list li {
  animation: fallback-animation;
}

@supports (--variables) {
  .my-list li {
    animation: fancy-animation;
    animation-delay: calc(var(--animation-order) * 100ms);
  }
}

原生CSS 萬歲

我越停下來問自己是否需要JavaScript,就越驚訝於CSS 本身可以做什麼。當然,如果CSS 計數器可以在calc()函數中使用,那將是一個非常優雅的解決方案。但就目前而言,內聯自定義屬性提供了一種強大而靈活的方法來解決此問題。

以上是創建交錯動畫的不同方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

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

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整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

PHP教程
1598
276
什麼是用戶代理樣式表? 什麼是用戶代理樣式表? Jul 31, 2025 am 10:35 AM

用戶代理樣式表是瀏覽器自動應用的默認CSS樣式,用於確保未添加自定義樣式的HTML元素仍具基本可讀性。它們影響頁面初始外觀,但不同瀏覽器存在差異,可能導致不一致顯示。開發者常通過重置或標準化樣式來解決這一問題。使用開發者工具的“計算”或“樣式”面板可查看默認樣式。常見覆蓋操作包括清除內外邊距、修改鏈接下劃線、調整標題大小及統一按鈕樣式。理解用戶代理樣式有助於提升跨瀏覽器一致性並實現精準佈局控制。

如何使用CSS Backdrop-Filter屬性? 如何使用CSS Backdrop-Filter屬性? Aug 02, 2025 pm 12:11 PM

backdrop-filter用於對元素背後的內容應用視覺效果,1.使用backdrop-filter:blur(10px)等語法實現毛玻璃效果;2.支持blur、brightness、contrast等多種濾鏡函數並可疊加;3.常用於玻璃態卡片設計,需確保元素與背景重疊;4.現代瀏覽器支持良好,可用@supports提供降級方案;5.避免過大模糊值和頻繁重繪以優化性能,該屬性僅在元素背後有內容時生效。

CSS暗模式切換示例 CSS暗模式切換示例 Jul 30, 2025 am 05:28 AM

首先通過JavaScript獲取用戶系統偏好和本地存儲的主題設置,初始化頁面主題;1.HTML結構包含一個按鈕用於觸發主題切換;2.CSS使用:root定義亮色主題變量,.dark-mode類定義暗色主題變量,並通過var()應用這些變量;3.JavaScript檢測prefers-color-scheme並讀取localStorage決定初始主題;4.點擊按鈕時切換html元素上的dark-mode類,並將當前狀態保存至localStorage;5.所有顏色變化均帶有0.3秒過渡動畫,提升用戶

如何在CSS中使用大眾和VH單元 如何在CSS中使用大眾和VH單元 Aug 07, 2025 pm 11:44 PM

vw和vh單位通過將元素尺寸與視口寬度和高度關聯,實現響應式設計;1vw等於視口寬度的1%,1vh等於視口高度的1%;常用於全屏區域、響應式字體和彈性間距;1.全屏區域使用100vh或更優的100dvh避免移動瀏覽器地址欄影響;2.響應式字體可用5vw並結合clamp(1.5rem,3vw,3rem)限制最小和最大尺寸;3.彈性間距如width:80vw、margin:5vhauto、padding:2vh3vw可使佈局自適應;需注意移動設備兼容性、可訪問性及固定寬度內容衝突,建議優先使用dvh

CSS方面比例屬性是什麼?如何使用它? CSS方面比例屬性是什麼?如何使用它? Aug 04, 2025 pm 04:38 PM

Theaspect-ratioCSSpropertydefinesthewidth-to-heightratioofanelement,ensuringconsistentproportionsinresponsivedesigns.1.Itisapplieddirectlytoelementslikeimages,videos,orcontainersusingsyntaxsuchasaspect-ratio:16/9.2.Commonusecasesincludemaintainingres

如何使用CSS:空偽級? 如何使用CSS:空偽級? Aug 05, 2025 am 09:48 AM

:emptyPseudo-classSelectSelectsselemtswithnochildrenorcontent,包括pacesorcomments,sonlyTrulyEmpterementLikeMatchit; 1.ItcanhideEmptycontainersbousing:intume {note {note display:none;} toCleanuplayouts; 2.ItallowSaddingplacePlacePlacePlaceLanderStylingLingvia :: Forefore :: Forefor :: show offor :: show

如何在CSS中重疊元素? 如何在CSS中重疊元素? Jul 30, 2025 am 05:43 AM

要實現CSS元素重疊,需使用定位和z-index屬性。 1.使用position和z-index:將元素設置為非static定位(如absolute、relative等),並通過z-index控制堆疊順序,值越大越靠前。 2.常見定位方法:absolute用於精確佈局,relative用於相對偏移並重疊相鄰元素,fixed或sticky用於固定定位的懸浮層。 3.實際示例:通過設置父容器position:relative,子元素position:absolute和不同z-index,可實現卡片重疊效果

如何使用CSS創建彈跳動畫? 如何使用CSS創建彈跳動畫? Aug 02, 2025 am 05:44 AM

Define@keyframesbouncewith0%,100%attranslateY(0)and50%attranslateY(-20px)tocreateabasicbounce.2.Applytheanimationtoanelementusinganimation:bounce0.6sease-in-outinfiniteforsmooth,continuousmotion.3.Forrealism,use@keyframesrealistic-bouncewithscale(1.1

See all articles