前言
今天偷個懶,不長篇大論,分享幾個你可能不知道的 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 標簽,然后再向上查找包含 class 為 div 的元素。這樣一來如果 代碼中有很多 p 標簽,無疑是會做很多重復工作的。
所以可以減少使用 HTML 標簽來定義 CSS 的方式,換成使用具體的 class。
瀏覽器會從右到左解析 CSS 選擇器
.content_box div p a {
// ...
}
瀏覽器會對上面的例子做如下的步驟處理:
首先找到頁面所有的 <a> 元素
然后向上找到被 <p> 元素包裹的 <a> 元素
再向上查找到一直到 .content_box 的元素
從上面的步驟我們可以看出,越靠右的選擇器越具有唯一性,瀏覽器解析 CSS 屬性的效率就越高。
所以一定換成使用具體的 class 編寫 CSS 代碼。
避免 reflow 風險
我們知道修改某些 CSS 屬性會導致整個頁面布局的重繪( repaint )/重排( reflow )。
repaint 的速度遠快于 reflow,所以避免 reflow 更重要
導致 repaint 和 reflow 的原因
DOM 元素的添加、修改、刪除(repaint、reflow)
僅僅修改 DOM 元素的字體顏色(repaint,不需要調整布局)
應用新的樣式或者修改任何影響元素外觀的屬性(repaint、reflow)
resize,頁面滾動(repaint、reflow)
讀取元素的某些屬性(repaint、reflow)(offsetTop/Left/Width/Height、getComputedStyle、scrollTop/Left/Width/Height、clientTop/Left/Width/Height等)
如果在大量的元素上更改這些屬性,那么計算和更新他們的位置/大小需要花費很長的時間。
新聞熱點
疑難解答