CSS重新梳理-CSS動畫

瀏覽器的渲染原理

渲染步驟

-根據HTML構建HTML樹(DOM)
-根據CSS構建CSS樹(CSSOM)
-將兩棵樹合并成一顆渲染樹(render tree)
-Layout布局(文檔流嗡官、盒模型闲延、計算大小和位置)
-Paint繪制(把邊框顏色、文字顏色志膀、陰影等畫出來)
-Compose合成(根據層疊關系展示畫面)

三棵樹長啥樣佑吝?

image.png

image.png

image.png

如何更新樣式

一般來說用JS更新樣式

例如:
-div.style.background = 'red'
-div.style.dispay = 'none'
-div.classList.add('red')
-div.remove()直接刪掉節(jié)點

三種更新樣式的方式

1.全走
div.remove() 會觸發(fā)當前消失坐昙,其它元素relayout


image.png

2.跳過layout
直接repaint+composite


image.png

3.跳過layout和paint
改變transform,只需composite
注意必須全屏查看效果芋忿,在iframe里看會出現(xiàn)問題


image.png

我們并不知道那個屬性觸發(fā)了什么流程炸客,但是有人一個個試過并且將這些屬性分享了

https://csstriggers.com/

tramsform 更好的做動畫方式

原理

示例

transform: translateX(0 =>300px);

transition過度屬性可以自動腦部中間幀

性能

由于過程中并沒有repaint,所以transform性能比改left性能好戈钢。

transform常用功能

-位移 translate
-縮放 scale
-旋轉 rotate
-傾斜 skew
注意:這些功能一般都需要配合transition過度痹仙,inline元素不支持transform,需要先變成block

translate常用寫法示例

translateX(<length-percentage>);
translateY(<length-percentage>);
translate(<length-percentage>,<length-percentage>);
translate3d(x,y,z);

更多用法參考MDN

scale常用寫法示例

scaleX(<number>);
scaleY(<number>);
scale(<number>,<number>);

scale使用較少殉了,因為容易出現(xiàn)模糊的情況

rotate常用寫法示例

rotate(<angle>|<zero>]);
rotateX(<angle>|<zero>]);
rotateY(<angle>|<zero>]);
rotateZ(<angle>|<zero>]);

另外开仰,還有rotate3d,由于很復雜這里不做說明薪铜,需要的時候再去查閱MDN文檔众弓。
rotate常用于制作loading的動畫

skew常用寫法示例

這個是真的很少很少用,有需要的時候再查閱吧隔箍!

**transform可以組合使用

過渡 transition

作用

補充中間幀

語法

transition: 屬性名|時長|過度方式|延遲
transition: left 200ms linear;
可以用逗號分隔不同屬性谓娃;
transition: left 200ms, top 400ms;
可以用all代表所有屬性;
transition: all 200ms蜒滩;

常用的過度方式是 linear滨达,具體的過度方式可以查閱MDN
并不是所有的屬性都能用過渡
display:none => block無法使用過渡,一般會改成visibility:hidden=> visible
display 和 visibility的區(qū)別是:display:none是徹底消失帮掉,不在文檔流中占位弦悉,瀏覽器也不會解析該元素;visibility:hidden是視覺上消失了蟆炊,可以理解為透明度為0的效果稽莉,在文檔流中占位,瀏覽器會解析該元素涩搓。

過度必須要有起始

一般只有一次動畫污秆,或者兩次
比如hover和非hover狀態(tài)的過渡

制作動畫的方法

使用兩次transform

.a===transform===>.b
.b===transform===>.c
**使用setTimeout或者監(jiān)聽transitionend事件來指導是否已經進行到中間點劈猪。

使用animation

#demo.start{
animation: xxx 1.5s;
}
@keyframes xxx{
0%{
transform:none;
}
50%{
transform: translateX(200px);
}
100%{
transform: translateX(200px),
translateY(200px);
}}

keyframes的完整語法

form to
@keyframes xxx{
from{
transform: translateX(200px);
}
to{
transform: translateX(200px),
translateY(200px);
}}
百分數(shù)寫法
@keyframes xxx{
0%{
transform:none;
}
50%{
transform: translateX(200px);
}
100%{
transform: translateX(200px),
translateY(200px);
}}

animation的縮寫語法

縮寫語法

animation: 時長|過渡方式|延遲|次數(shù)|方向|填充方式|是否暫停|動畫名;

時長: 1s或者1000ms
過渡方式:跟transition取值一樣,例如linear
次數(shù):可以是整數(shù)也可以是小數(shù)或者infinite
方向:reverse|alternate|alternate-reverse
填充模式:none|forwards|backwards|both
是否暫停:paused|running
以上的所有屬性都有對應的單獨屬性

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末良拼,一起剝皮案震驚了整個濱河市战得,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庸推,老刑警劉巖常侦,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異贬媒,居然都是意外死亡聋亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門际乘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坡倔,“玉大人,你說我怎么就攤上這事脖含∽锼” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵养葵,是天一觀的道長征堪。 經常有香客問我,道長港柜,這世上最難降的妖魔是什么请契? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任咳榜,我火速辦了婚禮夏醉,結果婚禮上,老公的妹妹穿的比我還像新娘涌韩。我一直安慰自己畔柔,他們只是感情好,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布臣樱。 她就那樣靜靜地躺著靶擦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪雇毫。 梳的紋絲不亂的頭發(fā)上玄捕,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天,我揣著相機與錄音棚放,去河邊找鬼枚粘。 笑死,一個胖子當著我的面吹牛飘蚯,可吹牛的內容都是我干的馍迄。 我是一名探鬼主播福也,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼攀圈!你這毒婦竟也來了暴凑?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赘来,失蹤者是張志新(化名)和其女友劉穎现喳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體犬辰,經...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡拿穴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了忧风。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片默色。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狮腿,靈堂內的尸體忽然破棺而出腿宰,到底是詐尸還是另有隱情,我是刑警寧澤缘厢,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布吃度,位于F島的核電站,受9級特大地震影響贴硫,放射性物質發(fā)生泄漏椿每。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一英遭、第九天 我趴在偏房一處隱蔽的房頂上張望间护。 院中可真熱鬧,春花似錦挖诸、人聲如沸汁尺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痴突。三九已至,卻和暖如春狼荞,著一層夾襖步出監(jiān)牢的瞬間辽装,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工相味, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拾积,地道東北人。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像殷勘,于是被迫代替她去往敵國和親此再。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容

  • Get Started ? 動畫的原理? 瀏覽器渲染原理? CSS動畫優(yōu)化? transform全解? trans...
    茜Akane閱讀 372評論 0 1
  • css性能介紹 瀏覽器渲染步驟 根據HTML構建HTML樹(DOM)玲销,DOM输拇,也就是文檔對象模型(Document...
    鄭饞師閱讀 84評論 0 0
  • 引用CSS方式 內部引用 html文件中寫一個 標簽,并將樣式寫入到里面贤斜,舉例: 外部引用 通過 標簽實現(xiàn)策吠,里面有...
    dawsonenjoy閱讀 450評論 0 0
  • 看了很多視頻、文章瘩绒,最后卻通通忘記了猴抹,別人的知識依舊是別人的,自己卻什么都沒獲得锁荔。此系列文章旨在加深自己的印象蟀给,因...
    DCbryant閱讀 1,864評論 0 4
  • 動畫:24幀游戲:30幀現(xiàn)在大部分顯示器的最低刷新頻率為60Hz,即每秒60幀阳堕。 setInterval()制作動...
    Emist閱讀 218評論 0 0