創建交錯動畫的不同方法
基本動畫很簡單:定義關鍵幀、命名動畫、應用於元素。但有時需要更複雜的技巧才能達到理想的動畫效果。例如,聲音均衡器可能對每個條形使用相同的動畫,但它們是交錯的,以產生獨立動畫的錯覺。
最近在構建儀表板時,希望其中一個小部件的項目以交錯動畫的方式顯示。
就像上面的聲音均衡器一樣,我開始使用: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中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

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

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

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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