最近我遇到一個(gè)奇怪的問(wèn)題:我的 CSS 代碼一直在抖動(dòng)。不管我怎么調(diào)整代碼,瀏覽器都會(huì)在加載時(shí)不停地抖動(dòng)元素。最初我以為是 JavaScript 或者 jQuery 的問(wèn)題,但后來(lái)發(fā)現(xiàn)是 CSS 元素抖動(dòng)。
.example { animation: example 1s infinite alternate; } @keyframes example { from { transform: translate(0,0); } to { transform: translate(5px,5px); } }
我研究了一下原因,發(fā)現(xiàn)是 CSS 中動(dòng)畫(huà)屬性的問(wèn)題。在我的樣式表中,我使用了animation
屬性來(lái)實(shí)現(xiàn)元素移動(dòng)。該屬性允許您在元素上設(shè)置一個(gè)動(dòng)畫(huà)效果,并對(duì)指定屬性進(jìn)行動(dòng)畫(huà)處理。
這個(gè)樣式看起來(lái)技巧十足。但是它的問(wèn)題是,該屬性定義了兩個(gè)關(guān)鍵屬性:持續(xù)時(shí)間和迭代次數(shù)。如果您沒(méi)有正確設(shè)置這些屬性,就會(huì)出現(xiàn)抖動(dòng)問(wèn)題。在我的示例中,我將持續(xù)時(shí)間設(shè)置為 1 秒,并將迭代次數(shù)設(shè)置為無(wú)限。這導(dǎo)致了元素在加載時(shí)一直抖動(dòng)。
為了解決這個(gè)問(wèn)題,我需要重新設(shè)計(jì)我的動(dòng)畫(huà)屬性。為了避免元素初始時(shí)的抖動(dòng),我可以將迭代次數(shù)設(shè)置為 1。另外,我可以使用animation-fill-mode
屬性來(lái)設(shè)置元素將在動(dòng)畫(huà)結(jié)束時(shí)停留在要么第一幀,要么最后一幀。這樣可以避免過(guò)渡到動(dòng)畫(huà)初始狀態(tài)。
.example { animation: example 1s 1 forwards; animation-fill-mode: forwards; }
在修改這個(gè)樣式后,我的元素不再抖動(dòng)了。如果您遇到這個(gè)問(wèn)題,請(qǐng)檢查您的 CSS 動(dòng)畫(huà)屬性并確保迭代次數(shù)和填充模式設(shè)置正確。