介绍一下 CSS 的 BEM

本贴最后更新于 671 天前,其中的信息可能已经时异事殊

2018-12-25

回答

BEM(Block, Element, Modifier)是一种基于组件的对 CSS 类名进行约定的 Web 开发方法。他通过定义命名空间来解决权重问题,从而使 CSS 更易于维护。 BEM 使用 Block、Element、Modifier 来解释其结构。Block 是一个可跨项目重用的独立组件,且是子组件(Element)的“命名空间”。Modifier 可标示 Block 或 Element 处于某种状态、结构或特定的样式。

/* block component */
.block-name {
}
/* element */
.block-name__element-name {
}
/* modifier */
.block-name__element-name--modifier-name {
} 

示例如下:

<nav class="navbar">
    <a href="/" class="navbar__link navbar__link--active"></a>
    <a href="/" class="navbar__link"></a>
</nav> 

在示例中,navbar 为 Block,navbar__link 是一个不能独立与 navbar 存在的 Element,navbar__link--active 是标明 navbar__link 不同状态的 Modifier。

加分回答

<form class="search-form">
    <div class="search-form__content">
        <input class="search-form__input">
        <!-- 错误:建议使用 `search-form__button` 或 `search-form__content-button` -->
        <button class="search-form__content__button">Search</button>
    </div>
</form>
<!-- 错误:该 Element 应放在 `search-form` Block 中 -->
<i class="search-form__icon"></i>
<!-- 错误:缺少 `search-form` Block -->
<form class="search-form_theme_islands">
</form>
<!-- 错误:使用多个 Modifier -->
<form class="search-form search-form_theme_islands search-form_theme_lite">
</form>

返回总目录

每天 30 秒

  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 379 回帖 • 4 关注
  • CSS

    CSS(Cascading Style Sheet)“层叠样式表”是用于控制网页样式并允许将样式信息与网页内容分离的一种标记性语言。

    158 引用 • 410 回帖
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    273 引用 • 1355 回帖 • 189 关注

赞助商 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • zjhch123

    话说 CSS 隔离一直是痛点啊!
    如果是 react 项目,可以用 css-module、stylues、CSS in js…等
    如果是 Vue 项目,可以用自带的 scope 标签
    但是这些实际上都不是很好的隔离方法,最终都是通过加类加 attr 解决。
    如果是普通的前端项目,不带任何框架的,是不是只能用 scss/less 的 语法来解决呢?

    我感觉,CSS 隔离的最好方案还是使用 shadow-dom,浏览器层面原生支持,再也不需要框架辅助了!
    奈何 shadow-dom 的兼容性目前看来还是太差了 😭

    1 回复
  • Vanessa
    作者

    除了隔离还需要公用。写着写着要抽一下,重构一下,也是头痛。

    Shadow Dom 做样式太方便么?