国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

妙啊!超酷炫的氣泡效果

開發 前端
同一個動畫,我們利用一定范圍內隨機的 animation-duration 和一定范圍內隨機的 animation-delay,可以有效的構建更為隨機的動畫效果,讓動畫更加的自然。

最近,在 CodePen 上看到這樣一個非常有意思的效果:

圖片

這個效果的核心難點在于氣泡的一種特殊融合效果。

其源代碼在:CodePen Demo -- Goey footer[1],作者主要使用的是 SVG 濾鏡完成的該效果,感興趣的可以戳源碼看看。

其中,要想靈活運用 SVG 中的 feGaussianBlur 濾鏡還是需要有非常強大的 SVG 知識儲備的。那么,僅僅使用 CSS 能否實現該效果呢?

嘿嘿,強大的 CSS 當然是可以的。本文,就將帶領大家一步步使用純 CSS,完成上述效果。

借助 SASS 完成大致效果

首先,如果上述效果沒有氣泡的融合效果,可能就僅僅是這樣:

圖片

要制作這樣一個效果還是比較簡單的,只是代碼會比較多,我們借助 SASS 預處理器即可。

假設我們有如下 HTML 結構:

<div class="g-wrap">
<div class="g-footer">
<div class="g-bubble"></div>
<div class="g-bubble"></div>
// ... 200g-bubble
</div>
</div>

核心要做的,僅僅是讓 200 個 .g-bubble 從底部無規律的進行向上升起的動畫。

這里,就需要運用我們在 深入淺出 CSS 動畫[2] 這篇文章中所介紹的一種技巧 -- 利用 animation-duration 和 animation-delay 構建隨機效果。

利用 animation-duration 和 animation-delay 構建隨機效果

同一個動畫,我們利用一定范圍內隨機的 animation-duration 和一定范圍內隨機的 animation-delay,可以有效的構建更為隨機的動畫效果,讓動畫更加的自然。

我們來模擬一下,如果是使用 10 個 animation-duration 和 animation-delay 都一致的圓的話,核心偽代碼:

<ul>
<li></li>
<!--10 個...-->
<li></li>
</ul>
ul {
display: flex;
flex-wrap: nowrap;
gap: 5px;
}
li {
background: #000;
animation: move 3s infinite 1s linear;
}
@keyframes move {
0% {
transform: translate(0, 0);
}
100% {
transform: translate(0, -100px);
}
}

這樣,小球的運動會是這樣的整齊劃一:

圖片圖片

要讓小球的運動顯得非常的隨機,只需要讓 animation-duration 和 animation-delay 都在一定范圍內浮動即可,改造下 CSS:

@for $i from 1 to 11 {
li:nth-child(#{$i}) {
animation-duration: #{random(2000)/1000 + 2}s;
animation-delay: #{random(1000)/1000 + 1}s;
}
}

我們利用 SASS 的循環和 random() 函數,讓 animation-duration 在 2-4 秒范圍內隨機,讓 animation-delay 在 1-2 秒范圍內隨機,這樣,我們就可以得到非常自然且不同的上升動畫效果,基本不會出現重復的畫面,很好的模擬了隨機效果:

圖片

CodePen Demo -- 利用范圍隨機 animation-duration 和 animation-delay 實現隨機動畫效果[3]。

好,我們把上述介紹的技巧,套用到我們本文要實現的效果中去,HTML 結構再看一眼:

<div class="g-wrap">
<div class="g-footer">
<div class="g-bubble"></div>
<div class="g-bubble"></div>
// ... 200g-bubble
</div>
</div>

核心的 CSS 代碼:

.g-footer {
position: absolute;
bottom: 0;
left: 0;
height: 86px;
width: 100%;
background: #26b4f5;
}
@for $i from 0 through 200 {
.g-bubble:nth-child(#{$i}) {
position: absolute;
background: #26b4f5;
$width: random(100) + px;
left: #{(random(100)) + '%'};
top: #{(random(100))}px;
width: $width;
height: $width;
animation: moveToTop #{(random(2500) + 1500) / 1000}s ease-in-out -#{random(5000)/1000}s infinite;
}
}
@keyframes moveToTop {
90% {
opacity: 1;
}
100% {
opacity: .08;
transform: translate(-50%, -180px) scale(.3);
}
}

這里:

  1. 我們利用了 SASS 隨機函數$width: random(100) + px;,隨機生成不同大小的 div 圓形。
  2. 利用 SASS 隨機函數left: #{(random(100)) + '%'},top: #{(random(100))}px 基于父元素隨機定位。
  3. 最為核心的是animation: moveToTop #{(random(2500) + 1500) / 1000}s ease-in-out -#{random(5000)/1000}s infinite,讓所有 div 圓的運動都是隨機的。

上述(1)、(2)綜合結果,會生成這樣一種布局,均勻分散排布的圓形:

圖片圖片

注:這里為了方便理解,我隱藏了最外層 g-footer 的顏色,并且給 g-bubble 添加了黑色邊框。

接著,如果我們替換一下 animation 語句,使用統一的動畫時長,去掉負的延遲,變成 animation: moveToTop 4s ease-in-out infinite,動畫就會是這樣:

圖片圖片

整體是整齊劃一,沒有雜亂無章的感覺的。

運用上隨機效果,animation: moveToTop #{(random(2500) + 1500) / 1000}s ease-in-out -#{random(5000)/1000}s infinite,就能得到上述的,不同氣泡隨機上升的感覺:

圖片圖片

添加融合效果

接下來,也是最重要的一步,如何讓氣泡與氣泡之間,以及氣泡和底部 .g-footer 之間產生融合效果呢?

這個技巧在此前非常多篇文章中,也頻繁提及過,就是利用 filter: contrast() 濾鏡與 filter: blur() 濾鏡。

如果你還不了解這個技巧,可以戳我的這篇文章看看:你所不知道的 CSS 濾鏡技巧與細節[4]。?

簡述下該技巧:

單獨將兩個濾鏡拿出來,它們的作用分別是:

  1. filter: blur():給圖像設置高斯模糊效果。
  2. filter: contrast():調整圖像的對比度。

但是,當他們“合體”的時候,產生了奇妙的融合現象。

圖片圖片

仔細看兩圓相交的過程,在邊與邊接觸的時候,會產生一種邊界融合的效果,通過對比度濾鏡把高斯模糊的模糊邊緣給干掉,利用高斯模糊實現融合效果。

基于此,我們再簡單改造下我們的 CSS 代碼,所需要加的代碼量非常少:

.g-wrap {
background: #fff;
filter: contrast(8);
}
.g-footer {
// ... 其他保持一致
filter: blur(5px);
}

就這么簡單,父容器添加白色底色以及對比度濾鏡 filter: contrast(8),子容器添加 filter: blur(5px) 即可,這樣,我們就能得氣泡的融合效果,基本得到我們想要的效果:

圖片

利用 backdrop-filter 替代 filter 消除邊緣

但是!利用 filter: blur() 會有一個小問題。

運用了 filter: blur() 的元素,元素邊緣的模糊度不夠,會導致效果在邊緣失真,我們仔細看看動畫的邊緣:

圖片

如何解決呢?也好辦,在這里,我們嘗試利用 backdrop-filter 去替換 filter。

兩者之間的差異在于,filter 是作用于元素本身,而 backdrop-filter 是作用于元素背后的區域所覆蓋的所有元素,如果你想了解更多關于 backdrop-filter 的信息,可以戳我的這篇文章:深入探討 filter 與 backdrop-filter 的異同[5]。

簡單改造下代碼,原代碼:

.g-footer {
// ...
filter: blur(5px);
}

改造后的代碼:

.g-footer {
// ... 去掉 filter: blur(5px)
&:before {
content: "";
position: absolute;
top: -300px;
left: 0;
right: 0;
bottom: 0;
z-index: 1;
backdrop-filter: blur(5px);
}
}

我們通過去到原來添加在 .g-footer 上的 filter: blur(5px),通過他的偽元素,疊加一層新的元素在它本身之上,并且添加了替代的 backdrop-filter: blur(5px)。

當然,因為這里的 blur(5px) 還需要為氣泡與氣泡之間的融合服務,所以為了覆蓋動畫全區域,我們還設置了 top: -300px,擴大了它的作用范圍。

最終,我們就能完美的復刻文章一開頭,使用 SVG 濾鏡實現的效果:

圖片

在文章中,我省去了大部分基礎的 CSS 代碼,完整的代碼,你可以戳這里:CodePen Demo -- Bubble Rises[6]。

最后

本文與之前的 巧用 CSS 實現酷炫的充電動畫[7] 內使用的技巧非常類似,但本文也有一些新的知識點,大家可以結合著一起看看。

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

參考資料

[1]CodePen Demo -- Goey footer: https://codepen.io/z-/pen/zYxdRQy。

[2]深入淺出 CSS 動畫: https://github.com/chokcoco/iCSS/issues/141。

[3]CodePen Demo -- 利用范圍隨機 animation-duration 和 animation-delay 實現隨機動畫效果: https://codepen.io/Chokcoco/pen/JjyRYyR。

[4]你所不知道的 CSS 濾鏡技巧與細節: https://github.com/chokcoco/iCSS/issues/30。

[5]深入探討 filter 與 backdrop-filter 的異同: https://github.com/chokcoco/iCSS/issues/147。

[6]CodePen Demo -- Bubble Rises: https://codepen.io/Chokcoco/pen/QWQRjrX。

[7]巧用 CSS 實現酷炫的充電動畫: https://github.com/chokcoco/iCSS/issues/75。

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

2022-07-08 09:55:54

CSS轉場動畫

2011-05-04 09:05:39

Flash

2022-05-17 07:26:33

動畫CSS前端

2011-05-10 15:05:04

Webhover

2024-06-20 13:11:26

設計模式開發

2022-02-17 13:46:15

SSH命令內網

2025-09-28 02:00:00

2022-05-16 08:57:36

Python可視化代碼

2021-02-02 21:42:30

VS Code編輯器開發

2009-04-03 08:33:59

Symbian諾基亞Photo Brows

2010-08-13 13:39:51

Flex效果組件

2011-03-02 13:15:26

HTML 5jQuery

2010-08-13 13:46:04

Flex效果組件

2018-09-20 14:40:48

NVIDIARTX 2080游戲卡

2011-06-21 13:31:13

JavaScript

2011-09-02 13:57:11

jQuery

2023-10-08 20:32:59

CSS定義Loading

2021-04-09 23:11:25

Python程序開源

2017-03-13 13:32:39

LinuxVim技巧

2012-01-10 14:59:42

jQuery
點贊
收藏

51CTO技術棧公眾號

午夜精品久久久内射近拍高清 | 亚洲自拍偷拍在线| 欧美日本高清| 亚洲国产日韩美| av网站大全在线| 国产精品扒开腿做爽爽爽视频软件| 国产综合精品一区二区三区| 久久99久久亚洲国产| 中文字幕影音在线| 香蕉成人伊视频在线观看| 一个色妞综合视频在线观看| 日本欧美国产在线| 一本大道熟女人妻中文字幕在线| 在线电影欧美日韩一区二区私密| 日本免费黄色小视频| 国产精品二区影院| 欧美极品少妇xxxxⅹ高跟鞋| 不卡av影片| 亚洲人成77777| 日韩欧美精品在线视频| 国产老肥熟一区二区三区| 91精品产国品一二三产区| 国产精品少妇在线视频| 91丝袜美腿美女视频网站| 欧美一区二区精品在线| 丁香激情综合五月| 亚洲免费专区| av福利导福航大全在线| 两根大肉大捧一进一出好爽视频| 国内成人精品视频| 欧美伊人精品成人久久综合97| 久久成人av少妇免费| 神马电影网我不卡| 亚洲一二三区在线| 欧美美女在线| 国产av熟女一区二区三区| 欧美视频二区36p| 久久影院电视剧免费观看| 欧美国产一级| 欧美美女日韩| 午夜在线免费视频| 日本成人三级| 国产成人一区三区| 日韩精品视频观看| 一本高清dvd不卡在线观看 | 成人区精品一区二区婷婷| 亚洲欧美视频一区| 国产精品一二三四五| 一区三区在线欧| 一根才成人网| a视频在线免费看| 成年人黄色电影| 欧美日韩高清免费| 精品日本一区二区| 久久99精品久久久久子伦| 国产伦视频一区二区三区| 中文字幕一区二区三区精华液| 六月丁香婷婷久久| 欧美日韩中文字幕一区二区三区| av高清不卡| 国产女女做受ⅹxx高潮| 久久久国产精品一区二区三区| 午夜伦理精品一区| www.日韩av.com| 欧美日韩国产成人在线| 自拍视频国产精品| 国产美女精品视频| 久久久97精品| 亚洲加勒比久久88色综合| 国产精品久久久久不卡| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美成人精品激情在线观看| 欧美激情在线观看视频| 国产精品一 二 三| 国产aaa一级片| av免费网站观看| 91网页在线观看| 亚洲男男av| 国产欧美欧美| 91美女精品福利| 欧美性xxxxx极品| 欧美成人一区二区三区电影| 亚洲第一av色| 欧美一级理论片| 国产精品91在线观看| 色欲色香天天天综合网www| 国产小视频在线| 综合伊思人在钱三区| 丰满放荡岳乱妇91ww| 婷婷综合在线观看| 久久久久九九九九| 国产 欧美 日韩 一区| 中文字幕在线观看播放| 亚洲一区二区日韩| 亚洲激情综合网| 久久综合免费视频影院| 中文字幕中文字幕在线中心一区| 亚洲天堂二区| 日韩精品网站| 夜夜嗨av一区二区三区中文字幕| 中文字幕9999| 亚洲精品成人a8198a| 日韩黄色影片| 国产精品嫩模av在线| 亚洲激情综合网| 国产精品都在这里| 精产国产伦理一二三区| 国产精品中文字幕制服诱惑| 国产嫩草影院久久久久| 91麻豆精品国产自产在线观看一区| 人人澡人人澡人人看欧美| 中文字幕av不卡在线| 日本在线视频网| 天天超碰亚洲| ㊣最新国产の精品bt伙计久久| 日韩大片在线观看视频| 91黄在线观看| 91淫黄看大片| 麻豆成人入口| 韩日精品视频一区| 亚洲国产97在线精品一区| 日韩欧美在线观看强乱免费| cao在线视频| 久久婷婷激情| 欧美视频在线一区二区三区 | 日韩中文字幕| 亚洲少妇中文在线| 亚洲欧美精品一区二区| 中文亚洲视频在线| 日本福利小视频| 亚洲日本国产| 亚洲女在线观看| 日日噜噜夜夜狠狠视频| 国产欧美在线视频| 大美女一区二区三区| 蜜臀av一区二区在线观看| 中文字幕精品综合| 欧美视频一区二区三区在线观看| 九九视频直播综合网| 在线观看成人黄色| 欧美国产日本视频| 亚洲福利一二三区| 精品美女一区| 99国产精品一区二区| 久久久久久97三级| 欧美成人在线影院| 日本一区午夜艳熟免费| 亚洲不卡1区| 欧美1—12sexvideos| 精品国产丝袜高跟鞋 | 欧美在线|欧美| 97精品国产91久久久久久| 国产精品久久久久一区二区| 999精品视频在线观看| 尤物tv国产一区| 女同一区二区免费aⅴ| 狠狠色香婷婷久久亚洲精品| 久久久久久久久电影| 亚洲xxx视频| 可播放的18gay1069| silk一区二区三区精品视频 | 欧美午夜免费电影| 国产69精品久久久久久| 欧美四级电影在线观看| 色噜噜狠狠成人网p站| 麻豆一区二区在线观看| 免费看黄色a级片| 先锋影音一区二区| 国产日韩精品一区二区浪潮av| 久久国产精品久久久| 手机看片福利盒子久久| 精品一区二区男人吃奶| 欧美高清视频www夜色资源网| 91精品国产91久久综合桃花| 国内一区在线| 国产情侣一区在线| 国产精品国产三级国产a| 5566日本婷婷色中文字幕97| 成人短视频在线| 99精品欧美一区二区蜜桃免费| 国产欧美日韩综合精品二区| 欧美大电影免费观看| 欧美视频一二三| 久久久久久尹人网香蕉| 美女网站在线观看| 亚洲欧美视频一区| 国产精品久久久久久亚洲调教| 国产直播在线| 亚洲国产第一页| 屁屁影院在线观看| 一本一本大道香蕉久在线精品 | 亚洲国产成人高清精品| 亚洲精品美女久久7777777| 激情不卡一区二区三区视频在线 | 国产大片一区二区| 国产成人精品视频在线| 992tv在线观看免费进| 亚洲理论在线观看| 欧美日本亚洲| 久久亚洲黄色|