使用CSS transition和animation改變漸變狀態(tài)的實(shí)現(xiàn)方法
到目前為止,CSS的漸變屬性 linear-gradient 和 radial-gradient 已經(jīng)是很成熟的CSS特性了,而且 repeating-linear-gradient 和 conic-gradient 也越來(lái)越成熟。CSS漸變特性對(duì)于我們的幫助已經(jīng)非常強(qiáng)大了,它們可以幫助我們繪圖、 創(chuàng)建圖片占位符 、制作環(huán)形進(jìn)度條等等。另外還可以通過(guò) transition 和 animation 讓漸變動(dòng)起來(lái)。
但是給漸變添加動(dòng)畫(huà)效果目前還有很多極限性,如果不添加額外的元素或其他的漸變屬性,有些效果是無(wú)法實(shí)現(xiàn)的,比如下面這個(gè)效果。

不過(guò),在Edge瀏覽器,使用 @keyframes 就可以實(shí)現(xiàn)上圖的效果,而且代碼很簡(jiǎn)單:
html {
background: linear-gradient(90deg, #f90 0%, #444 0) 50%/ 5em;
animation: blinds 1s ease-in-out infinite alternate;
}
@keyframes blinds {
to {
background-image: linear-gradient(90deg, #f90 100%, #444 0);
}
}
在些基礎(chǔ)上,借助CSS的處理器,比如Sass,可以讓上面的代碼變得更為靈活:
@function blinds($open: 0) {
@return linear-gradient(90deg, #f90 $open*100%, #444 0);
}
html {
background: blinds() 50%/ 5em;
animation: blinds 1s ease-in-out infinite alternate;
}
@keyframes blinds {
to {
background-image: blinds(1)
}
}
雖然上面的代碼實(shí)現(xiàn)了所需的效果,但使用CSS來(lái)維護(hù)和使用仍然還是需要編寫(xiě)代碼,這是事實(shí)。動(dòng)畫(huà)效果也只是停留在 0% 到 100% 之間,能達(dá)到我們所要的效果。不過(guò),要是使用 0 或 0px 來(lái)替代 0% 的話,結(jié)果就會(huì)令人失望,動(dòng)畫(huà)效果失蹤了。更不用說(shuō)在Chrome和Firefox瀏覽器上了,能看到的僅僅就是 #f90 到 #444 兩個(gè)顏色之間的切換,根本沒(méi)有停止位置的動(dòng)效。
慶幸折是,現(xiàn)在我們有一個(gè)更好的選擇: CSS自定義屬性 !
雖然我們可以獲得過(guò) transition 效果(但不是 animation 效果),但是如果我們使用的屬性是可動(dòng)畫(huà)化的,那么CSS自定義屬性是不可動(dòng)畫(huà)化。比如,當(dāng)在 transfrom 中使用時(shí),我們可以在 transition 中使用 transfrom 屬性。
讓我們來(lái)做一個(gè)效果,復(fù)選框選中時(shí),橙色正方形( .box )將會(huì)移動(dòng)并且會(huì)被壓扁的效果。我們?cè)?.box 中定義了一個(gè)自定義屬性 --f ,并且初始值設(shè)置為 1 :
.box {
--f: 1;
transform: translate(calc((1 - var(--f)) * 100vw)) scalex(var(--f));
}
當(dāng)復(fù)選框被選中時(shí) :checked , .box 的自定義屬性 --f 的值變成 .5 :
:checked ~ .box {
--f: .5
}
在 .box 中添加 transition 屬性,我們可以讓 .box 從一個(gè)狀態(tài)到另一個(gè)狀態(tài)時(shí),整個(gè)過(guò)程是一種細(xì)膩的滑動(dòng)效果。
.box {
--f: 1;
transform: translate(calc((1 - var(--f)) * 100vw)) scalex(var(--f));
transition: transform .3s ease-in;
}
總結(jié)
以上所述是小編給大家介紹的使用CSS transition和animation改變漸變狀態(tài)的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
使用CSS transition和animation改變漸變狀態(tài)的實(shí)現(xiàn)方法
CSS漸變特性對(duì)于我們的幫助已經(jīng)非常強(qiáng)大了,它們可以幫助我們繪圖、 創(chuàng)建圖片占位符 、制作環(huán)形進(jìn)度條等等。接下來(lái)通過(guò)本文給大家介紹使用CSS transition和animation改變漸2018-10-29CSS3與動(dòng)畫(huà)有關(guān)的屬性transition、animation、transform對(duì)比(史上最全
這篇文章主要介紹了CSS3與動(dòng)畫(huà)有關(guān)的屬性transition、animation、transform對(duì)比,通過(guò)瀏覽器兼容性,用法和對(duì)比更深刻的展示了彼此之間的異同,具體操作步驟大家可查看下文2017-08-18CSS3中動(dòng)畫(huà)屬性transform、transition和animation屬性的區(qū)別
最近在項(xiàng)目中用到了CSS3中的動(dòng)畫(huà)屬性。無(wú)奈對(duì)于css3幾個(gè)新加的屬性不太熟悉,常常容易搞混。所以從網(wǎng)站研究了點(diǎn)資料,總結(jié)一下,方便有需要的朋友們可以參考學(xué)習(xí)。2016-09-25CSS3中的Transition過(guò)度與Animation動(dòng)畫(huà)屬性使用要點(diǎn)
這篇文章主要介紹了CSS3中的Transition過(guò)度與Animation動(dòng)畫(huà)屬性使用要點(diǎn)Transition和Animation能被用來(lái)制作基本的頁(yè)面圖片動(dòng)態(tài)效果,當(dāng)然進(jìn)一步的控制還是需要JavaScript的2016-05-20深入探究CSS中Animations和Transitions的工作原理
這篇文章主要介紹了深入探究CSS中Animations和Transitions的工作原理,包括和GPU的硬件使用及相關(guān)屬性等內(nèi)容,需要的朋友可以參考下2015-06-28CSS3的transition和animation的用法實(shí)例介紹
transition用于設(shè)定一個(gè)元素的兩個(gè)狀態(tài),不同的狀態(tài)可以用偽類,下面與大家分享下CSS3的transition和animation的用法,需要的朋友可以參考下2014-08-20

