BEM 是块(block)、元素(element)、修饰符(modifier)的简写,由 Yandex 团队提出的一种前端 CSS 命名方法论
BEM 命名模式
1 | .block { |
每一个块(block)名应该有一个命名空间(前缀)
block 代表了更高级别的抽象或组件
block__element代表.block的后代,用于形成一个完整的.block的整体block--modifier代表.block的不同状态或不同版本。
使用两个连字符和下划线而不是一个,是为了让你自己的块可以用单个连字符来界定。如:1
2
3
4
5.sub-block__element {
}
.sub-block--modifier {
}
LESS SCSS
1 | .article { |
Tips
避免
.block__el1__el2的格式在深层次嵌套的 DOM 结构下,应避免过长的样式名称定义
层级最后不要超过 4 级,不然增加阅读的理解难度
Example
1 | /* 常规写法: */ |
1 | <!-- 对应的HTML结构如下: --> |
常用命名
| 名称 | 作用 |
|---|---|
| .wrap 或 .wrapper | 外侧包裹 |
| .container | 包裹容器 |
| .header | 用于头部 |
| .body | 页面 body |
| .footer | 页面尾部 |
| .aside 或 .sidebar | 用于侧边栏 |
| .content | 和 header footer 对应,用于主要内容 |
| .navigation | 导航元素 |
| .pagination | 分页 |
| .tabs > .tab | tab 切换 |
| .breadcrumbs | 导航列表、面包屑 |
| .dropdown | 下拉菜单 |
| .article | 文章 |
| .main | 用于主体 |
| .media | 媒体资源 |
| .thumbnail 或 .avatar | 头像,小图像 |
| .panel | 面板 |
| .tooltip | 鼠标放置上去的提示 |
| .popup | 鼠标点击弹出的提示 |
| .button 或 .btn | 按钮 |
| .ad | 广告 |
| .subnav | 二级导航 |
| .menu | 菜单 |
| .tag | 标签 |
| .message 或 .notice | 提示消息 |
| .summary | 摘要 |
| .logo | logo |
| .search | 搜索框 |
| .login | 登录 |
| .register | 注册 |
| .banner | 广告条 |
| .copyright | 版权 |
| .modal 或 .dialog | 弹窗 |