命名规范
Id和class的名称总是使用可以反应元素目的和用途的名称,或其他通用的名称,禁止使用晦涩难懂的名称
.heavy {font-weight: 800;}.important {color: red;}
合理的使用Id
一般情况下不应该被用于样式,并且ID的权重很高,所以不推荐使用ID解决样式问题,而是使用class。
不推荐:
.content .title {font-size: 2px;}
css选择器中避免使用标签名
从结构、表现、行为分离的原则来看,应该尽量避免css中出现HTML标签,并且在css选择器中出现标签名会存在潜在的问题。
使用子选择器
很多前端开发人员写选择器链的时候不使用 直接子选择器(非后代选择器)。
有时,这可能会导致疼痛的设计问题并且有时候可能会很耗性能。
然而,在任何情况下,这是一个非常不好的做法。
如果你不写很通用的,需要匹配到DOM末端的选择器,你应该总是考虑直接子选择器。
不推荐:
.content .title {font-size: 2px;}
推荐:
.content > .title {font-size: 2px;}
尽量使用缩写属性
尽量使用缩写属性对于代码效率和可读性是很有用的,比如font属性。
不推荐:
border-top-style: none;font-family: palatino, gerorgia, serif;font-size: 100%;line-height: 1.6;padding-bottom: 2em;padding-left: 1em;padding-right: 1em;padding-top: 0;
推荐:
border-top: 0;font: 100%/1.6 palatino, gerorgia, serif;padding:0 2em 1em 0;
0后面不带单位
省略后面的单位
不推荐:
padding-bottom: 0px;margin: 0em;
推荐:
padding-bottom: 0;margin: 0;
属性格式
- 为了保证一致性和可扩展性,每个声明应该用分号结束,每个声明换行。
- 属性名的冒号后使用一个空格。出于一致性的原因,属性和值(但属性和冒号之间没有空格)的之间始终使用一个空格。
- 每个选择器和属性声明总是使用新的一行。
- 属性选择器或属性值用双引号(””),而不是单引号(”)括起来。
- URI值(url())不要使用引号。
作为最佳实践,我们应该遵循以下顺序(应该按照下表的顺序):
结构性
- display
- position, left, top, right etc.
- overflow, float, clear etc.
- margin, padding
表现性
- background, border etc.
- font, text
不推荐
.box {font-family: 'Arial', sans-serif;border: 3px solid #ddd;left: 30%;position: absolute;text-transform: uppercase;background-color: #eee;right: 30%;isplay: block;font-size: 1.5rem;overflow: hidden;padding: 1em;margin: 1em;}
推荐:
.box {display: block;position: absolute;left: 30%;right: 30%;overflow: hidden;margin: 1em;padding: 1em;background-color: #eee;border: 3px solid #ddd;font-family: 'Arial', sans-serif;font-size: 1.5rem;text-transform: uppercase;}
BEM命名规范
BEM是块block、元素element、修饰符modifier的简写,是由Yandex团队提出的一种前端css命名方法论。
- -中划线 :仅作为连字符使用,表示某个块或者某个子元素的多单词之间的连接记号。
- __ 双下划线:双下划线用来连接块和块的子元素
- _ 单下划线:单下划线用来描述一个块或者块的子元素的一种状态
BEM 是一个简单又非常有用的命名约定。让你的前端代码更容易阅读和理解,更容易协作,更容易控制,更加健壮和明确,而且更加严密。
推荐写法和风格
//常规写法:.xxx{}.xxx__item{}.xxx__item_current{}// 嵌套写法.xxx__item_current .mod-xxx__link{}推荐:.xxx{}.xxx__item{}.xxx__item_hightlight{}.xxx__product-name{}.xxx__link{}.xxx__ming-zi-ke-yi-hen-chang{}// 嵌套写法.xxx__item_current{.xxx__link{}}//对应的HTML结构如下:<ul class="xxx"><li class="xxx__item">第一项<div class="xxx__product-name">我是名称</div><span class="xxx__ming-zi-ke-yi-hen-chang">看类名</span><a href="#" class="xxx__link">我是link</a><li><li class="xxx__item xxx__item_current">第二项 且 当前选择项<div class="xxx__product-name">我是名称</div><a href="#" class="xxx__item-link">我是link</a><li><li class="xxx__item xxx__item_hightlight">第三项 且 特殊高亮<div class="xxx__product-name">我是名称</div><a href="#" class="xxx__item-link">我是link</a><li></ul>
