【前端詞典】幾個有益的 CSS 小知識

小生方勤發表於2019-07-07

前言

今天偷個懶,不長篇大論,分享幾個你可能不知道的 CSS 小知識。

樣式的順序

CSS 程式碼:

.red {
    color: red;
}
.blue {
    color: blue;
}
複製程式碼

HTML 程式碼:

<div class="red blue">這是什麼顏色</div>
<div class="blue red">這是什麼顏色</div>
複製程式碼

記得之前這是一道比較火的 CSS 考題,當時好像是有不少的人答錯(30% 以上)

答案你們應該是知道的。

可以這樣提升 CSS 效能

後代選擇器

樣式選擇器中間的空格是什麼?它的名字是 —— 後代選擇器

div p {
    color: #3388ff;
    font-size: 14px;
}
複製程式碼

後代選擇器或許會很耗效能

耗能與否取決於專案的體積,但不建議使用沒有意義的後代選擇器。例如:

.div p {
    // ...
}
複製程式碼

為什麼會更消耗效能呢?

因為瀏覽器首先會找到所有 p 標籤,然後再向上查詢包含 classdiv 標籤。這樣一來如果程式碼中有很多 p 標籤,無疑是會做很多重複工作的。

所以可以減少使用 HTML 標籤來定義 CSS 的方式,換成使用具體的 class

瀏覽器會從右到左解析 CSS 選擇器

.content_box div p a {
    // ...
}
複製程式碼

瀏覽器會對上面的例子做如下的步驟處理:

  1. 首先找到頁面所有的 <a> 元素
  2. 然後向上找到被 <p> 元素包裹的 <a> 元素
  3. 再向上查詢到一直到 .content_box 的元素

從上面的步驟我們可以看出,越靠右的選擇器越具有唯一性,瀏覽器解析 CSS 屬性的效率就越高。

所以一定換成使用具體的 class 編寫 CSS 程式碼。

避免 reflow 風險

我們知道修改某些 CSS 屬性會導致整個頁面佈局的重繪( repaint )/重排( reflow )。

repaint 的速度遠快於 reflow,所以避免 reflow 更重要

導致 repaint 和 reflow 的原因

  1. DOM 元素的新增、修改、刪除(repaint、reflow)
  2. 僅僅修改 DOM 元素的字型顏色(repaint,不需要調整佈局)
  3. 應用新的樣式或者修改任何影響元素外觀的屬性(repaint、reflow)
  4. resize,頁面滾動(repaint、reflow)
  5. 讀取元素的某些屬性(offsetTop/Left/Width/Height、getComputedStyle、scrollTop/Left/Width/Height、clientTop/Left/Width/Height等)(repaint、reflow)

如果在大量的元素上更改這些屬性,那麼計算和更新他們的位置/大小需要花費很長的時間。

更加消耗效能的 CSS 屬性

有一些 CSS 屬性會比其他屬性消耗能多的效能,即瀏覽器解析這些屬性需要花費更多的時間。

如:border-radiusbox-shadowfilter:nth-child

當然這些屬性我們經常使用,有些無法避免。要做出適當的取捨。

希望這幾個 CSS 小知識可以對你有所幫助,然後點個贊在走唄。

最後

如果你想進【大前端交流群】,關注公眾號點選“交流加群”新增機器人自動拉你入群。關注我第一時間接收最新干貨。

【前端詞典】幾個有益的 CSS 小知識

相關文章