前端开发中需要注意的CSS命名规则以及书写顺序

本文介绍了CSS编程中的BEM命名规则,强调了合理的命名和书写顺序对提高浏览器性能的重要性,包括减少回流和重绘,以及推荐省略默认属性和一致的代码格式标准。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、CSS的命名——BEM规则:

CSS命名一般是用 BEM 规则命名的。它背后的想法是将用户界面划分为独立的块。
BEM的意思就是B模块(block)E元素(element)M修饰符(modifier)
即:[block]__[element]--[modifier]

模块和子元素之间用两个下划线分隔(如:order__security),子元素和修饰符之间用两个中划线分隔,(如:content__person–selected)。

● 块 Block:组件的最外层父元素定义为块。
● 元素 Elemnt:组件内部可以是一个或多个称为元素的子元素。
● 修饰符 Modifier:块或元素可能具有由修饰符表示的变体。

关于子元素E,有两种写法:

  • 第一种:按照层级嵌套来写,如 block__ele1-son-inner,但是这样写会导致命名过长;

  • 第二种:扁平化,一个模块下的所有子元素,无论相互层级如何,都直接连接这个模块,如
    block__inner,但是这样就无法表示层级关系,命名时也可能会出现冲突。

命名注意:

  1. 一律小写;
  2. 尽量用英文;
  3. 尽量不缩写,除非一看就明白的单词。

2、关于CSS属性的书写顺序建议:

一般来说,要先定义好布局,即先写位置、再写大小边距,再写文字样式、背景色,最后写其他属性。

  1. 位置属性:position, top, right, z-index, display, float 等
  2. 自身大小及边距:width, height, padding, margin 等
  3. 背景:background, border 等
  4. 文字样式:font-family font-size font-style font-weight font-varient color 等
  5. 文本属性:text-align vertical-align text-wrap text-transform text-indent text-decoration letter-spacing word-spacing white-space text-overflow 等
  6. 其他:border-radius, animation, transition等

如:

.wrapper{
    display: block;
    position: relative;
    width: 100px;
    height: 100px;
    margin: 0 10px;
    padding: 20px 0;
    font-family: Arial, 'Helvetica Neue', Helvetica, sans-serif;
    color: #333;
    background: rgba(0,0,0,.5);
    border-radius: 10px;
}

目的:减少浏览器回流(reflow),提升浏览器渲染dom的性能

浏览器的渲染流程:

① 解析html构建 DOM 树,解析css构建 CSSOM 树:将html解析成树形的数据结构,将css解析成树形的数据结构。
② 构建 Render 树:DOM树和CSS树合并之后形成的render树。
③ 布局(Layout):有了render树,浏览器已经知道那些网页中有哪些节点,各个节点的css定义和以及它们的从属关系,从而计算出每个节点在屏幕中的位置和大小
④ 绘制(Painting):根据css样式规则将计算好的盒模型呈现出来。

布局阶段的主要任务是生成盒子,计算它们的位置和大小;绘制阶段则是根据css样式规则将计算好的盒模型呈现出来。

所以说,如果元素的 位置 和 大小 出现变动,就需要浏览器再次回到布局阶段重新计算,计算后再绘制,这就是 回流;而如果元素的颜色等样式属性出现变动,则无需计算,只需再次绘制,这就是 重绘

css样式解析到显示至浏览器屏幕上就发生在 ②③④ 步骤,浏览器并不是一获取到css样式就立马开始解析,而是根据css样式的书写顺序,将之按照 dom 树的结构完成构建,然后开始遍历每个树结点的 css 样式进行解析,此时 css 样式的遍历顺序完全是按照之前的书写顺序。

在解析过程中,一旦浏览器发现某个元素的定位变化影响布局,则需要倒回去重新渲染。正如按照这样的书写顺序:

.test{
	width: 100px;
	height: 100px;
	background-color: red ;
	position: absolute;
}

当浏览器解析到 position 的时候突然发现该元素是绝对定位元素需要脱离文档流,而之前却是按照普通元素进行解析的,所以不得不重新渲染,解除该元素在文档中所占位置,然而由于该元素的占位发生变化,其他元素也可能会受到它回流的影响而重新排位。最终导致③步骤(布局)花费的时间太久而影响到④步骤的显示,影响了用户体验。

另:一些可以缩写的属性建议缩写,如padding,在值不同的情况下,还是不要拆开的好。代码看起来会简略很多。
建议:

.test{
	padding: 8px 6px 4px 2px;
    margin:8px 6px;
}

不建议:

.test{
	padding-top: 8px;
    padding-right:6px;
    padding-bottom:4px;
	padding-left:2px;
}

3、CSS默认属性可以省略不写(在确认默认值是什么的情况下)

尽量不要直接copy设计稿中的css。
如:

font-weight: 400,默认情况下font-weight的值是 normal, 相当于是400。
font-style: normal,默认值,设置字体是常规字体还是斜体。
line-height: normal,默认值,设置行间距。

类似这种情况的,就不需要写了。

4、代码格式化方面

css样式的格式化方面还比较统一。
● 缩进用2个空格
● 类名后空一格再加花括号{ }
● 每个属性的冒号后空一格,并加分号
● 伪类、后代、子元素、连接符等转行书写
● 同级类名转行书写

举个🌰:
在这里插入图片描述

我们维护的项目代码来自不同的开发者,风格比较多样化。尽量养成良好的代码习惯!

5. 行业CSS代码参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清颖~

您的鼓励让我们一起进步,加油!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值