早在大半年前,我在负责整理定义了前端组JavaScript开发规范与less、css样式开发规范。一直想将两个规范整理成文章,但在整理了JavaScript规范后,我花了较多的时间在学习JavaScript基础知识,因此对于样式规范一直处于放置状态。直到上周我收到了一条关于JavaScript规范的评论,提醒了我样式规范不能再拖了,那么在放假前花点时间整理一遍做为复习也算不错。css
说在前面,本文虽然做为规范但对于less与css写法也给出了部分建议,因此在阅读本规范前建议读者先掌握less基本用法,而对于规范这里也只是给出建议,毕竟适合本身的才是最好的,本文开始。html
JavaScript变量咱们推荐使用小驼峰,但样式命名得作点改变,这里咱们推荐使用 - 分隔符拼接。前端
/* good */ #foo-bar;.foo-bar /* bad */ #fooBar;.fooBar
咱们知道less提供了样式变量可供复用,对于多单词变量命名推荐采用 @ 开头并以 - 分隔符拼接的命名方式。java
/* good */ @border-color:#fff; /* bad */ @borderColor: #fff;
除了变量,less还提供了函数用于复用多属性class样式类,关于函数推荐以 . 开头 - 分割线拼接方式命名;形参若为多个单词,推荐使用单词首字母小写方式简写,多个形参之间使用分号;隔离。(虽然函数用的很少)浏览器
/* good */ .foo-bar (@bg: #f5f5f5;@color: #900; @fz: 12px) { background: @bg; color: @color; font-size: @fz; } /* bad */ .foo-bar (@background: #f5f5f5, @color: #900, @font-size: 12px) { background: @background; color: @color; font-size: @font-size; }
less中的命名空间其实就是部分变量与混合模块的包装,对于命名空间推荐采用 # 开头 - 分割线拼接方式进行统一。性能优化
/* good */ #foo-bar { .border-radius() { font-size: 12px; }; .border-color() { color: #fff; } }
less一大好处就是支持将一个文件单纯做为变量储存文件,从而能够在其它less中引入使用,先说less引入用法,这里直接贴官网用法:less
因为可能同时存在index.less
文件与index.css
文件,为了便于同名但不一样后缀的文件区分,@import外部文件引入后缀__不推荐省略__,若是文件自身只做为引用使用而不须要编译输出,必须在文件引用时添加reference字段。函数
/* good */ @import 'demo.css'; //引入demo.css @import (reference) 'demo.less';//引入demo.less,只做引用,不输出demo的内容 /* bad */ @import 'demo.css'; //引入demo.css @import 'demo'; //引入demo.less,并输出
关于padding、margin:布局
/* good */ margin: 1px 2px; padding: 2px; /* bad */ margin: 1px 2px 1px 2px; padding: 2px 2px 2px 2px;
当数值单位为0时,请省略单位;若是存在小数点,推荐去掉0简写:性能
/* good */ transition-duration: .5s; margin-top: 0; /* bad */ transition-duration: 0.5s; margin-top: 0px;
颜色值推荐16进制写法,而非RGB表现方式,固然若是须要使用透明度时仍是可使用RGB,请灵活变通:
/* good */ border-color: #f00; color: #fefefe; /* bad */ border-color: red; color: rgb(254, 254, 254);
出于性能考虑,避免元素选择器与class或id选择器叠加使用,这种写法违背了html与样式分离的规则,若是html标签修改还得对应修改css中的元素选择器;其次,因为选择器匹配规则是从右到左,原本定位到class或id就应该结束,若是你添加了元素选择器,css还得再匹配全部的元素,很是耗性能,因此强烈不推荐。
/* good */ .foo-bar /* bad */ div.foo-bar
当多个选择器具备共同属性,推荐使用逗号分割选择器进行复用,每一个选择器独立成行。若是为less环境,也推荐变量,混入等其它作法。
/* good */ h1, h2, h3{ color: #fff; } /* bad */ h1,h2,h3{ color: #fff; }
伪类属性建议采用父选择器写法代替传统写法,看几个例子:
常见伪类,好比hover等
/* good */ a { color: #fff; &:hover { color: #ddd; } } /* bad */ a { color: #fff; } a:hover { color: #ddd; }
clearfix hack示例:
/* good */ .demo { font-size: 12px; &:after { display: block; content: ''; clear: both; } } /* bad */ .demo { font-size: 12px; } .demo:after { display: block; content: ''; clear: both; }
在书写样式前,请先划分页面布局并以布局块为单位书写样式,不可随意零散定义。代码块书写推荐从上到下,从左到右的书写顺序,不该该存在子级样式定义早于父级,底层样式定义早于上层样式的状况。
好比页面分为头部,主体与尾部,那么尾部样式早于头部样式定义;再如主体内部分为左右两个盒子,右侧盒子样式不可早于左侧盒子,这样代码更符合布局阅读习惯。
/* good */ .parent {} .child {} .top {} .bottom {} /* bad */ .child {} .parent {} .bottom {} .top {}
变量、文件必须先声明/引用再使用,其次,文件引用代码应放在文件头部。
/* good */ @import 'demo.less'; @color: #fff; .page { color:@color; } /* bad */ @import 'demo.less'; .page { color:@color; } @color: #fff;
less推荐嵌套写法,且嵌套不推荐超过三层:
/* good */ .parent { color: #fff; .child{ font-size: 12px; } } /* bad */ .parent { color: #fff; } .parent .child { font-size: 12px; }
对于页面总体布局中的大块,推荐在样式定义前添加注释说明,例如:
/* good */ /* 头部样式定义 */ .header {} /* 产品推荐样式定义 */ .mayLike {}
关于函数混入,若是被混入的属性类自身不须要被编译输出,必须为属性类加上括号()。
/* good */ .border-color() { color: #fff; } .demo { .border-color; } /* bad */ .border-color{ color:#fff; } .demo{ .border-color; }
关于函数参数,若须要引用全部形参是一条属性的不一样值,推荐@arguments代替形参分散的写法:
/* good */ .box-shadow(@x:0;@y:0;@blur:1;@color:#000){ box-shadow:@arguments; } /* bad */ .box-shadow(@x:0; @y:0; @blur:1; @color:#fff){ box-shadow:@x @y @blur @color; }
若是被混入的属性类自身须要被编译输出,建议使用继承来代替混入:
/* good */ .border-color{ color: #fff; } .demo { &:extend(.border-color); } /* 编译后 */ .border-color, .demo{ color: #fff; } /* bad */ .border-color{ color: #fff; } .demo { .border-color; } /* 编译后 */ .border-color{ color: #fff; } .demo { color: #fff; }
Display 属性会影响页面的渲染,请合理使用
动画优化
提高 CSS 选择器性能,合理使用关键选择器
.content * {color: red;}
button#backButton {…}
treecell.indented {…}
那么到这里,关于css、less规范就介绍完毕了,样式虽然简单,但经过合理的规划,不论是在后期维护代码或者去读懂同事的代码,都会带来意想不到的便利。
说好一个月最少写八篇博客,还差三篇只能回家写了。如今是2020年1月20日零点18分,过完今天我就要回家过年啦!!!!虽然我还没抢到回家的票...明天仍是找黄牛安排一下,那么晚安,我又熬夜了。