使用 BEM CSS 类语法,假设我有一个具有以下类的元素:
...
<div class="purchase__module2__heading__tooltip">...</div>
...
Run Code Online (Sandbox Code Playgroud)
现在让我们说有一个事件或某些东西使这个“工具提示”变得活跃或可见。用 BEM 表达这一点的正确方法是什么?我是否替换当前类,所以现在它变成:
...
<div class="purchase__module2__heading__tooltip--active">...</div>
...
Run Code Online (Sandbox Code Playgroud)
或者我添加它
...
<div class="purchase__module2__heading__tooltip purchase__module2__heading__tooltip--active">...</div>
...
Run Code Online (Sandbox Code Playgroud)
或者我可以做一些像这样简单的事情:
...
<div class="purchase__module2__heading__tooltip active">...</div>
...
Run Code Online (Sandbox Code Playgroud)
我认为答案是#2,但它似乎很牵强。#3 很好也很简单,但我不知道这是否遵循适当的 BEM 指南。
如果要修改块或元素,则还必须包含基类。
例如
<div class="block">
<div class="block__element">...</div>
</div>
Run Code Online (Sandbox Code Playgroud)
可以将块修改为:
<div class="block block--modifier">
<div class="block__element block--modifier__element">...</div>
</div>
Run Code Online (Sandbox Code Playgroud)
或元素修改为:
<div class="block">
<div class="block__element block__element--modifier">...</div>
</div>
Run Code Online (Sandbox Code Playgroud)
无论哪种情况,您都开始需要使用多个类。
查看您的示例:
<div class="purchase__module2__heading__tooltip">
Run Code Online (Sandbox Code Playgroud)
很明显,您嵌套得太深,导致您无法重用大部分代码。
鉴于您使用的名称,我猜您实际拥有的是:
.purchase-module)
.purchase-module__heading).tooltip)标记可能类似于:
<article class="purchase-module">
<h1 class="purchase-module__heading">
...heading text...
<span class="tooltip">...</span>
</h1>
</article>
Run Code Online (Sandbox Code Playgroud)
请注意现在激活工具提示如何只需要更改一个简短的类:
<span class="tooltip tooltip--active">...</span>
Run Code Online (Sandbox Code Playgroud)
这是 BEM 的理想选择。