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