BEM
BEM 代表 “块(block),元素(element),修饰符(modifier)”,我们常用这三个实体开发组件。
在选择器中,由以下三种符号来表示扩展的关系:
1 2 3 4 5
| - 中划线 :仅作为连字符使用,表示某个块或者某个子元素的多单词之间的连接记号。 __ 双下划线:双下划线用来连接块和块的子元素 _ 单下划线:单下划线用来描述一个块或者块的子元素的一种状态
type-block__element_modifier
|
块(block)
元素(element)
1 2 3 4 5 6
| .list{} .list .item{}
.list{} .list__item{}
|
修饰符(modifier)
1 2 3 4 5 6 7 8 9 10
| .list{} .list.select{} .list .item{} .list .item.active{}
.list{} .list_select{} .list__item{} .list__item_active{}
|
LESS 书写规范
子 less |
注解 |
lib-base.less |
预定义的变量,例如颜色、字号、字体 |
lib-mixins.less |
用于混合的代码,例如渐变、半透明的混合 |
lib-reset.less |
初始化 |
lib-ui.less |
颗粒化 ui 功能 |
xxx.less |
模块样式 |
书写原则
原则上不会出现 2 层以上选择器嵌套
使用 BEM 原则,用命名来解耦,所有类名都为一层,增加效率和复用性
两层选择器嵌套出现在.mod-xxx__item_current 子元素的情况,如下:
使用推荐的嵌套写法
常规写法:
1 2 3 4 5
| .xxx{} .xxx__item{} .xxx__item_current{} // 嵌套写法 .xxx__item_current .mod-xxx__link{}
|
推荐:
1 2 3 4 5 6 7 8 9 10 11
| .xxx{} .xxx__item{} .xxx__item_hightlight{} .xxx__product-name{} .xxx__link{} .xxx__ming-zi-ke-yi-hen-chang{}
// 嵌套写法 .xxx__item_current{ .xxx__link{} }
|
对应的 HTML 结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <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>
|