声明顺序
最后更新于:2022-04-01 10:46:59
难以想象竟有这么多关于划分 CSS 声明顺序的讨论。具体而言,有如下两派:
* 坚持以字母顺序排列;
* 以类型(`position`, `display`, `colors`, `font`, miscellaneous…)顺序排列;
这两种方式各有利弊。一方面,字母排序方式通俗易懂(至少对于语言中使用拉丁字母的人来说),所以排序的过程完全没有争议。但是,这种排序的结果却十分奇怪,如 `bottom` 和 `top` 竟然彼此不相邻。为什么 `animations` 属性出现在`display` 属性之前?字母排序方式有太多诸如此类的怪相了。
~~~
.foo {
background: black;
bottom: 0;
color: white;
font-weight: bold;
font-size: 1.5em;
height: 100px;
overflow: hidden;
position: absolute;
right: 0;
width: 100px;
}
~~~
另一方面,按照类型排序则让属性显得更具有意义。每个和字体相关的属性被声明在一起,`top` 和 `bottom` 也结合在一起,最终审阅CSS规则集感觉就像是在读故事。除非你坚持诸如 [Idiomatic CSS](https://github.com/necolas/idiomatic-css)的规定,不然类型声明顺序可以有更丰富充实的表现。`white-space` 应该放在哪里:font还是dispaly? `overflow` 应该归属何处?如何进行组内排序(如果是字母排序,这岂不成了个笑话)?
~~~
.foo {
height: 100px;
width: 100px;
overflow: hidden;
position: absolute;
bottom: 0;
right: 0;
background: black;
color: white;
font-weight: bold;
font-size: 1.5em;
}
~~~
此外也有其他类型排序的分支,比如[Concentric CSS](https://github.com/brandon-rhodes/Concentric-CSS),他看起来相当流行。Concentric CSS 的基础是依赖盒模型定义顺序:由外而内。
~~~
.foo {
width: 100px;
height: 100px;
position: absolute;
right: 0;
bottom: 0;
background: black;
overflow: hidden;
color: white;
font-weight: bold;
font-size: 1.5em;
}
~~~
我必须说我不能对此下任何判定。一份 [CSS-Tricks 做的统计报告](http://css-tricks.com/poll-results-how-do-you-order-your-css-properties/)确认,超过 45% 的开发者使用类型顺序声明,而只有 14% 使用字母顺序。此外还有 39% 的开发者随意而为,这其中就包括我。
![图表展示了开发者排列 CSS 声明顺序的方式
](http://sass-guidelin.es/assets/images/css-order-chart.png)
图表展示了开发者排列 CSS 声明顺序的方式
因此,我不会在此强加规范选择怎样的声明顺序。只要你长久的在自己的样式表中保持一致的风格,那么选择喜欢的声明顺序就可以了(也就说不要太随便)。
[最新研究](http://peteschuster.com/2014/12/reduce-file-size-css-sorting/) 表明,使用[CSS Comb](https://github.com/csscomb/csscomb.js) (按照[类型排序](https://github.com/csscomb/csscomb.js/blob/master/config/csscomb.json)) 对 CSS 进行排序,按类型顺序声明,Gzip 压缩文件大小平均达到 2.7%,而按字母顺序排序压缩的文件大小平均达到 1.3%。
## 扩展阅读
* [CSS Comb](https://github.com/csscomb/csscomb.js)
* [Concentric CSS](https://github.com/brandon-rhodes/Concentric-CSS)
* [Idiomatic CSS](https://github.com/necolas/idiomatic-css)
* [On Declaration Sorting](http://meiert.com/en/blog/20140924/on-declaration-sorting/)
* [Reduce File Size With CSS Sorting](http://peteschuster.com/2014/12/reduce-file-size-css-sorting/)
* [Poll Results: How Do You Order Your CSS Properties?](http://css-tricks.com/poll-results-how-do-you-order-your-css-properties/)