前端开发 css、less编写规范

壹 ? 引

早在大半年前,我在负责整理定义了前端组JavaScript开发规范与less、css样式开发规范。一直想将两个规范整理成文章,但在整理了JavaScript规范后,我花了较多的时间在学习JavaScript基础知识,所以对于样式规范一直处于放置状态。直到上周我收到了一条关于JavaScript规范的评论,提醒了我样式规范不能再拖了,那么在放假前花点时间整理一遍作为复习也算不错。

说在前面,本文虽然作为规范但对于less与css写法也给出了部分建议,所以在阅读本规范前建议读者先掌握less基本用法,而对于规范这里也只是给出建议,毕竟适合自己的才是最好的,本文开始。

贰 ? 命名规范

贰 ? 壹 class、id命名

JavaScript变量我们推荐使用小驼峰,但样式命名得做点改变,这里我们推荐使用 - 分隔符拼接。

/* good */
#foo-bar;.foo-bar

/* bad */
#fooBar;.fooBar

贰 ? 贰 less变量命名

我们知道less提供了样式变量可供复用,对于多单词变量命名推荐采用 @ 开头并以 - 分隔符拼接的命名方式。

/* good */
@border-color:#fff;

/* bad */
@borderColor: #fff;

贰 ? 叁 less函数命名

除了变量,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命名空间

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,并输出

肆 ? css、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组合

出于性能考虑,避免元素选择器与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;
}

肆 ? 肆 使用less父选择器&

伪类属性建议采用父选择器写法代替传统写法,看几个例子:

常见伪类,比如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 {}

伍? 贰 less变量、函数请先定义后使用

变量、文件必须先声明/引用再使用,其次,文件引用代码应放在文件头部。

/* 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 {}

柒 ? mixin混入要求

关于函数混入,如果被混入的属性类自身不需要被编译输出,必须为属性类加上括号()。

/* 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;
}

捌 ? extend继承要求

如果被混入的属性类自身需要被编译输出,建议使用继承来代替混入:

/* 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 属性会影响页面的渲染,请合理使用

    • display: inline后不应该再使用 width、height、margin、padding 以及 float;
    • display: inline-block 后不应该再使用 float;
    • display: block 后不应该再使用 vertical-align;
    • display: table-* 后不应该再使用 margin 或者 float;
  • float在渲染时计算量比较大,勿滥用float;情况允许下推荐flex进行布局。
  • 动画优化
    • 使用 translate 取代 absolute 定位就会得到更好的 fps,动画会更顺滑。
    • 避免通过类似 jQuery animate()-style 改变每帧的样式,使用 CSS 声明动画会得到更好的浏览器优化。
    • 如果使用基于 javaScript 的动画,尽量使用 requestAnimationFrame. 避免使用 setTimeout, setInterval。(关于css动画我会单独介绍,先留个坑)
  • 提升 CSS 选择器性能,合理使用关键选择器
    • 特别说明,CSS选择器匹配机制是从右到左匹配,只要当前选择符的左边还有其他选择符,样式系统就会继续向左移动,直到找到和规则匹配的选择符,或者因为不匹配而退出。所以我们把最右边选择符称之为关键选择器。
    • 避免使用通用选择器 .content * {color: red;}
    • 避免使用标签限制 id 选择器 button#backButton {…}
    • 避免使用标签限制 class 选择器 treecell.indented {…}
    • 避免使用多层标签选择器,请使用 class 选择器替换,减少css查找。
    • 避免使用后代选择器,请尽可能标明层级关系。
  • 减少回流(重排)
    • 如果你要控制一个元素位移,建议先将它脱离文档流。
    • 尽量少改变font-size和font-family
    • 少改变元素的内外边距
    • 使用Flex时取代inline-block和float时,虽然都会回流,但flex性能更佳。

拾 ? 总

那么到这里,关于css、less规范就介绍完毕了,样式虽然简单,但通过合理的规划,不管是在后期维护代码或者去读懂同事的代码,都会带来意想不到的便利。

说好一个月最少写八篇博客,还差三篇只能回家写了。现在是2020年1月20日零点18分,过完今天我就要回家过年啦!!!!虽然我还没抢到回家的票...明天还是找黄牛安排一下,那么晚安,我又熬夜了。

原文地址:https://www.cnblogs.com/echolun/p/12216103.html

时间: 2024-10-13 15:53:51

前端开发 css、less编写规范的相关文章

前端开发css实战:使用css制作网页中的多级菜单

前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简单),使用css的优势显而易见,它可以使页面中的javascript变得更少. 实现逻辑: 核心:hover伪类控制子元素的显示隐藏,添加css3动画;  (没错就是这样简单) :hover伪类,适用于当用户指向一个元素时,例如用户的鼠标指向一个段落p.当用户鼠标离开元素时,恢复元素原有的样式显示

1+x 证书 Web 前端开发 css 专项练习

官方QQ群 1+x 证书 Web 前端开发 css 专项练习 http://blog.zh66.club/index.php/archives/192/ 原文地址:https://www.cnblogs.com/zhsh666/p/11967944.html

CSS的编写规范

一.前言 如上图,页面在渲染和画图时,耗时还是比较多的,这就对我们的编写要求愈加严格. 我们有很多方法来减少上图所示的页面加载耗时的,比如 但是更多的还是在于平时的编写规范,我们需要了解浏览器,让他更加便捷快速的理解(加载)我们的代码. 另外,在编写页面时,如果内容较多,相应的css也会变得更多.更加复杂. 或许会你会想着拆分css成2个或更多的文件,然而这并不是好的方法,会增加向服务器请求的次数,进而延长了页面加载完成的时间. 基于以上两点考虑,规范化的编写代码,不仅仅能够减少页面加载的耗时,

web前端开发——css

一.css介绍 1.css是什么? Cascading Style Sheets缩写,层叠样式表.样式定义如何显示HTML元素,样式通常又会存在于样式表中. 2.为什么需要css? 使HTML页面变得美观: 将HTML页面的内容与样式分离: 提高web开发的工作效率. 3.css的优势 内容与表现分离 网页的表现统一,容易修改 丰富的样式,使页面布局更加灵活 减少网页的代码量,增加网页浏览器速度,节省网络带宽 运用独立页面的css,有利于网页被搜索引擎收录 二.css语法 css语法分为两部分:

Mobile Web 前端开发 CSS动画经验分享

谈到动画作用.CSS动画是Mobilweb开发的利器,CSS动画不得不谈.受限于Mobil设备功能等疑问,PC上的动画完结计划在Mobil上大都行不通,幸运的Mobil上我能够用CSS动画,今日我就来了解一下CSS动画的3个首要成员. CSS改换(Transit transit默许的突变动画.当CSS特点改动的时分,界说好需求改换的CSS特点.transit动画被触发.可是并不是一切的CSS特点改动都会触发translat当前,并没有一个官方的文档列出来那些能够,那些不能够,可是能够经过一些小窍

前端开发 - CSS - 总结

CSS:层叠样式表(Cascading Style Sheets) 1.css的特征2.css的引入3.选择器4.伪类选择器5.伪元素选择器6.字体样式 文本样式 背景属性7.盒模型 border margin padding8.display visibility 属性9.float 属性10.position z-index 属性11.网页布局 一.css的特征: 1.css解决了两个问题: 1.将HTML页面的内容与样式分离. 2.提高web开发的工作效率. 2.css的优势: 1.内容与

前端开发-CSS介绍

我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前,我们想要修改HTML元素的样式需要为每个HTML元素单独定义样式属性,当HTML内容非常多时,就会定义很多重复的样式属性,并且修改的时候需要逐个修改,费心费力.是时候做出改变了,所以CSS就出现了. CSS的出现解决了下面两个问题: 将HTML页面的内容与样式分离. 提高web开发的工作效率. 什么是CSS? CSS是指层叠样式表(Cascading Style Shee

css样式编写规范参考

第一章     HTML & CSS 1.1    样式种类 i.               浏览器默认样式 ii.               带有样式的标签 iii.               内联样式 iv.               style 标签 v.               link 引入样式文件 1.2    结构与表现分离 结构与表现分离, 即 html结构与 css 样式分离, 这样做的好处是: 当页面的样式需要改变时, 仅需要更改样式所在的 css文件, 而不用去

前端开发--css属性书写顺序

css属性顺序是css良好编码风格的一部分,有助于提高代码可读性,便于发现代码问题,有利于团队合作.(依次排后) example { /*显示属性*/ display: ; visibility: ; float: ; clear: ; /*定位属性*/ position: ; top: ; right: ; bottom: ; left: ; z-index: ; /*盒模型属性*/ width: ; min-width: ; max-width: ; height: ; min-height