4. 格式

最终选择的代码风格必须保证:易于阅读,易于清晰地注释,最小化无意中引入错误的可能性,可生成有用的diff和blame。

  1. 在多个选择器的规则集中,每个单独的选择器独占一行。
  2. 在规则集的左大括号前保留一个空格。
  3. 在声明块中,每个声明独占一行。
  4. 每个声明前保留一级缩进。
  5. 每个声明的冒号后保留一个空格。
  6. 对于声明块的最后一个声明,始终保留结束的分号。
  7. 规则集的右大括号保持与该规则集的第一个字符在同一列。
  8. 每个规则集之间保留一个空行。
  1. .selector-1,
  2. .selector-2,
  3. .selector-3[type="text"] {
  4. -webkit-box-sizing: border-box;
  5. -moz-box-sizing: border-box;
  6. box-sizing: border-box;
  7. display: block;
  8. font-family: helvetica, arial, sans-serif;
  9. color: # 333;
  10. background: # fff;
  11. background: linear-gradient(# fff, rgba(0, 0, 0, 0.8));
  12. }
  13. .selector-a,
  14. .selector-b {
  15. padding: 10px;
  16. }

声明顺序

样式声明的顺序应当遵守一个单一的原则。我的倾向是将相关的属性组合在一起,并且将对结构来说比较重要的属性(如定位或者盒模型)
放在前面,先于排版、背景及颜色等属性。

小型的开发团体,可能会想要把相关的属性声明(比如说定位和箱模型)摆在一起。

  1. .selector {
  2. /* Positioning */
  3. position: absolute;
  4. z-index: 10;
  5. top: 0;
  6. right: 0;
  7. bottom: 0;
  8. left: 0;
  9. /* Display & Box Model */
  10. display: inline-block;
  11. overflow: hidden;
  12. box-sizing: border-box;
  13. width: 100px;
  14. height: 100px;
  15. padding: 10px;
  16. border: 10px solid # 333;
  17. margin: 10px;
  18. /* Other */
  19. background: # 000;
  20. color: # fff;
  21. font-family: sans-serif;
  22. font-size: 16px;
  23. text-align: right;
  24. }

大型团队,则可能更喜欢按字母排序,因为这样做起来很方便,而且维护起来很容易。

例外及细微偏移原则的情况

对于大量仅包含单条声明的声明块,可以使用一种略微不同的单行格式。在这种情况下,在左大括号之后及右大括号之前都应该保留一个空格。

  1. .selector-1 { width: 10%; }
  2. .selector-2 { width: 20%; }
  3. .selector-3 { width: 30%; }

对于以逗号分隔并且非常长的属性值 — 例如一堆渐变或者阴影的声明 — 可以放在多行中,这有助于提高可读性,并易于生成有效的diff。这种情况下有多
种格式可以选择,以下展示了一种格式。

  1. .selector {
  2. box-shadow:
  3. 1px 1px 1px # 000,
  4. 2px 2px 1px 1px # ccc inset;
  5. background-image:
  6. linear-gradient(# fff, # ccc),
  7. linear-gradient(# f3c, # 4ec);
  8. }

杂项

  • 在十六进制值中,使用小写,如# aaa
  • 单引号或双引号的选择保持一致。推荐使用双引号,如content: ""
  • 对于选择器中的属性值也加上引号,如input[type="checkbox"]
  • 如果可以的话,不要给0加上单位, 如margin: 0

预处理:格式方面额外的考虑

不同的CSS预处理有着不同的特性、功能以及语法。编码习惯应当根据使用的预处理程序进行扩展,以适应其特有的功能。推荐在使用SCSS时遵守以下指导。

  • 将嵌套深度限制在1级。对于超过2级的嵌套,给予重新评估。这可以避免出现过于详实的CSS选择器。
  • 避免大量的嵌套规则。当可读性受到影响时,将之打断。推荐避免出现多于20行的嵌套规则出现。
  • 始终将@extend语句放在声明块的第一行。
  • 如果可以的话,将@include语句放在声明块的顶部,紧接着@extend语句的位置。
  • 考虑在自定义函数的名字前加上x-或其它形式的前缀。这有助于避免将自己的函数和CSS的原生函数混淆,或函数命名与库函数冲突。
  1. .selector-1 {
  2. @extend .other-rule;
  3. @include clearfix();
  4. @include box-sizing(border-box);
  5. width: x-grid-unit(1);
  6. // other declarations
  7. }