组件必须设置唯一的命名空间做为前缀
-
分隔命名空间和元素比如一个drop down list组件使用ddl
作为命名空间:
Good
.ddl-container {}
.ddl-item-list {}
.ddl-item {}
Bad
.item-list {}
.dropdown-item-list {}
.xyz-item-list {}
通用的类提供可复用样式应该放在单独命名空间如uv
Good
.uv-clearfix {}
Bad
.clearfix {}
类名应该遵循以下规则
-
分隔词Good
.ddl-item {}
.ddl-selected {}
.ddl-item-selected {}
Bad
.ddlItem {}
.ddl-item-container-text {}
.ddl-foo-bar-baz {}
属性选择器经常带来好处, 基础规则:
Good
[href] {}
Bad
a[href] {}
[href^='http'] {}
id
选择器禁止使用id选择器
Good
.ur-name {}
Bad
#ur-name {}
标签选择器使用应遵循以下规则
a.foo
Good
button {
padding: 5px;
margin-right: 3px;
}
.ddl-button {
background-color: #f00;
}
Bad
.ddl-container button {
background-color: #f00;
}
选择器嵌套不应该超过三级
Good
.sg-title-icon:before {}
.dg-container .sg-title {}
Bad
.dg-container .sg-container .sg-title {}
.dg-container .sg-title span:before {}
如果一个组件需要与另外一个地方的同种组件不一样
假设你有一个用户列表组件.ul-*
和一个用户卡片组件.uc-*
Good
<div class="ul-container">
<div class="uc-container">
<span class="uc-name ul-card-name">John Doe</span>
</div>
</div>
.ul-card-name {}
Okay
<div class="ul-container">
<div class="uc-container">
<span class="uc-name">John Doe</span>
</div>
</div>
.ul-container .uc-name {}
Bad
<div class="ul-container">
<div class="uc-container">
<span class="uc-name uc-name-in-ul">John Doe</span>
</div>
</div>
.uc-name-in-ul {}
完美状态下应该将所有样式保存在单独文件中
注意规则:
展现相关样式是指只影响元素视觉效果的样式, 不改变元素尺寸和位置 in a meaningful way. 如:
color
, font-weight
, font-variant
font-size
is not considered a meaningful dimension changebox-sizing: border-box;
情况下的padding
max-width
, max-height
同时可以属于两个类别, 更偏向于归为显示布局相关样式修改元素尺寸和位置
margin
, padding
width
, height
position
z-index