1. 程式人生 > >css樣式的書寫順序及原理——非常重要!

css樣式的書寫順序及原理——非常重要!

記得剛開始學習前端的時候,每次寫css樣式都是用到什麼就在樣式表後新增什麼,完全沒有考慮到樣式屬性的書寫順序對網頁載入程式碼的影響。後來逐漸才知道正確的樣式順序不僅易於檢視,並且也屬於css樣式優化的一種方式。那麼是怎麼個順序呢?


(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的順序進行書寫。

目的:減少瀏覽器reflow(迴流),提升瀏覽器渲染dom的效能

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

①解析html構建dom樹,解析css構建css樹:將html解析成樹形的資料結構,將css解析成樹形的資料結構

②構建render樹:DOM樹和CSS樹合併之後形成的render樹。

③佈局render樹:有了render樹,瀏覽器已經知道那些網頁中有哪些節點,各個節點的css定義和以及它們的從屬關係,從而計算出每個節點在螢幕中的位置。

④繪製render樹:按照計算出來的規則,通過顯示卡把內容畫在螢幕上。

css樣式解析到顯示至瀏覽器螢幕上就發生在②③④步驟,可見瀏覽器並不是一獲取到css樣式就立馬開始解析而是根據css樣式的書寫順序將之按照dom樹的結構分佈render樣式,完成第②步,然後開始遍歷每個樹結點的css樣式進行解析,此時的css樣式的遍歷順序完全是按照之前的書寫順序。在解析過程中,一旦瀏覽器發現某個元素的定位變化影響佈局,則需要倒回去重新渲染正如按照這樣的書寫書序:

width: 100px;

height: 100px;

background-color: red ;

position: absolute;

當瀏覽器解析到position的時候突然發現該元素是絕對定位元素需要脫離文件流,而之前卻是按照普通元素進行解析的,所以不得不重新渲染,解除該元素在文件中所佔位置,然而由於該元素的佔位發生變化,其他元素也可能會受到它迴流的影響而重新排位。最終導致③步驟花費的時間太久而影響到④步驟的顯示,影響了使用者體驗。

所以規範的的css書寫順序對於文件渲染來說一定是事半功倍的!

擴充套件:還有一個會影響瀏覽器渲染效能的詞彙“repaint(重繪)”

repaint(重繪):改變某個元素的背景色、文字顏色、邊框顏色等等不影響它周圍或內部佈局的屬性時,螢幕的一部分要重畫,但是元素的幾何尺寸沒有變。

注意:

a.render樹的結構不等同於DOM樹的結構,一些設定display:none的節點不會被放在render樹中,但會在dom樹中。

b.有些情況,比如修改了元素的樣式,瀏覽器並不會理科reflow或repaint,而是把這些操作積攢一批,然後做一次reflow,這也叫做非同步reflow.但在有些情況下,比如改變視窗,改變頁面預設的字型等,對於這些情況,瀏覽器會馬上進行reflow.

c.為了更好的使用者體驗,渲染引擎將會盡可能早的將內容呈現到螢幕上,並不會等到所有的html都解析完成之後再去構建和佈局render樹。它是解析完一部分內容就顯示一部分內容,同時,可能還在通過網路下載其餘內容。

此文部分是參考csdn

文章內容進行編寫的。