3. 通用
3.1 选择器
【强制】 如无必要,不得为id、class选择器添加 类型选择器 进行限定;
在性能和维护性上,都有一定的影响。
示例:
/* Not so great */dialog# error,p.danger-message {font-color: # c00;}/* Better */# error,.danger-message {font-color: # c00;}
【建议】 选择器的嵌套层级应该不大于 3 级,位置靠后的限定条件应可能精确;
在性能和维护性上,都有一定的影响。
示例:
/* Not so great */.comment ul li a span {}# top-hero .hero-avatar li.avatar .pic em {}/* Better */.comment .date {}# top-hero .pic em {}
3.2 属性
3.2.1 属性书写顺序
【建议】 同一 rule set 下的属性在书写时,应按功能进行分组,并以 Formatting Model > Box Model > Typographic > Visual 的顺序书写,以提高代码的可读性。
- Positioning Model 布局方式、位置;相关属性包括:
position / top / right / bottom / left / z-index / display / float / ... - Box model 盒模型;相关属性包括:
width / height / padding / margin / border / overflow / ... - Typographic 文本排版;相关属性包括:
font / line-height / text-align / word-wrap / ... - Visual 视觉外观;相关属性包括:
color / background / list-style / transform / animation / transition / ... - 如果包含 content 属性,应放在最前面;
Positioning 处在第一位,因为他可以使一个元素脱离正常文本流,并且覆盖盒模型相关的样式。盒模型紧跟其后,因为他决定了一个组件的大小和位置。其他属性只在组件 内部 起作用或者不会对前面两种情况的结果产生影响,所以他们排在后面。
详情资料 Twitter的strictPropertyOrder
3.2.2 属性引号
【强制】 属性选择器中的值必须用双引号包围。不允许使用单引号,不允许不使用引号。
示例:
/* Not so great */article[character='juliet'] {voice-family: "Vivien Leigh", victoria, female}/* Better */article[character="juliet"] {voice-family: "Vivien Leigh", victoria, female}
3.2.3 属性简写
简写形式可以在一定程度上压缩样式,但并不意味着你可以对所有可以简写的属性声明都使用简写。过度使用简写形式的属性声明会导致代码混乱,会对属性值带来不必要的覆盖从而引起意外的副作用,并且不能充分利用CSS的继承。常见的滥用简写属性声明的情况如下:
paddingmarginfontbackgroundborderborder-radius
如果你只需定义其中的一两个属性,而不是全部,尽量分开来写:
/* Better */.selector {margin-bottom: 10px;background-color: red;background-image: url(image.jpg);border-top-left-radius: 3px;border-top-right-radius: 3px;}/* Not so great */.selector {margin: 0 0 10px;background: red;background: url(image.jpg);border-radius: 3px 3px 0 0;}
[⬆]
