css樣式的書寫順序及原理——很重要闻妓!

記得剛開始學(xué)習(xí)前端的時候睦优,每次寫css樣式都是用到什么就在樣式表后添加什么渗常,完全沒有考慮到樣式屬性的書寫順序?qū)W(wǎng)頁加載代碼的影響。后來逐漸才知道正確的樣式順序不僅易于查看汗盘,并且也屬于css樣式優(yōu)化的一種方式皱碘。那么是怎么個順序呢?

(1)定位屬性:position display float left top right bottom overflow clear z-index

(2)自身屬性:width height padding border margin background

(3)文字樣式:font-family font-size font-style font-weight font-varient color

(4)文本屬性:text-align vertical-align text-wrap text-transform text-indent text-decoration letter-spacing word-spacing white-space text-overflow

(5)css3中新增屬性:content box-shadow border-radius transform……

按照上述1 2 3 4 5的順序進(jìn)行書寫隐孽。

目的:減少瀏覽器reflow(回流)癌椿,提升瀏覽器渲染dom的性能

原理:瀏覽器的渲染流程為——

①解析html構(gòu)建dom樹,解析css構(gòu)建css樹:將html解析成樹形的數(shù)據(jù)結(jié)構(gòu)菱阵,將css解析成樹形的數(shù)據(jù)結(jié)構(gòu)

②構(gòu)建render樹:DOM樹和CSS樹合并之后形成的render樹踢俄。

③布局render樹:有了render樹,瀏覽器已經(jīng)知道那些網(wǎng)頁中有哪些節(jié)點(diǎn)送粱,各個節(jié)點(diǎn)的css定義和以及它們的從屬關(guān)系褪贵,從而計算出每個節(jié)點(diǎn)在屏幕中的位置。

④繪制render樹:按照計算出來的規(guī)則,通過顯卡把內(nèi)容畫在屏幕上脆丁。

css樣式解析到顯示至瀏覽器屏幕上就發(fā)生在②③④步驟世舰,可見瀏覽器并不是一獲取到css樣式就立馬開始解析而是根據(jù)css樣式的書寫順序?qū)⒅凑誨om樹的結(jié)構(gòu)分布render樣式,完成第②步槽卫,然后開始遍歷每個樹結(jié)點(diǎn)的css樣式進(jìn)行解析跟压,此時的css樣式的遍歷順序完全是按照之前的書寫順序。在解析過程中歼培,一旦瀏覽器發(fā)現(xiàn)某個元素的定位變化影響布局震蒋,則需要倒回去重新渲染正如按照這樣的書寫書序:

width: 100px;

height: 100px;

background-color: red ;

position: absolute;

當(dāng)瀏覽器解析到position的時候突然發(fā)現(xiàn)該元素是絕對定位元素需要脫離文檔流,而之前卻是按照普通元素進(jìn)行解析的躲庄,所以不得不重新渲染查剖,解除該元素在文檔中所占位置,然而由于該元素的占位發(fā)生變化噪窘,其他元素也可能會受到它回流的影響而重新排位笋庄。最終導(dǎo)致③步驟花費(fèi)的時間太久而影響到④步驟的顯示,影響了用戶體驗倔监。

所以規(guī)范的的css書寫順序?qū)τ谖臋n渲染來說一定是事半功倍的直砂!

擴(kuò)展:還有一個會影響瀏覽器渲染性能的詞匯“repaint(重繪)”

repaint(重繪):改變某個元素的背景色、文字顏色浩习、邊框顏色等等不影響它周圍或內(nèi)部布局的屬性時静暂,屏幕的一部分要重畫,但是元素的幾何尺寸沒有變谱秽。

注意:

a.render樹的結(jié)構(gòu)不等同于DOM樹的結(jié)構(gòu)洽蛀,一些設(shè)置display:none的節(jié)點(diǎn)不會被放在render樹中,但會在dom樹中弯院。

b.有些情況辱士,比如修改了元素的樣式,瀏覽器并不會理科reflow或repaint听绳,而是把這些操作積攢一批颂碘,然后做一次reflow,這也叫做異步reflow.但在有些情況下椅挣,比如改變窗口头岔,改變頁面默認(rèn)的字體等,對于這些情況鼠证,瀏覽器會馬上進(jìn)行reflow.

c.為了更好的用戶體驗峡竣,渲染引擎將會盡可能早的將內(nèi)容呈現(xiàn)到屏幕上,并不會等到所有的html都解析完成之后再去構(gòu)建和布局render樹量九。它是解析完一部分內(nèi)容就顯示一部分內(nèi)容适掰,同時颂碧,可能還在通過網(wǎng)絡(luò)下載其余內(nèi)容。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末类浪,一起剝皮案震驚了整個濱河市载城,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌费就,老刑警劉巖诉瓦,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異力细,居然都是意外死亡睬澡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門眠蚂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煞聪,“玉大人,你說我怎么就攤上這事逝慧∶兹疲” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵馋艺,是天一觀的道長。 經(jīng)常有香客問我迈套,道長捐祠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任桑李,我火速辦了婚禮踱蛀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贵白。我一直安慰自己率拒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布禁荒。 她就那樣靜靜地躺著猬膨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呛伴。 梳的紋絲不亂的頭發(fā)上勃痴,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機(jī)與錄音热康,去河邊找鬼沛申。 笑死,一個胖子當(dāng)著我的面吹牛姐军,可吹牛的內(nèi)容都是我干的铁材。 我是一名探鬼主播尖淘,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼著觉!你這毒婦竟也來了村生?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤固惯,失蹤者是張志新(化名)和其女友劉穎梆造,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體葬毫,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镇辉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贴捡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忽肛。...
    茶點(diǎn)故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖烂斋,靈堂內(nèi)的尸體忽然破棺而出屹逛,到底是詐尸還是另有隱情,我是刑警寧澤汛骂,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布罕模,位于F島的核電站,受9級特大地震影響帘瞭,放射性物質(zhì)發(fā)生泄漏淑掌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一蝶念、第九天 我趴在偏房一處隱蔽的房頂上張望抛腕。 院中可真熱鬧,春花似錦媒殉、人聲如沸担敌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽全封。三九已至,卻和暖如春桃犬,著一層夾襖步出監(jiān)牢的瞬間售貌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工疫萤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颂跨,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓扯饶,卻偏偏與公主長得像恒削,于是被迫代替她去往敵國和親池颈。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評論 2 355