浅谈CSS代码书写顺序及规范

221 阅读5分钟

前言

一个优秀的前端程序员,一定要学会用最优雅的CSS代码实现你想要的效果。但是往往在项目开发中,大部分前端程序员都没有养成良好的CSS书写规范,没有从一开始就按照标准去写。每次写样式想到哪儿添到哪儿,完全不考虑属性书写顺序对网页加载的影响。后来才知道原来正确的样式书写顺序,不仅能让代码看起来赏心悦目,也方便后面的查看。下面咱们一起学习一下吧!

各种类型属性的书写顺序及作用

1.CSS书写顺序

  • 第一优先级(定位属性):position、display、float、left、top、right、bottom、overflow、clear、z-index
  • 第二优先级(自身属性):width、height、padding、border、margin、background
  • 第三优先级(文字样式):font-family、font-size、font-style、font-weight、font-varient、color
  • 第四优先级(文本属性):text-align、vertical-align、text-wrap、text-transform、text-indent、text-decoration、letter-spacing、word-spacing、white-space、text-overflow、line-height
  • 第五优先级(css3中新增属性):content、box-shadow、border-radius、transform……

具体代码参考:

/* 显示与流 */
display: ;
visibility: ;
float: ;
clear: ;

/* 位置 */
position: ;
top: ;
right: ;
bottom: ;
left: ;
z-index: ;

/* 尺寸 */
width: ;
min-width: ;
max-width: ;
height: ;
min-height: ;
max-height: ;
overflow: ;

/* 填充 */
padding: ;
padding-top: ;
padding-right: ;
padding-bottom: ;
padding-left: ;
/* 边界 */
border: ;
border-top: ;
border-right: ;
border-bottom: ;
border-left: ;
border-width: ;
border-top-width: ;
border-right-width: ;
border-bottom-width: ;
border-left-width: ;
border-style: ;
border-top-style: ;
border-right-style: ;
border-bottom-style: ;
border-left-style: ;
border-color: ;
border-top-color: ;
border-right-color: ;
border-bottom-color: ;
border-left-color: ;

/* 边缘 */
margin: ;
margin-top: ;
margin-right: ;
margin-bottom: ;
margin-left: ;

/* 轮廓 */
outline: ;
list-style: ;
table-layout: ;
caption-side: ;
border-collapse: ;
border-spacing: ;
empty-cells: ;
/* 排版样式 */
font: ;
font-family: ;
font-size: ;
line-height: ;
font-weight: ;
text-align: ;
text-indent: ;
text-transform: ;
text-decoration: ;
letter-spacing: ;
word-spacing: ;
white-space: ;
vertical-align: ;
color: ;

/* 背景 */
background: ;
background-color: ;
background-image: ;
background-repeat: ;
background-position: ;

/* 不透明度、光标、生成内容 */
opacity: ;
cursor: ;
content: ;
quotes: ;

2.按顺序书写作用

主要作用:减少浏览器reflow(回流),提升浏览器渲染dom的性能。

这里解释一下什么叫重绘和回流?

  • 重绘(repaint) :屏幕的一部分要重绘。渲染树节点发生改变,但不影响该节点在页面当中的空间位置及大小。譬如某个div标签节点的背景颜色、字体颜色等等发生改变,但是该div标签节点的宽、高、内外边距并不发生变化,此时触发浏览器重绘(repaint)。

  • 回流(reflow) :也有称重排,当渲染树节点发生改变,影响了节点的几何属性(如宽、高、内边距、外边距、或是float、position、display:none;等等),导致节点位置发生变化,此时触发浏览器重排(reflow),需要重新生成渲染树。譬如JS为某个p标签节点添加新的样式:"display:none;"。导致该p标签被隐藏起来,该p标签之后的所有节点位置都会发生改变。此时浏览器需要重新生成渲染树,重新布局,即回流(reflow)。

浏览器解析HTML和CSS代码的步骤

  1. 将HTML解析成树形数据结构形成dom树,将CSS代码解析成树形数据结构形成CSS树;
  2. 将DOM树和CSS树结合成render树;
  3. 布局render树,有了render树浏览器就可以网页中有哪些节点,根据节点的CSS从属关系计算在屏幕中的位置;
  4. 绘制render树,将内容显示在屏幕上。

从上面的步骤不难看出,浏览器并不是一获取到css样式就立马开始解析而是根据css样式的书写顺序将之按照dom树的结构分布render样式,完成第2步,然后开始遍历每个树结点的css样式进行解析,此时的css样式的遍历顺序完全是按照之前的书写顺序去遍历。那么只要记住书写样式时按照上面的书写顺序,就会提高程序的性能与网页的流畅度

CSS规范

1.书写规范

  1. 使用CSS缩写属性:CSS有些属性是可以缩写的,比如padding,margin,font等等,这样精简代码同时又能提高用户的阅读体验。
  2. 去掉小数点前的“0”:当属性值为小数并且小数点前面为0时,我们可以把0去掉,只需要将小数点与小数点后面的数字写出来就可以了。
  3. 16进制颜色代码缩写:有些颜色代码是可以缩写的,我们就尽量缩写吧,提高用户体验为主。
  4. 连字符CSS选择器命名规范:
    • 长名称或词组可以使用中横线来为选择器命名。
    • 下划线 ’ _’ 禁止出现在class命名中,全小写,统一使用 ‘-’ 连字符。
  5. 不要随意使用Id:id在JS是唯一的,不能多次使用,而使用class类选择器却可以重复使用,另外id的优先级优先与class,所以id应该按需使用,而不能滥用。
  6. 删除CSS属性值为0的单位。
  7. 删除无用CSS样式。
  8. 使用有意义的名称,使用结构化或者作用目标相关的,而不是抽象的名称。
  9. 尽量不缩写,除非一看就明白的单词。
  10. 一律小写,不要使用驼峰命名法,例如:className要写成class-name。

2.CSS命名规范

  1. 页面结构:
网页结构CSS命名
header
内容content / container
页面主体main
footer
导航nav
侧栏sidebar
栏目column
页面外围控制整体佈局宽度wrapper
左右中left / right / center
  1. 导航
网页结构CSS命名
导航nav
主导航mainbav
子导航subnav
顶导航topnav
边导航sidebar
左导航leftsidebar
右导航rightsidebar
菜单menu
子菜单submenu
标题title
摘要summary
  1. 功能
网页结构CSS命名
标志logo
广告banner
登陆login
登录条loginbar
注册register
搜索search
功能区shop
标题title
加入joinus
状态status
按钮btn
滚动scroll
标籤页tab
文章列表list
提示信息msg
当前的current
小技巧tips
图标icon
注释note
指南guild
服务service
热点hot
新闻news
下载download

以上内容纯属个人见解,若有不足之处欢迎各位大佬在下方评论指出,先分享到这里!!!