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 | 弹窗 |