使用 BEM 导航栏结构的正确方法
Correct approach for a navbar structure with BEM
我正在努力思考 CSS 中的 BEM 命名,想知道我是否理解正确。
根据官方文档,一个元素是:
A part of a block that has no standalone meaning and is semantically
tied to its block.
鉴于下面的代码片段,.main-nav
的子项的 none 具有任何独立的含义,因此我相信它们都符合元素的条件。
但是,当我最终得到一个像 .main-nav__sub-menu-item-link
这样的 class 名称时,我不禁觉得有些代码味道。感觉我还在嵌套好几层,就在我的元素名称 space.
也许这完全没问题,下面的示例是正确的实现方式,我希望能提供第二个意见。
<nav class="main-nav">
<div class="main-nav__logo">
<a class="main-nav__logo-link">Company Name</a>
</div>
<ul class="main-nav__menu">
<li class="main-nav__menu-item">
<a class="main-nav__menu-item-link">Products</a>
<ul class="main-nav__sub-menu">
<li class="main-nav__sub-menu-item">
<a class="main-nav__sub-menu-item-link">Foo</a>
</li>
<li class="main-nav__sub-menu-item">
<a class="main-nav__sub-menu-item-link">Bar</a>
</li>
<li class="main-nav__sub-menu-item">
<a class="main-nav__sub-menu-item-link">Baz</a>
</li>
</ul>
</li>
<li class="main-nav__menu-item">
<a class="main-nav__menu-item-link">Services</a>
</li>
<li class="main-nav__menu-item">
<a class="main-nav__menu-item-link">About Us</a>
</li>
</ul>
</nav>
确实还可以
CSS 中缺少范围界定的问题已在您的标记中得到解决。选择器的特异性不会增加。所以保持原样。
并且不要害怕长类名,gzip 后它与短变体一样。
我正在努力思考 CSS 中的 BEM 命名,想知道我是否理解正确。
根据官方文档,一个元素是:
A part of a block that has no standalone meaning and is semantically tied to its block.
鉴于下面的代码片段,.main-nav
的子项的 none 具有任何独立的含义,因此我相信它们都符合元素的条件。
但是,当我最终得到一个像 .main-nav__sub-menu-item-link
这样的 class 名称时,我不禁觉得有些代码味道。感觉我还在嵌套好几层,就在我的元素名称 space.
也许这完全没问题,下面的示例是正确的实现方式,我希望能提供第二个意见。
<nav class="main-nav">
<div class="main-nav__logo">
<a class="main-nav__logo-link">Company Name</a>
</div>
<ul class="main-nav__menu">
<li class="main-nav__menu-item">
<a class="main-nav__menu-item-link">Products</a>
<ul class="main-nav__sub-menu">
<li class="main-nav__sub-menu-item">
<a class="main-nav__sub-menu-item-link">Foo</a>
</li>
<li class="main-nav__sub-menu-item">
<a class="main-nav__sub-menu-item-link">Bar</a>
</li>
<li class="main-nav__sub-menu-item">
<a class="main-nav__sub-menu-item-link">Baz</a>
</li>
</ul>
</li>
<li class="main-nav__menu-item">
<a class="main-nav__menu-item-link">Services</a>
</li>
<li class="main-nav__menu-item">
<a class="main-nav__menu-item-link">About Us</a>
</li>
</ul>
</nav>
确实还可以
CSS 中缺少范围界定的问题已在您的标记中得到解决。选择器的特异性不会增加。所以保持原样。
并且不要害怕长类名,gzip 后它与短变体一样。