CSS编码规范
1 代码风格
1.1 行长度
(1)每行不得超过 120 个字符,除非单行不可分割。
1.2 属性
(1)属性定义后必须以分号结尾。
1.3 其他
(1)如果使用CSS3的属性,如果有必要加入浏览器前缀,则按照(-webkit- / -moz- / -ms- / -o- / std)的顺序进行添加,标准属性写在最后,并且属性名称要对齐。
示例:.animation-demo { -webkit-animation: mymove 5s infinite; -moz-animation: mymove 5s infinite; -o-animation: mymove 5s infinite; animation: mymove 5s infinite;}
2 通用
2.1 注释
(1)添加文件顶部注释
示例:/** @description: xxxxx中文说明* @author: hejf* @update: 2016-01-18 18:32*/
(2)添加模块注释
示例:/* module: module1 by sunshilang *//* module: module2 by sunshilang */
2.2 选择器
(1)如无必要,不得为 id、class 选择器添加类型选择器进行限定。(解释:在性能和维护性上,都有一定的影响。)
示例:/* good */#error,.danger-message { font-color: #c00;}/* bad */dialog#error,p.danger-message { font-color: #c00;}
(2)选择器的嵌套层级应不大于 3 级,位置靠后的限定条件应尽可能精确。
/* good */#username input {}.comment .avatar {}/* bad */.page .header .login #username input {}.comment div * {}
(3)命名避免使用拼音,应该采用更简明有语义的英文单词进行组合,避免通过1、2、3等序号进行命名
(4)避免直接给标签设置样式。 (5)禁止在css中使用*选择符。2.3 属性
(1) 在可以使用缩写的情况下,尽量使用属性缩写。
示例:/* good */.post { font: 12px/1.5 arial, sans-serif;}/* bad */.post { font-family: arial, sans-serif; font-size: 12px; line-height: 1.5;}
(2) 同一 rule set 下的属性在书写时,应按功能进行分组,并以 Formatting Model(布局方式、位置) > Box Model(尺寸) > Typographic(文本相关) > Visual(视觉效果) 的顺序书写,以提高代码的可读性。
解释: Formatting Model 相关属性包括:position / top / right / bottom / left / float / display / overflow 等 Box Model 相关属性包括:border / margin / padding / width / height 等 Typographic 相关属性包括:font / line-height / text-align / word-wrap 等 Visual 相关属性包括:background / color / transition / list-style 等 链接的样式请严格按照如下顺序添加:a:link > a:visited > a:hover > a:active 另外,如果包含 content 属性,应放在最前面。 示例:.sidebar { /* formatting model: positioning schemes / offsets / z-indexes / display / ... */ position: absolute; top: 50px; left: 0; overflow-x: hidden; /* box model: sizes / margins / paddings / borders / ... */ width: 200px; padding: 5px; border: 1px solid #ddd; /* typographic: font / aligns / text styles / ... */ font-size: 14px; line-height: 20px; /* visual: colors / shadows / gradients / ... */ background: #f5f5f5; color: #333; -webkit-transition: color 1s; -moz-transition: color 1s; transition: color 1s;}
(3) 0后面不需要单位,比如0px可以省略成0,0.8px可以省略成.8px。
(4) 如果可以,颜色尽量用三位字符表示,例如#aabbcc写成#abc,颜色值不允许使用命名色值。颜色值中的英文字符采用小写。如不用小写也需要保证同一项目内保持大小写一致。 (5) 在保持代码解耦的前提下,尽量合并重复的样式。 示例:h1 { color: #000; }p { color: #000; }h1, p { color: #000; }
(6) 长度为 0 时可省略单位。
示例:/* good */body { padding: 0 5px;}/* bad */body { padding: 0px 5px;}
2.4 !important
(1) 尽量不使用 !important 声明。
(2) 当需要强制指定样式且不允许任何场景覆盖时,通过标签内联和 !important 定义样式。2.5 @import
(1) 与 <link> 相比,@import 要慢很多,不光增加额外的请求数,还会导致不可预料的问题。
替代办法: 使用多个 元素; 通过 Sass 或 Less 类似的 CSS 预处理器将多个 CSS 文件编译为一个文件; 其他 CSS 文件合并工具;2.6 z-index
(1) 将 z-index 进行分层,对文档流外绝对定位元素的视觉层级关系进行管理。(解释:同层的多个元素,如多个由用户输入触发的 Dialog,在该层级内使用相同的 z-index 或递增 z-index。建议每层包含100个 z-index 来容纳足够的元素,如果每层元素较多,可以调整这个数值。)
替代办法: (2) 在可控环境下,期望显示在最上层的元素,z-index 指定为 999999。3 值与单位
3.1 文本
(1) 文本内容必须用双引号包围。(解释:文本类型的内容可能在选择器、属性值等内容中。)
示例:/* good */html[lang|="zh"] q:before { font-family: "Microsoft YaHei", sans-serif; content: "“";}html[lang|="zh"] q:after { font-family: "Microsoft YaHei", sans-serif; content: "”";}/* bad */html[lang|=zh] q:before { font-family: 'Microsoft YaHei', sans-serif; content: '“';}html[lang|=zh] q:after { font-family: "Microsoft YaHei", sans-serif; content: "”";}
4 文本编排
4.1 字体族
(1) font-family 属性中的字体族名称应使用字体的英文 Family Name,其中如有空格,须放置在引号中。
解释: 所谓英文 Family Name,为字体文件的一个元数据,常见名称如下:字体 | 操作系统 | Family Name |
---|---|---|
宋体 (中易宋体) | Windows | SimSun |
黑体 (中易黑体) | Windows | SimHei |
微软雅黑 | Windows | Microsoft YaHei |
微软正黑) | Windows | Microsoft JhengHei |
华文黑体 | Mac/iOS | STHeiti |
冬青黑体 | Mac/iOS | Hiragino Sans GB |
文泉驿正黑 | Linux | WenQuanYi Zen Hei |
文泉驿微米黑 | Linux | WenQuanYi Micro Hei |
示例:
h1 { font-family: "Microsoft YaHei";}
4.2 字号
(1) 需要在 Windows 平台显示的中文内容,其字号应不小于 12px。(解释:由于中文字体没有 italic 风格的实现,所有浏览器下都会 fallback 到 obilique 实现 (自动拟合为斜体),小字号下 (特别是 Windows 下会在小字号下使用点阵字体的情况下) 显示效果差,造成阅读困难。)
5 变换与动画
(1) 使用 transition 时应指定 transition-property。
示例:/* good */.box { transition: color 1s, border-color 1s;}/* bad */.box { transition: all 1s;}
(2) 尽可能在浏览器能高效实现的属性上添加过渡和动画。
解释: 在可能的情况下应选择这样四种变换:transform: translate(npx, npx); transform: scale(n); transform: rotate(ndeg); opacity: 0.1;
典型的,可以使用 translate 来代替 left 作为动画属性。
示例;/* good */.box { transition: transform 1s;}.box:hover { transform: translate(20px); /* move right for 20px */}/* bad */.box { left: 0; transition: left 1s;}.box:hover { left: 20px; /* move right for 20px */}
6 兼容性
6.1 hack
(1) 需要添加 hack 时应尽可能考虑是否可以采用其他方式解决。(解释:如果能通过合理的 HTML 结构或使用其他的 CSS 定义达到理想的样式,则不应该使用 hack 手段解决问题。通常 hack 会导致维护成本的增加。)
(2) 尽量使用 选择器 hack 处理兼容性,而非属性 hack。(解释:尽量使用符合 CSS 语法的 selector hack,可以避免一些第三方库无法识别 hack 语法的问题。) 示例:/* IE 7 */*:first-child + html #header { margin-top: 3px; padding: 5px;}/* IE 6 */* html #header { margin-top: 5px; padding: 4px;}
(3) 尽量使用简单的属性 hack。
示例:.box { _display: inline; /* fix double margin */ float: left; margin-left: 20px;}.container { overflow: hidden; *zoom: 1; /* triggering hasLayout */}
6.2 Expression
尽量避免使用 Expression
7 网站CSS架构
7.1 CSS reset
编写css样式时,需要先引入reset样式。
7.2 网站CSS架构
网站的CSS架构按照CSS reset > 基本通用样式 > 网站通用样式(包括通用按钮、网站头部、网站底部、网站通用分页等) > 各个网页特殊样式的顺序进行编写。
示例:/*reset*/body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,form,legend,input,textarea,p,th,td{ margin:0;padding:0;}a,button,select,textarea,input{ outline:none;}img{ border:0;vertical-align:bottom;}em{ font-style:normal;}textarea{ resize:none;}body{ font:12px/1.5 \5B8B\4F53,Helvetica,Arial,sans-serif;}a{ text-decoration:none;}a:hover{ text-decoration:none;}ol,ul{ list-style:none}/*基本通用样式*/.mL30{ margin-left:30px;}.abs{ position:aboulute;}...../*网站通用样式*/.submit-btn{ background:#ff0;color:#fff;padding:3px 2px;}cancel-btn{ background:#bf2;color:#fff;padding:3px 2px; }...../*首页样式*/..../*客户服务页面样式*/....../*联系我们页面样式*/......