BEM 块、命名和嵌套

2024-03-21

我正在尝试了解 BEM 命名约定。我被困在这个问题上。我可能误解了一些东西,让我们看看。

我有一个侧边栏导航和一个内容导航。

我的侧边栏导航看起来像这样

<div class="sidebar">
    <ul class="sidebar__nav">
        <li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
        <li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
    </ul>
</div>

我的内容导航看起来像这样

<div class="content">
    <ul class="content__nav">
        <li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
        <li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
    </ul>
</div>

现在,如果我设置 .nav__item 样式,我会遇到问题,它们出现在我的两个导航中,并且不应该具有相同的样式。我应该在这里做一些嵌套,还是我命名我的块和元素错误?

CSS 中的嵌套示例:

.content__nav .nav__item { background: Red; }

或者我应该这样命名:

<li class="content__nav__item"><a href="#" class="content__nav__link">LINK</a></li>

你能帮我吗?


关于如何编写 BEM 类有多种变体,因此请注意存在多个相互竞争的标准。它最初是一套松散的指导方针。自从发布这个答案以来,Yandex 大幅修改了其官方标准 https://en.bem.info/(这是一个很大的进步)。我使用的 BEM 版本主要基于尼古拉斯·加拉格尔的文章 http://csswizardry.com/2013/01/mindbemding-getting-your-head-round-bem-syntax/.

此时我使用“原子无泄漏” http://www.sitepoint.com/atomic-oobemitscss/,这实际上只是一种说法,类是模块化和命名空间的,选择器具有低特异性,状态可以通过类进行切换,从而允许在 CSS 预处理器之上缩放 CSS,以使代码更加简洁和富有表现力。

尽管如此,我将使用以下 BEM 标准:

  • 带连字符的类名作为块:
    foo-bar
  • 块名称后跟__后跟元素的连字符类名:
    foo-bar__fizz-buzz
  • 块或元素名称后跟--后跟修饰符的连字符类名:
    foo-bar--baz, foo-bar--baz__fizz-buzz, foo-bar__fizz-buzz--qux

BEM 简写形式:block-name__element-name--modifier-name


您的示例中有三个不同的块:

  1. sidebar,其中有一个sidebar__nav element
  2. content,其中有一个content__nav element
  3. nav, 其中有nav__item and nav__link元素

The sidebar and content块似乎是同一块的变体,可以表示为.region.region--sidebar and .region.region--content.

The nav块是隐式的ul元素,并且你应该明确它:

<ul class="nav"><!-- could be content__nav or sidebar__nav as well if you choose -->
    <li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
    <li class="nav__item"><a href="#" class="nav__link">LINK</a></li>
</ul>

一旦您指定了ul元素是一个nav块,这是有道理的nav块被修改:

<ul class="nav nav--content">
    <li class="nav__item nav--content__item"><a href="#" class="nav__link nav--content__link">LINK</a></li>
    <li class="nav__item nav--content__item"><a href="#" class="nav__link nav--content__link">LINK</a></li>
</ul>

设置 CSS 类、样式后all nav__item元素很简单:

.nav__item {
    ...styles here...
}

并覆盖内容的这些样式nav__item元素是:

.nav--content__item {
    ...styles here...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BEM 块、命名和嵌套 的相关文章

随机推荐

  • AWS Elastic Beanstalk:在运行 PHP 的 EC2 实例上终止 HTTPS

    我想在我的单实例 EBS 环境上允许 https 连接 我按照以下链接中的步骤操作 http docs aws amazon com elasticbeanstalk latest dg https singleinstance php h
  • 字符串作为决策树/随机森林中的特征

    我是机器学习新手 现在我正在做一些关于决策树 随机森林应用的问题 我正在尝试解决一个以数字和字符串 例如国家 地区名称 为特征的问题 现在 scikit learn 库仅接受数字作为参数 但我想注入字符串以及它们携带大量知识 我该如何处理这
  • ipython笔记本单元格的背景颜色

    如何更改 iPython Notebook 中特定单元格的背景颜色 例如 我正在编写一本手册 我想在灰色文本框中添加一些终端命令 如下所示http ipython org ipython doc 1 interactive nbconver
  • React Native - 如何像 iOS 或 Instagram 一样进行模糊视图?

    模糊背景透明度 是否可以在不使用背景图像的情况下模糊视图 我想展示家长内容在上面背景模糊视图 in modal 类似这样的 尝试过反应本机模糊 https github com react native community react na
  • Linq lambda 表达式 - 查找一周中距离当前日期(现在)最近的一天

    例如 我将星期一 星期四和星期日作为抽奖日期 使用 Linq Lambda 查找与 Datetime Now 最接近的 dayOfWeek 的方法是什么 我使用正常功能完成了此操作 但我想知道如何使用 Linq Lambda 来完成此操作
  • 在 webapp 中优雅地关闭 ExecutorService?

    在我的网络应用程序中 我创建了一个使用ExecutorService具有固定大小的线程池 我重复使用相同的ExecutorService在整个应用程序生命周期内 private static ExecutorService pool Exe
  • 如何创建一个内容为表达式结果的有限迭代器?

    我想创建一个Iterator通过 重复 评估表达式来获取下一个元素 并且我希望表达式能够返回某个值来终止它 我唯一发现的就是这样迭代器 continually http www scala lang org api current inde
  • Python有限差分函数?

    我一直在 Numpy Scipy 中寻找包含有限差分函数的模块 然而 我发现的最接近的是numpy gradient 这对于二阶精度的一阶有限差分很有用 但如果您想要更高阶的导数或更准确的方法 则效果不太好 我什至还没有找到很多专门用于此类
  • 如何在客户端读取excel文件内容?

    在 JSP 页面中 我需要浏览 excel 文件 在系统上选择文件后 我需要读取该 excel 文件内容并填写表格 目前我已经尝试使用下面的代码 但它只能在 IE 中工作 并对 ActiveXObject 的 IE Internet 选项进
  • 使用 java poi 从 Office 2007+ 文档中读取属性集

    我尝试从 Office 2007 文档 docx xlsx 读取属性集 找到了惊人的解决方案http poi apache org hpsf how to html http poi apache org hpsf how to html
  • postgresql 生成无间隙的序列

    我必须 必须为发票创建唯一的 ID 我有一个表 ID 和这个唯一编号的另一列 我使用序列化隔离级别 使用 var seq SELECT invoice serial 1 FROM invoice WHERE type type ORDER
  • 导航器.userAgent

    我正在尝试检测浏览器是否是 Safari 如果是这样 那就做点什么吧 在所有其他浏览器中 执行其他操作 if navigator userAgent toLowerCase indexOf safari 1 if safari execut
  • 感叹号在数据类型中起什么作用?

    我是 Haskell 的新手 今天我阅读了 OpenGL 源代码 发现了这个 data VertexArrayDescriptor a VertexArrayDescriptor NumComponents DataType Stride
  • 使用 jQuery 获取元素的真实宽度

    我正在为 html 文件的 视觉正确性 编写一个验证器 目标是检测太宽的元素 这是我的问题的演示 http jsfiddle net vv68y 2 红色虚线表示文档的最大宽度 本例中为 200px 第一段很好 但第二段太宽了 尽管如此 以
  • 刷新所有 Azure 实例上的数据

    刷新所有 Azure 实例中的数据的最佳方法是什么 我有多个实例 每个实例都运行相同的 Web 角色 角色启动时 数据从 Blob 存储读取到本地存储 网站使用的数据会间歇性地有新的更新 我希望能够以编程方式通知每个实例 以将更新的数据从
  • 如何在Terraform中输出一种类型的所有资源?

    我有一堆aws ecr repositories在我的 Terraform 代码中定义 resource aws ecr repository nginx images name nginx test resource aws ecr re
  • 获取字符串形式的属性名称

    我需要一种方法来传递属性并获取分配给它的名称 有什么建议么 property nonatomic retain MyObject crazyObject NSString str SOME WAY TO GET PROPERTY NAME
  • 设置可选参数默认值的 phpdoc 标准?

    Example This function will determine whether or not one string starts with another string param string haystack p The st
  • 如何在 Objective-C 中内联声明好的旧 C 数组?

    这是我的代码 NSUInteger indexArr 1 2 3 4 NSIndexSet indexSet NSIndexPath indexPathWithIndexes indexArr length 4 有没有办法声明indexAr
  • BEM 块、命名和嵌套

    我正在尝试了解 BEM 命名约定 我被困在这个问题上 我可能误解了一些东西 让我们看看 我有一个侧边栏导航和一个内容导航 我的侧边栏导航看起来像这样 div class sidebar ul class sidebar nav li cla