【问题标题】:navigation using BEM [closed]使用 BEM 导航 [关闭]
【发布时间】:2014-03-15 03:48:32
【问题描述】:

我正在努力了解BEM,即使是最基本的事情我也遇到了麻烦。比如菜单。

考虑这段代码

<ul class="menu">
    <li class="menu__item">
        <a href="/what">What</a>
    </li>

    <li class="menu__item">
        <a href="/why">Why</a>
    </li>

    <li class="menu__item">
        <a href="/how">How</a>
    </li>
</ul>

ul 是块,li 是元素,但是我该怎么处理那个锚?因为我需要 lia 样式,li 必须至少样式为内联,a 必须是块和东西。我可以将a 设为.menu_item,但是我将如何设置li 的样式,因为我不应该在css 中使用元素选择器,并且菜单块应该适用于任何html 元素,例如.menu li {} 会是,如果我决定使用 diva 组合,毫无意义..

那么我该如何以“正确”的方式做到这一点?

【问题讨论】:

  • 锚并不是一个“块”,尽管它可能是display:block,这是完全不同的事情。另一方面,您不必对所有内容都进行 BEM。
  • 我知道不是,这就是为什么我说我需要将列表项 display: inline; 和锚点 display: block; 设置为 a) 达到我想要的效果 b) 演示需要设置两个元素的样式。而且我知道我不需要所有的 BEM,但是我不想在我尝试 BEM 的第一件事上就放弃“正确的”BEM。这就是我在这里问的原因。
  • @cimmanon 这几乎与命名无关,它可以命名为 pen_or 或 pEnOr 就我所关心的,无论如何,BEM 对我来说是一种将 html 和 css 解耦的方法。这也不是基于意见的,也有一些规则或指导方针可供遵循。菜单示例是最常见的 BEM 案例之一(请参阅 goo.gl/bdl4oi),但它停留在假设菜单是由 wrapitem 制作的,而在现实生活中,它几乎从未如此。像牙刷这样的人带着他们的“我不知道 BEM 是什么,但这是我如何在 HTML 中制作菜单”的毫无意义的回应,这并不是我的错。
  • @foxx 不管你喜欢与否,命名约定都是关于意见的(例如,“不要使用后代选择器,因为后代选择器不好”)。你知道你必须在代码方面做什么才能获得你想要的效果,“帮我命名我的类”与“帮我根据 BEM 约定命名我的类”没有什么不同。

标签: html css sass bem


【解决方案1】:

这里有两个选项(或者你可以决定同时使用它们):

lia 使用不同的元素:

<ul class="menu">
    <li class="menu__item">
        <a class="menu__link" href="/what">What</a>
    </li>
    <li class="menu__item">
        <a class="menu__link" href="/why">Why</a>
    </li>
    <li class="menu__item">
        <a class="menu__link" href="/how">How</a>
    </li>
</ul>

这里重要的一点是,你不应该使用像menu__item__link 这样的嵌套元素。

为链接使用单独的块:

<ul class="menu">
    <li class="menu__item">
        <a class="link" href="/what">What</a>
    </li>
    <li class="menu__item">
        <a class="link" href="/why">Why</a>
    </li>
    <li class="menu__item">
        <a class="link" href="/how">How</a>
    </li>
</ul>

所以你可以通过一点级联来应用规则:.menu .link {}

或者你可以使用混合,这是我认为最好的方式:

<ul class="menu">
    <li class="menu__item">
        <a class="link menu__link" href="/what">What</a>
    </li>
    <li class="menu__item">
        <a class="link menu__link" href="/why">Why</a>
    </li>
    <li class="menu__item">
        <a class="link menu__link" href="/how">How</a>
    </li>
</ul>

这一次您可以避免使用级联,但保留项目中链接的通用样式。

【讨论】:

  • 我不想使用不同的元素,因为如果我使用不同的 html 元素(如 diva),menu__item 将会过时。将锚定为块可能是有道理的,我只是之前还没有真正看到过同时是元素的块。
  • @foxx 我不认为 BEM 意味着你认为它的意思。
  • @Paulie_D 想解释一下您是如何获得这种印象的?还有 tadatuta 我现在明白了,您实际上是指混合,而不是混合
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
  • 1970-01-01
  • 2016-01-19
  • 2017-09-09
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
相关资源
最近更新 更多