精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一種巧妙的使用 CSS 制作波浪效果的思路

開發 前端
本文將會再介紹另外一種使用 CSS 實現的波浪效果,思路非常有意思。

[[400009]]

在之前,我介紹過幾種使用純 CSS 實現波浪效果的方式,關于它們有兩篇相關的文章:

  • 純 CSS 實現波浪效果![1]
  • 巧用 CSS 實現酷炫的充電動畫[2]

本文將會再介紹另外一種使用 CSS 實現的波浪效果,思路非常有意思。

從定積分實現曲邊三角形面積說起

在進入主題之前,先看看這個,在高等數學中,我們可以通過定積分求二次函數曲邊圖形面積。

我們可以將曲線下的面積分割成 n 個的細高的矩形,當 n 無限趨近于無窮時,所有矩形的面積就等于曲邊圖形的面積。

兩張簡單的示意圖,圖取自為什么定積分可以求面積?[3]

當 n 無限趨近于無窮時,所有矩形的面積就等于曲邊圖形的面積:

image

利用這個思路,我們也可以通過多個 div 在 CSS 中模擬出一條曲邊,也就是波浪線。

Step 1. 將圖形切割為多份

首先,我們可以定義一個父容器,父容器下有 12 個子 div:

  1. <div class="g-container"
  2.   <div class="g-item"></div> 
  3.   <div class="g-item"></div> 
  4.   <div class="g-item"></div> 
  5.   <div class="g-item"></div> 
  6.   <div class="g-item"></div> 
  7.   <div class="g-item"></div> 
  8.   <div class="g-item"></div> 
  9.   <div class="g-item"></div> 
  10.   <div class="g-item"></div> 
  11.   <div class="g-item"></div> 
  12.   <div class="g-item"></div> 
  13.   <div class="g-item"></div> 
  14. </div> 

通過 flex 布局,簡單布局一下,得到這樣一個圖形,每個子元素等高:

  1. .g-container { 
  2.     width: 200px; 
  3.     height: 200px; 
  4.     border: 2px solid #fff; 
  5.     display: flex; 
  6.     align-items: flex-end
  7.  
  8. .g-item { 
  9.     flex-grow: 1; 
  10.     height: 60px; 
  11.     background-color: #fff; 

效果如下:

Step 2. 讓每個子元素以不同負延遲運行高度變換動畫

接下來,簡單改造下,我們需要讓這個圖動起來,通過改變每個子元素的高度實現:

  1. .g-item { 
  2.     flex-grow: 1; 
  3.     height: 60px; 
  4.     background-color: #000; 
  5.     animation: heightChange 1s infinite ease-in-out alternate; 
  6.  
  7. @keyframes heightChange { 
  8.     from { 
  9.         height: 60px; 
  10.     } 
  11.     to { 
  12.         height: 90px; 
  13.     } 

效果如下:

圖片

接下來,只需要,讓每個子元素的動畫順序設定一個不同時間的負延遲即可,就可以得到一個初步的波浪效果,這里為了減少工作量,我們借助 SASS 實現:

  1. $count: 12; 
  2. $speed: 1s; 
  3.  
  4. .g-item { 
  5.     --f: #{$speed / -12}; 
  6.     flex-grow: 1; 
  7.     height: 60px; 
  8.     background-color: #000; 
  9.     animation: heightChange $speed infinite ease-in-out alternate; 
  10.  
  11. @for $i from 0 to $count { 
  12.     .g-item:nth-child(#{$i + 1}) { 
  13.         animation-delay: calc(var(--f) * #{$i}); 
  14.     } 
  15.  
  16. @keyframes heightChange { 
  17.     from { 
  18.         height: 60px; 
  19.     } 
  20.     to { 
  21.         height: 90px; 
  22.     } 

這樣,我們就得到了一個初步的波浪效果:

圖片

Step 3. 消除鋸齒

可以看到,上述的波浪動畫是存在一定的鋸齒的,接下來我們要做的就是盡可能的消除掉這些鋸齒。

法一:增加 div 的數量

按照一開始使用定積分求曲邊圖形面積的思想,我們只需要盡可能增加子 div 的數量即可,當 div 的數量無窮多的時候,鋸齒也就會消失不見。

我們可以嘗試將上述的 12 個子 div,替換成 120 個試下,一個一個寫 120 個 div 太費力了,我們這里借助 Pug[4] 模板引擎:

  1. div.g-container 
  2.  -for(var i=0; i<120; i++) 
  3.     div.g-item 

對于 CSS 代碼,只需要改動動畫延遲的時間即可,120 個子 div 的負延遲都控制在 1s 內:

  1. // 12 -- 120 
  2. $count: 120; 
  3. $speed: 1s; 
  4.  
  5. .g-item { 
  6.     // 注意,只有這里發生了變化 
  7.     --f: #{$speed / -120}; 
  8.     flex-grow: 1; 
  9.     height: 60px; 
  10.     background-color: #000; 
  11.     animation: heightChange $speed infinite ease-in-out alternate; 
  12.  
  13. @for $i from 0 to $count { 
  14.     .g-item:nth-child(#{$i + 1}) { 
  15.         animation-delay: calc(var(--f) * #{$i}); 
  16.     } 

這樣,我們就可以得到一條比較光滑的曲線啦:

圖片

法二:通過 transform: skew() 模擬弧度

當然,實際情況,使用那么多個 div 實在是太浪費了,那么有沒有其它方法在 div 數量比較少的情況下,也能夠盡可能的消除鋸齒呢?

這里,我們可以嘗試給子元素在運動變換的過程中添加不同的 transform: skewY() 去模擬弧度。

再改造下代碼,我們將 div 的數量調低,并且給每個子 div 再添加一個 transform: skewY()的動畫效果:

  1. div.g-container 
  2.  -for(var i=0; i<24; i++) 
  3.     div.g-item 

完整的 CSS 代碼如下:

  1. $count: 24; 
  2. $speed: 1s; 
  3.  
  4. .g-item { 
  5.     // 注意,只有這里發生了變化 
  6.     --f: #{$speed / -24}; 
  7.     flex-grow: 1; 
  8.     height: 60px; 
  9.     background-color: #000; 
  10.     animation:  
  11.         heightChange $speed infinite ease-in-out alternate, 
  12.         skewChange $speed infinite ease-in-out alternate; 
  13.  
  14. @for $i from 0 to $count { 
  15.     .g-item:nth-child(#{$i + 1}) { 
  16.         animation-delay:  
  17.             calc(var(--f) * #{$i}),  
  18.             calc(var(--f) * #{$i} - #{$speed / 2}); 
  19.     } 
  20.  
  21. @keyframes heightChange { 
  22.     from { 
  23.         height: var(--h); 
  24.     } 
  25.     to { 
  26.         height: calc(var(--h) + 30px); 
  27.     } 
  28.  
  29. @keyframes skewChange { 
  30.     from { 
  31.         transform: skewY(20deg); 
  32.     } 
  33.     to { 
  34.         transform: skewY(-20deg); 
  35.     } 

為了方便理解,首先看看,高度變換動畫一致的情況下,子 div 的添加了 skewY() 的變換是如何的:

圖片

能看到每次變換是有明顯的突起的鋸齒的,疊加上延遲的高度變換,就能夠很好的消除大部分的鋸齒效果:

圖片

至此,我們就得到了另外一種 div 數量適中的消除鋸齒的方法!上述所有效果的完整代碼,你可以戳這里:

CodePen -- PureCSS Wave Effects[5]

混合使用

最后,我們可以通過調整幾個變量參數,將幾個不同的波浪效果組合在一起,得到一些組合效果,也很不錯。

類似這樣:

圖片

CodePen -- PureCSS Wave Effects 2[6]

基于此,我聯想到我們公司(Shopee)的母公司 -- Sea Group 的 LOGO,它長得如下:

利用本文的方案,給它實現一個動態的 LOGO 動畫:

圖片

CodePen Demo -- PureCSS Wave - Sea Group Logo[7]

缺點

該方案的缺點還是很明顯的:

  • 首先是廢 div,需要比較多的 div 來實現效果,而且 div 越多,效果會越好,當然增加到一定程度,卡頓是不可避免的
  • 鋸齒無法完全消除,這個是最致命或者說影響它真正能夠有用武之地的地方吧

當然,本文的目的重點更多的是開拓一下思維,探討一下這種方式的優劣,實現動畫的整個過程,動畫負延遲時間的運用,都是有一些參考學習意義的。CSS 還是非常有趣的~ 🤣

最后

好了,本文到此結束,希望對你有幫助 :)

參考資料

[1]純 CSS 實現波浪效果!:

https://github.com/chokcoco/iCSS/issues/22

[2]巧用 CSS 實現酷炫的充電動畫:

https://github.com/chokcoco/iCSS/issues/75

[3]為什么定積分可以求面積?:

https://www.zhihu.com/question/21439225

[4]Pug:

https://github.com/pugjs/pug

[5]CodePen -- PureCSS Wave Effects:

https://codepen.io/Chokcoco/pen/XWpxQBd

[6]CodePen -- PureCSS Wave Effects 2:

https://codepen.io/Chokcoco/pen/yLgQgLo

[7]CodePen Demo -- PureCSS Wave - Sea Group Logo:

https://codepen.io/Chokcoco/pen/zYZrmvb

[8]Github -- iCSS:

https://github.com/chokcoco/iCSS

 

責任編輯:姜華 來源: iCSS前端趣聞
相關推薦

2022-06-23 07:05:46

跳板機服務器PAM

2010-08-23 14:25:13

marginCSS

2016-10-13 10:57:55

phptcp專欄

2023-09-17 23:16:46

緩存數據庫

2016-10-26 09:12:58

2018-04-18 07:34:58

2020-11-27 14:45:57

開發服務器代碼

2024-05-09 08:20:29

AC架構數據庫冗余存儲

2020-12-09 10:15:34

Pythonweb代碼

2022-06-22 09:44:41

Python文件代碼

2022-07-07 10:33:27

Python姿勢代碼

2020-12-23 10:10:23

Pythonweb代碼

2019-11-22 09:21:17

技術研發數據

2024-04-26 08:58:54

if-else代碼JavaSpring

2017-08-24 15:02:01

前端增量式更新

2024-04-30 08:12:05

CRUD方法JavaAC架構

2025-01-13 08:36:26

2021-09-28 08:26:06

CSS 技巧文字鏤空波浪

2014-03-17 10:30:12

網絡服務器

2023-06-05 09:28:32

CSS漸變
點贊
收藏

51CTO技術棧公眾號

日本久久一区| 国产视频网站在线| 国产欧美日韩综合一区在线播放| 亚洲精品福利在线观看| 欧美精品无码一区二区三区| 成人在线观看亚洲| 国产亚洲欧美激情| 97se国产在线视频| 91丨九色丨海角社区| 你懂的成人av| 亚洲夜晚福利在线观看| 丰满岳乱妇一区二区| aaaa欧美| 精品久久久视频| 91精品国产吴梦梦| 搞黄视频免费在线观看| 成年人网站91| 亚洲在线www| 中文有码在线播放| 99视频在线精品国自产拍免费观看| 日韩在线国产精品| 深爱五月激情网| 2020最新国产精品| 欧美美女网站色| 中文字幕乱码人妻综合二区三区| 亚洲无线看天堂av| 中文字幕中文在线不卡住| 欧美精品123| 狠狠躁日日躁夜夜躁av| 国内成人精品2018免费看| 国产成人精品日本亚洲| 豆国产97在线 | 亚洲| 中出一区二区| 久久精品国产亚洲精品2020| 免费看91的网站| 婷婷综合一区| 亚洲精品国精品久久99热| 丰满饥渴老女人hd| 国产色99精品9i| 777亚洲妇女| 天天干天天综合| 成人激情视屏| 欧美性猛交xxxx乱大交退制版| 无罩大乳的熟妇正在播放| 日本天码aⅴ片在线电影网站| 日韩理论在线观看| 一区二区三区在线观看www| av电影在线播放高清免费观看| 久久精品视频一区二区三区| 欧美激情一区二区三区在线视频| 亚洲区小说区图片区| eeuss国产一区二区三区| 国产传媒一区二区| 欧美一级特黄aaaaaa| 风流少妇一区二区| 国产伦精品一区二区三区视频黑人| www.五月婷| 成人自拍视频在线| 国产区日韩欧美| 四虎精品在线| 国产人伦精品一区二区| 手机看片福利永久国产日韩| 成年人在线观看| 国产拍欧美日韩视频二区| 欧美主播一区二区三区美女 久久精品人| 日韩欧美在线番号| 国产午夜亚洲精品不卡| 亚洲成人第一| av免费在线免费| 亚洲高清免费观看| 久久美女福利视频| www.26天天久久天堂| 7777精品伊人久久久大香线蕉的 | 操人在线观看| 欧美日韩免费一区| 能看的毛片网站| 亚洲色图综合| 亚洲成人亚洲激情| 国产123在线| 羞羞色午夜精品一区二区三区| 欧美国产日本在线| 亚洲国产成人精品女人久久| 麻豆久久一区二区| 国内精品视频在线播放| 国产天堂在线| 亚洲最新在线观看| 少妇高清精品毛片在线视频| 91麻豆精品国产综合久久久| 亚洲精品福利资源站| 国精品人伦一区二区三区蜜桃| 亚洲网站啪啪| 国产精品黄视频| 亚洲精品网站在线| 国产婷婷色一区二区三区| 91九色国产ts另类人妖| 忘忧草在线日韩www影院| 88在线观看91蜜桃国自产| 久久人人妻人人人人妻性色av| 青草国产精品| 91国内精品久久| 国产男女裸体做爰爽爽| 久久亚洲春色中文字幕久久久| 中文字幕欧美人与畜| 伊人网在线播放| 欧美一级在线视频| 99久久久无码国产精品衣服| 激情综合在线| 亚洲一区国产精品| 1769在线观看| 色综合中文字幕国产| 黄页网站在线看| 日本黄区免费视频观看| 三级外国片在线观看视频| 亚洲精品国产一区二区精华液 | 日本少妇吞精囗交| 久久99最新地址| 欧美精品v日韩精品v国产精品| 日本三级在线观看网站| 在线综合亚洲欧美在线视频| 91网站免费视频| 亚洲精品一二| 国产精品加勒比| 在线视频国产区| 欧美人牲a欧美精品| jizz中文字幕| 美女视频一区免费观看| 国产原创精品| 国产精品一区hongkong| 欧美一区二区三区视频在线观看| 懂色av蜜桃av| 日本午夜精品一区二区三区电影 | 久久国产成人精品| 国产z一区二区三区| 日本护士...精品国| 婷婷一区二区三区| 亚洲精品女人久久久| 国内精品久久久久久久97牛牛| 亚洲一区二区三区乱码aⅴ蜜桃女| 91sp网站在线观看入口| 欧美日韩综合色| 夫妇露脸对白88av| 美女在线观看视频一区二区| 无遮挡亚洲一区| 精品三区视频| 中文字幕亚洲综合久久筱田步美| 亚洲精品国产精品国自产网站按摩| 久久久国产午夜精品| 成人亚洲视频在线观看| jiujiure精品视频播放| 国产精品久久久久久久av电影| 番号集在线观看| 欧美日韩国产不卡| 国产一二三四区| 国产高清精品在线| a级免费在线观看| 伦理一区二区三区| 情事1991在线| 亚洲1卡2卡3卡4卡乱码精品| 欧美绝品在线观看成人午夜影视| 北条麻妃在线观看视频| 国产伦精品一区二区三区免费 | 熟女少妇a性色生活片毛片| 久久国产麻豆精品| 日韩成人午夜影院| 精品国产导航| 国产精品成人观看视频国产奇米| 日韩黄色影院| 精品久久久久久无| 日韩一区二区视频在线| 亚洲国产精品精华液ab| 51自拍视频在线观看| 伊人精品成人久久综合软件| 日韩高清国产一区在线观看| 99精品美女视频在线观看热舞| 久久久久久久久爱| 国产一区二区三区福利| 717成人午夜免费福利电影| 国产在线成人精品午夜| 国产日韩欧美电影| 国产又黄又嫩又滑又白| 亚洲一区网站| 黄色一级视频播放| 五月激激激综合网色播| 成人国产精品av| 黄网在线免费看| 亚洲免费av片| 999久久久久久| 日韩欧美在线视频免费观看| 国产精品国产精品88| 91色在线porny| 免费av不卡在线| 亚洲一区黄色| 四虎免费在线观看视频| 中国av一区| 99久久精品久久久久久ai换脸| 成人免费直播| 欧美大片免费看| av影片在线看| 日韩av一区二区在线| 国产视频手机在线观看| 色婷婷精品大视频在线蜜桃视频| 麻豆成人在线视频| 国产女人水真多18毛片18精品视频| 日本wwwwwww| 免费的国产精品| 久久久噜噜噜www成人网| 亚洲久久久久| 日韩欧美一区二区三区久久婷婷| 激情av综合| 91中文在线观看| 亚洲电影有码| 国产91精品不卡视频| 欧美人与性动交α欧美精品图片| 中文字幕欧美日韩| 久久久久久久影视| 精品1区2区在线观看| 国产人妖在线播放| 欧美日韩电影在线播放| 狠狠狠狠狠狠狠| 欧美日韩美女在线| 精品少妇久久久| 亚洲精品亚洲人成人网| 任你操精品视频| 中文字幕巨乱亚洲| 亚洲最大成人网站| 91美女片黄在线| 在线观看一区二区三区四区| 国产精品自拍网站| 国产乱女淫av麻豆国产| 另类综合日韩欧美亚洲| 尤蜜粉嫩av国产一区二区三区| 美女诱惑一区| heyzo国产| 翔田千里一区二区| 国产中文字幕免费观看| 中文欧美日韩| 日本欧美黄色片| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产欧美日韩精品专区| 欧美成人福利| 国产精品色悠悠| 欧美性aaa| 91精品免费看| 精品一区二区三区在线观看视频 | 男操女免费网站| 青青国产91久久久久久 | 91成人精品观看| 亚洲最大的av网站| 日韩成人精品| 成人黄视频免费| 国内毛片久久| 九九九九九精品| 国产精品一线天粉嫩av| 色一情一乱一伦一区二区三区丨 | 114国产精品久久免费观看| 精品国产一区二区三区2021| 国产精品久久久久久久天堂第1集| 久久aimee| 欧美日韩国产精品一卡| 色一区二区三区四区| av磁力番号网| 亚洲久久一区二区| 午夜激情福利在线| 黑人精品欧美一区二区蜜桃| 少妇献身老头系列| 99久久伊人久久99| 日本成人免费视频| 自拍偷在线精品自拍偷无码专区| 久久精品国产亚洲AV无码麻豆| 天天做天天摸天天爽国产一区| 欧美激情一区二区三区免费观看| 777久久久精品| 少妇喷水在线观看| 中文字幕日韩欧美在线| 日韩激情av| 国产精品黄视频| 99精品国产高清一区二区麻豆| 久久精品国产精品青草色艺| 色呦哟—国产精品| heyzo亚洲| 久久精品国产77777蜜臀| 日韩黄色一区二区| 欧美国产禁国产网站cc| 色在线观看视频| 在线免费亚洲电影| 国产男男gay体育生网站| 亚洲欧美激情一区| 91精品久久久| 国产精品88a∨| 51精品国产| 亚洲一区二区三区在线观看视频| 国产999精品| 欧美三级日本三级少妇99| 久操视频在线免费观看| 欧美一区二区不卡视频| 精品成人一区二区三区免费视频| 久久精品国产亚洲| xx欧美视频| 97碰碰视频| 欧洲美女日日| 丁香花在线影院观看在线播放| 日韩国产一区二| 国产伦精品一区二区三区88av| 欧美国产精品一区二区| 国产无遮挡裸体免费视频| 欧美日韩国产高清一区二区| 色视频免费在线观看| 久久精品青青大伊人av| 日韩精品av| 99久久久久国产精品免费| 清纯唯美亚洲综合一区| 国产网站免费在线观看| 国产大片一区二区| 精品亚洲aⅴ无码一区二区三区| 亚洲成a人片在线观看中文| 国产一区二区小视频| 亚洲日本aⅴ片在线观看香蕉| 国产探花在线观看| 91久久国产精品91久久性色| 欧美午夜精彩| 99久久国产宗和精品1上映| caoporm超碰国产精品| 久久久国产精品人人片| 欧美精品123区| 一区二区三区视频在线观看视频| 国产第一区电影| 久久99免费视频| 日本一本二本在线观看| www.亚洲免费av| 国产午夜小视频| 欧美videofree性高清杂交| 高潮毛片在线观看| 亚洲淫片在线视频| 午夜视频一区| 国产成人精品一区二区三区在线观看 | 欧美日韩另类在线| 午夜av免费观看| 55夜色66夜色国产精品视频| 久久精品国产亚洲blacked| 一卡二卡三卡视频| 成人免费视频播放| 国产第100页| 亚洲国产精品va| 美女的胸无遮挡在线观看 | 色爱综合网欧美| www.久久av.com| 亚洲视频图片小说| 精品国产亚洲av麻豆| 久久久久国产一区二区三区| 久久综合五月婷婷| 国产免费成人在线| 国产欧美1区2区3区| 91国内精品久久久| 九色精品免费永久在线| gogo久久日韩裸体艺术| 97成人在线免费视频| 久久这里只有精品首页| 国产一级片av| 久久久av免费| 成功精品影院| 无码内射中文字幕岛国片| 国产精品色呦呦| 国产成人a人亚洲精品无码| 欧美激情一区二区三级高清视频| 精品三级在线观看视频| 国产成人手机视频| 亚洲乱码国产乱码精品精98午夜| 亚洲免费成人网| 日本免费久久高清视频| 欧美成人milf| 中国黄色片视频| 91精品办公室少妇高潮对白| 日本不卡在线| 国产欧美综合精品一区二区| 日韩电影在线一区二区三区| 中国毛片直接看| 日韩精品www| 色999韩欧美国产综合俺来也| 丁香婷婷综合激情| 国产欧美一区二区精品性色超碰 | 最新黄色av网站| av在线综合网| 在线观看黄色网| 久久男人资源视频| 日韩久久精品网| 91精品啪在线观看国产| 欧美亚洲精品一区| 国产桃色电影在线播放| 午夜老司机精品| 菠萝蜜视频在线观看一区| 最近国语视频在线观看免费播放| 欧美裸体男粗大视频在线观看| 夜夜春成人影院| 四虎国产精品永久免费观看视频| 精品久久中文字幕| 2020国产在线视频| 日韩av影视| www.激情成人| 国产欧美熟妇另类久久久 | 久久久成人av|