[TOC]
編寫好的CSS代碼,有助提升頁面的渲染速度。本質上,引擎需要解析的CSS規則越少,性能越好。MDN上將CSS選擇符歸類成四個主要類別,如下所示,性能依次降低。
*ID 規則*
*Class 規則*
*標簽規則*
*通用規則*
對效率的普遍認識是從Steve Souders在2009年出版的《[高性能網站建設進階指南](http://click.union.360buy.com/JdClick/?unionId=16231&to=http://book.360buy.com/10067740.html)》開始,雖然該書中羅列的更加詳細,但你也可以在[這里](http://csswizardry.com/2011/09/writing-efficient-css-selectors/)查看完整的引用列表,也可以在谷歌的《[高效CSS選擇器的最佳實踐](https://developers.google.com/speed/docs/best-practices/rendering#UseEfficientCSSSelectors)》中查看更多的細節。
本文我想分享一些我在編寫高性能CSS中用到的簡單例子和指南。這些都是受到[MDN 編寫的高效CSS指南](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Writing_efficient_CSS)的啟發,并遵循類似的格式。
---
顯然,這里只講述了少數的規則,是我在我自己的CSS中,本著更高效和更易維護性而嘗試遵循的規則。如果你想閱讀更多的知識,我建議閱讀MDN上的[編寫高效的CSS](https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Writing_efficient_CSS)和谷歌的[優化瀏覽器渲染指南](https://developers.google.com/speed/docs/best-practices/rendering#UseEfficientCSSSelectors)。
---
# 遵循一個標準的聲明順序
雖然有一些排列CSS屬性順序[常見的方式](http://css-tricks.com/new-poll-how-order-css-properties/),下面是我遵循的一種流行方式。
```css
.someclass {
1.位置屬性(position, top, right, z-index, display, float等)
2.大小(width, height, padding, margin)
3.文字系列(font, line-height, letter-spacing, color- text-align等)
4.背景(background, border等)
5.其他(animation, transition等)
}
```
box-model從內向外寫: `size -> padding -> border -> margin`
# 后代選擇符最爛
不僅性能低下而且代碼很脆弱,html代碼和css代碼嚴重耦合,html代碼結構發生變化時,CSS也得修改,這是多么糟糕,特別是在大公司里,寫html和css的往往不是同一個人。
~~~
// 爛透了
html div tr td {..}
~~~
# 避免鏈式(交集)選擇符
這和過度約束的情況類似,更明智的做法是簡單的創建一個新的CSS類選擇符。
```css
// 糟糕
.menu.left.icon {..}
// 好的
.menu-left-icon {..}
```
# 組織好的代碼格式
代碼的易讀性和易維護性成正比。下面是我遵循的格式化方法。
```css
/*糟糕*/
.someclass-a, .someclass-b, .someclass-c, .someclass-d {
...
}
/* 好的 */
.someclass-a,
.someclass-b,
.someclass-c,
.someclass-d {
...
}
/* 好的做法 */
.someclass {
background-image:
linear-gradient(#000, #ccc),
linear-gradient(#ccc, #ddd);
box-shadow:
2px 2px 2px #000,
1px 4px 1px 1px #ddd inset;
}
```
# 參考
[編寫更好的CSS代碼](http://blog.jobbole.com/55067/)