CSS样式表的写作规范

写了这么久的CSS,但自己都没有按照良好的CSS书写规范来写CSS代码,东写一段西写一段,命名也是想到什么写什么,过一段时间自己都不知道写的是那一块内容,
这样会影响代码的阅读体验和工作进程,在更改样式时也会麻烦很多;看网上的大能前辈总结的CSS书写规范、CSS书写顺序供大家参考,我想对写CSS的前端用户来说是
值得学习的。
  想了想我认为前端是一个整体,HTML的布局和CSS命名息息相关,body里包个外框-(wrapper)>各个布局模块(g)-{g-one、g-two、g-three、g-four、
g-five}>模块里内容-内层(core)-{内容多以c-header、c-main、c-foot}>内层里内容以“c-header>nameClass”来表示;
最后找到网上大能前辈的方法做参考!!!

CSS的引用、开头
1.样式放头上,脚本放脚下。不内嵌,只外链。
2.@charset "utf-8";注意,必须要定义在 CSS 文件所有字符的前面(包括编码注释),@charset 才会生效。
    例如,下面的例子都会使得 @charset 失效:

    /* 字符编码 */
    @charset "utf-8";
    html,
    body {
          height: 100%;
    }

    @charset "utf-8";
3.注释用英文,避免解析出现乱码;
4.慎用 * 通配符。所谓通配符,就是将 CSS 中的所有标签均初始化,不管用的不用的,过时的先进的,一视同仁,这样,大大的占用资源。要有选择的初始化标签。

 命名空间规范

1.布局:以 g 为命名空间,例如:.g-wrap 、.g-header、.g-content。
2.状态:以 s 为命名空间,表示动态的、具有交互性质的状态,例如:.s-current、s-selected。
3.工具:以 u 为命名空间,表示不耦合业务逻辑的、可复用的的工具,例如:u-clearfix、u-ellipsis。
4.组件:以 m 为命名空间,表示可复用、移植的组件模块,例如:m-slider、m-dropMenu。
5.钩子:以 j 为命名空间,表示特定给 JavaScript 调用的类名,例如:j-request、j-open。

CSS样式层叠覆盖顺序

层叠样式类型

类型:
1. 浏览器默认样式
2. 浏览器用户自定义样式
3. 外部样式表
4. 内部样式表
5. 内联样式表    
顺序:
浏览器默认样式 < 浏览器用户自定义样式 < 外部样式表 < 内部样式表 < 内联样式表
样式表内部选择器
1. 类选择器 
2. 类派生选择器
3. ID选择器
4. ID派生选择器
样式表内部选择器生效顺序
类选择器 < 类派生选择器 < ID选择器 < ID派生选择器
生效规则
1. 样式表的元素选择器选择越精确,则其中的样式优先级越高。
   id选择器指定的样式 > 类选择器指定的样式 > 元素类型选择器指定的样式
2. 对于相同类型选择器指定的样式,在样式表文件中,越靠后的优先级越高。
3. 一个元素同时应用多个class,后定义的优先(即近者优先)
4. 如果要让某个样式的优先级变高,可以使用!important来指定。

CSS书写顺序
1.位置属性(position, top, right, z-index, display, float等)
2.大小(width, height, padding, margin)
3.文字系列(font, line-height, letter-spacing, color- text-align等)
4.背景(background, border等)
5.其他(animation, transition等)

  

CSS书写规范
css-written-order
使用CSS缩写属性
CSS有些属性是可以缩写的,比如padding,margin,font等等,这样精简代码同时又能提高用户的阅读体验。
abbreviation

去掉小数点前的“0”

简写命名
很多用户都喜欢简写类名,但前提是要让人看懂你的命名才能简写哦!

16进制颜色代码缩写
有些颜色代码是可以缩写的,我们就尽量缩写吧,提高用户体验为主。
 

连字符CSS选择器命名规范

1.长名称或词组可以使用中横线来为选择器命名。

2.不建议使用“_”下划线来命名CSS选择器,为什么呢?

输入的时候少按一个shift键;
浏览器兼容问题 (比如使用_tips的选择器命名,在IE6是无效的)
能良好区分JavaScript变量命名(JS变量命名是用“_”)

  字符小写

定义的选择器名,属性及属性值的书写皆为小写。
在xhtml标准中规定了所有标签、属性和值都小写,CSS 书写也应该遵循此约定。

 选择器

当一个规则包含多个选择器时,每个选择器独占一行。
、+、~、> 选择器的两边各保留一个空格。
.g-header > .g-header-des,
.g-content ~ .g-footer {
    
}

  

 代码注释

单行注释
星号与内容之间必须保留一个空格。

/* 表格隔行变色 */
多行注释
星号要一列对齐,星号与内容之间必须保留一个空格。

/**
 * Sometimes you need to include optional context for the entire component. Do that up here if it's important enough.
 */

规则声明块内注释

使用 // 注释,// 后面加上一个空格,注释独立一行。

.foo{
    border: 0;
    // ....
}
 

文件注释

文件顶部必须包含文件注释,用 @name 标识文件说明。星号要一列对齐,星号与内容之间必须保留一个空格,标识符冒号与内容之间必须保留一个空格。

 
/**
 * @name: 文件名或模块名
 * @description: 文件或模块描述
 * @author: author-name(mail-name@domain.com)
 *          author-name2(mail-name2@domain.com)
 * @update: 2015-04-29 00:02
 */
 
  • @description为文件或模块描述。
  • @update为可选项,建议每次改动都更新一下。
 

当该业务项目主要由固定的一个或多个人负责时,需要添加@author标识,一方面是尊重劳动成果,另一方面方便在需要时快速定位责任人。

 

 数值与单位

当属性值或颜色参数为 0 - 1 之间的数时,省略小数点前的 0 。

color: rgba(255, 255, 255, 0.5)

color: rgba(255, 255, 255, .5);

当长度值为 0 时省略单位。

margin: 0px auto

margin: 0 auto
不要随意使用Id

id在JS是唯一的,不能多次使用,而使用class类选择器却可以重复使用,另外id的优先级优先与class,所以id应该按需使用,而不能滥用。

css-id


为选择器添加状态前缀
有时候可以给选择器添加一个表示状态的前缀,让语义更明了,比如下图是添加了“.is-”前缀。

  

  样式属性顺序

单个样式规则下的属性在书写时,应按功能进行分组,并以 Positioning Model > Box Model > Typographic > Visual 的顺序书写,提高代码的可读性。

如果包含 content 属性,应放在最前面;
Positioning Model 布局方式、位置,相关属性包括:position / top / right / bottom / left / z-index / display / float / ...
Box Model 盒模型,相关属性包括:width / height / padding / margin / border / overflow / ...
Typographic 文本排版,相关属性包括:font / line-height / text-align / word-wrap / ...
Visual 视觉外观,相关属性包括:color / background / list-style / transform / animation / transition / ...
Positioning 处在第一位,因为他可以使一个元素脱离正常文本流,并且覆盖盒模型相关的样式。盒模型紧跟其后,因为他决定了一个组件的大小和位置。
其他属性只在组件内部起作用或者不会对前面两种情况的结果产生影响,所以他们排在后面。

 合理使用使用引号

在某些样式中,会出现一些含有空格的关键字或者中文关键字。

font-family 内使用引号
当字体名字中间有空格,中文名字体及 Unicode 字符编码表示的中文字体,为了保证兼容性,都建议在字体两端添加单引号或者双引号:

1

2

3

body {

  font-family: 'Microsoft YaHei', '黑体-简', '\5b8b\4f53';

}

 

  

background-image 的 url 内使用引号 如果路径里面有空格,旧版 IE 是无法识别的,会导致路径失效,建议不管是否存在空格,都添加上单引号或者双引号: 

1

div { <br>  background-image: url('...'); <br>}

 

 CSS命名规范(规则)

 
status-select
常用的CSS命名规则
头:header
内容:content/container
尾:footer
导航:nav
侧栏:sidebar
栏目:column
页面外围控制整体佈局宽度:wrapper
左右中:left right center
登录条:loginbar
标志:logo
广告:banner
页面主体:main
热点:hot
新闻:news
下载:download
子导航:subnav
菜单:menu
子菜单:submenu
搜索:search
友情链接:friendlink
页脚:footer
版权:copyright
滚动:scroll
内容:content
标签:tags
文章列表:list
提示信息:msg
小技巧:tips
栏目标题:title
加入:joinus
指南:guide
服务:service
注册:regsiter
状态:status
投票:vote
合作伙伴:partner

注释的写法:
/* Header */
内容区
/* End Header */

Id的命名:
1)页面结构

容器: container
页头:header
内容:content/container
页面主体:main
页尾:footer
导航:nav
侧栏:sidebar
栏目:column
页面外围控制整体佈局宽度:wrapper
左右中:left right center

(2)导航

导航:nav
主导航:mainnav
子导航:subnav
顶导航:topnav
边导航:sidebar
左导航:leftsidebar
右导航:rightsidebar
菜单:menu
子菜单:submenu
标题: title
摘要: summary

(3)功能

标志:logo
广告:banner
登陆:login
登录条:loginbar
注册:register
搜索:search
功能区:shop
标题:title
加入:joinus
状态:status
按钮:btn
滚动:scroll
标籤页:tab
文章列表:list
提示信息:msg
当前的: current
小技巧:tips
图标: icon
注释:note
指南:guild
服务:service
热点:hot
新闻:news
下载:download
投票:vote
合作伙伴:partner
友情链接:link
版权:copyright、

 避免使用 !important

除去某些极特殊的情况,尽量不要不要使用 !important。

!important 的存在会给后期维护以及多人协作带来噩梦般的影响。

当存在样式覆盖层叠时,如果你发现新定义的一个样式无法覆盖一个旧的样式,只有加上 !important 才能生效时,是因为你新定义的选择器的优先级不够旧样式选择器的优先级高。
所以,合理的书写新样式选择器,是完全可以规避一些看似需要使用 !important 的情况的。

 SASS 使用建议

嵌套层级规定
使用 SASS 、 LESS 等预处理器时,建议嵌套层级不超过 3 层。

组件/公用类的使用方法

 

组件/公用类使用 %placeholders 定义,使用 @extend 引用。如:

 

1

2

3

4

5

6

7

8

%clearfix {

  overflowauto;

  zoom: 1;

}

.g-header {

  @extend %clearfix;

}

 

组件类的思考

 

使用 SASS ,经常会预先定义好一些常用公用组件类,譬如清除浮动,水平垂直居中,文字 ellipsis。又或者多个元素具有同样的样式,我们希望能够少写这部分代码,公共部分抽离出来只写一次,达到复用。

 

但是复用的方式在 SASS 中有多种,那么是使用单独使用一个类定义,给需要的标签添加,还是使用 @include 或者 @extend在定义的类中引入一个 @mixin,或者一个 @function 呢?

 

基于让 CSS 更简洁以及代码的复用考虑,采用上面的使用 %placeholders 定义,使用 @extend 引用的方案。

 
  • %placeholders,只是一个占位符,只要不通过 @extend 调用,编译后不会产生任何代码量
  • 使用 @extend 引用,则是因为每次调用相同的 %placeholders 时,编译出来相同的 CSS 样式会进行合并(反之,如果使用 @include 调用定义好的 @mixin,编译出来相同的 CSS 样式不会进行合并)
  • 这里的组件类特指那些不会动态改变的 CSS 样式,注意与那些可以通过传参生成不同数值样式的 @mixin 方法进行区分
 

尽量避免使用标签名

 

使用 SASS ,或者说在 CSS 里也有这种困惑。

 

假设我们有如下 html 结构:

 

1

2

3

4

5

6

7

8

<div class="g-content">

    <ul class="g-content-list">

        <li class="item"></li>

        <li class="item"></li>

        <li class="item"></li>

        <li class="item"></li>

    </ul>

</div>

 

在给最里层的标签命名书写样式的时候,我们有两种选择:

1

2

3

4

5

6

7

.g-content {

  .g-content-list {

    li {

      ...

    }

  }

}

或者是

1

2

3

4

5

6

7

.g-content {

  .g-content-list {

    .item {

      ...

    }

  }

}

 

也就是,编译之后生成了下面这两个,到底使用哪个好呢?

  • .g-content .g-content-list li { }
  • .g-content .g-content-list .item { }

基于 CSS 选择器的解析规则(从右向左),建议使用上述第二种 .g-content .g-content-list .item { } ,避免使用通用标签名作为选择器的一环可以提高 CSS 匹配性能。

 

浏览器的排版引擎解析 CSS 是基于从右向左(right-to-left)的规则,这么做是为了使样式规则能够更快地与渲染树上的节点匹配。 

 编写CSS样式表需要注意的15个点

1、不要使用过小的图片做背景平铺。这就是为何很多人都不用 1px 的原因,这才知晓。宽高 1px 的图片平铺出一个宽高 200px 的区域,需要 200*200=40, 000 次,占用资源。 
2、无边框。推荐的写法是 border:none;,哈哈,我一直在用这个。 border:0; 只是定义边框宽度为零,但边框样式、颜色还是会被浏览器解析,占用资源。   
3、慎用 * 通配符。所谓通配符,就是将 CSS 中的所有标签均初始化,不管用的不用的,过时的先进的,一视同仁,这样,大大的占用资源。要有选择的初始化标签。   
4、CSS 的十六进制颜色代码缩写。习惯了缩写及小写,这才知道,原来不是推荐的写法,为的是减少解析所占用的资源。但同时会增加文件体积。孰优孰劣,有待仔细考证。   
5、样式放头上,脚本放脚下。不内嵌,只外链。   
6、坚决不用 CSS 表达式。   
7、使用引用样式表,而不是通过 @import 导入。   
8、一般来说,PNG 比 GIF 要小,小得多。再者,GIF 中有多少颜色是被浪费的,很值得优化。   
9、千万不要在 HTML 中缩放图片,一者不好看,二者占资源。   
10、正文字体最好用偶数,12px、14px、16px,效果非常好。特例,15px。   
11、block、ul、ol 等上下留出至少一倍行距,左侧至少两倍行距,右侧随意。   
12、段落之间,至少要有一倍行距。   
13、强行指定某些元素的 line-height,正文 1.6 倍于文字大小,标题 1.3 倍。   
14、中文标点用全角。英文夹杂在中文中,左右空格,半角。   
15、中文字体的粗体和斜体,远离较好,利民利己。 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值