CSS编码规范

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSS编码规范相关的知识,希望对你有一定的参考价值。

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;    
}
.....
/*首页样式*/
....
/*客户服务页面样式*/
......
/*联系我们页面样式*/
......

 

以上是关于CSS编码规范的主要内容,如果未能解决你的问题,请参考以下文章

CSS编码规范

递进迭代敏捷

前端(HTML/CSS/JS)-JavaScript编码规范

HTML/CSS/JS编码规范

css编码规范

Less编码规范