规范
定义
Block:页面中的大区域,表示最顶级的划分,例如:轮播图(banner)、布局(layout)、文章(article)等等
element:区域中的组成部分,例如:轮播图中的横幅图片(banner__img)、轮播图中的容器(banner__container)、布局中的头部(layout__header)、文章中的标题(article_title)
modifier:可选。通常表示状态,例如:处于展开状态的布局左边栏(layout__left_expand)、处于选中状态的轮播图小圆点(banner__dot_selected)
书写规范
- 中划线 :仅作为连字符使用,表示某个块或者某个子元素的多单词之间的连接记号。
_ 双下划线:双下划线用来连接块和块的子元素
单下划线:单下划线用来描述一个块或者块的子元素的一种状态
在某些大型工程中,如果使用BEM命名法,还可能会增加一个前缀,来表示类名的用途,常见的前缀有:
- l: layout,表示这个样式是用于布局的
- c: component,表示这个样式是一个组件,即一个功能区域
- u: util,表示这个样式是一个通用的、工具性质的样式
- j: javascript,表示这个样式没有实际意义,是专门提供给js获取元素使用的
示例如下
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>*{margin: 0;padding: 0;}ul,li{list-style: none;}.banner{width: 300px;height: 200px;margin: 0 auto;overflow: hidden;position: relative;}.banner__viewport{width: 300px;height: 200px;border: 1px solid red;}.banner__imgContainer{width: 900px;height: 100%;background: rgba(0, 255, 0, .5);}.banner__imgList{width: 300px;height: 100%;float: left;}.banner__imgList__link{display: block;width: 100%;height: 100%;background: rgba(0, 0, 244, .5);}.banner__imgList img{width: 100%;height: 100%;}.banner__dotContainer{width: 40px;height: 10px;position: absolute;left: 50%;transform: translate(-50% ,0);bottom: 10px;background: rgba(0, 0, 0, .5);display: flex;justify-content: space-between;}.banner__dot{display: block;width: 10px;height: 10px;border-radius: 50%;background: #fff;}</style><body><section class="banner"><ul class="banner__imgContainer"><li class="banner__imgList"><a href="javascript:void()" class="banner__imgList__link"><img src="./1.jpg" alt="" ></a></li><li class="banner__imgList"><a href="javascript:void()" class="banner__imgList__link"><img src="./1.jpg" alt="" ></a></li><li class="banner__imgList"><a href="javascript:void()" class="banner__imgList__link"><img src="./1.jpg" alt="" ></a></li></ul><div class="banner__dotContainer"><span class="banner__dot banner__dot_active"></span><span class="banner__dot"></span><span class="banner__dot"></span></div></section></body></html>
