使用 BEM 更改超链接颜色
Change hyperlink colour with BEM
我今天第一次尝试 BEM。
为什么我的 link 颜色与默认颜色没有区别?
真的应该是黄色的吧?
.nav-primary {
&__menu {
color:red;
}
&__menuitem {
color:green;
}
&__menuitem a {
color:yellow;
}
}
<div class="nav-primary">
<ul>
<li><a href="">why am I not a different colour?</a></li>
</ul>
</div>
您针对的是不同的元素,即。
.nav-primary {
&__menu {
color:red;
}
&__menuitem {
color:green;
}
&__menuitem a {
color:yellow;
}
}
将编译为:
.nav-primary__menu { color: red; }
.nav-primary__menuitem { color: green; }
.nav-primary__menuitem a { color:yellow; }
这与您 html 中的任何元素都不对应。
我想您需要将 nav-primary__menuitem
class 添加到您的 "element",在您的情况下这将是一个列表项,因此:
<div class="nav-primary">
<ul>
<li class="nav-primary__menuitem"><a href="">why am I not a different colour?</a></li>
</ul>
</div>
只有这样,您的最后一条规则才会适用于您的 link。
但是要对您的代码进行 BEM 化,您需要确定什么是块,以及 html 结构中该块的元素是什么。因此,在您的代码中,您可能还想将 class 添加到 link 元素。如果您希望块成为 nav-primary
元素,请在 link 上也使用即 .nav-primary__menulink
class:
为什么我不是不同的颜色?
那么您的 CSS/SASS/LESS 将看起来:
.nav-primary {
&__menu {
color:red;
}
&__menuitem {
color:green;
}
&__menulink {
color:yellow;
}
}
根据 BEM 文档,我将执行以下操作:
.nav-primary {
&__menu {
color:red;
}
&__menuitem {
color:green;
}
&__menuitem a {
color:yellow;
}
}
然后将您的 html 更改为:
<div class="nav-primary">
<ul>
<li class="nav-primary__menuitem"><a href="">why am I not a different colour?</a></li>
</ul>
</div>
你可以在这里考虑更多的模块化,所以你有一个包装器 nav-primary
和一个高度可重用的模块 list
。而且你不应该通过 Tagname 定位 a
,因为它会极大地减慢你的 css。
<div class="nav-primary">
<ul class="list list--plain list--nav-primary">
<li class="list__item [list__item--nav-item or nav-primary__item]">
<a class="[list__item-link or nav-primary__item-link]" href="">why am I not a different colour?</a>
</li>
</ul>
</div>
然后修改列表项应该通过修改器完成,例如 list__item--nav-important
红色的。
我今天第一次尝试 BEM。
为什么我的 link 颜色与默认颜色没有区别?
真的应该是黄色的吧?
.nav-primary {
&__menu {
color:red;
}
&__menuitem {
color:green;
}
&__menuitem a {
color:yellow;
}
}
<div class="nav-primary">
<ul>
<li><a href="">why am I not a different colour?</a></li>
</ul>
</div>
您针对的是不同的元素,即。
.nav-primary {
&__menu {
color:red;
}
&__menuitem {
color:green;
}
&__menuitem a {
color:yellow;
}
}
将编译为:
.nav-primary__menu { color: red; }
.nav-primary__menuitem { color: green; }
.nav-primary__menuitem a { color:yellow; }
这与您 html 中的任何元素都不对应。
我想您需要将 nav-primary__menuitem
class 添加到您的 "element",在您的情况下这将是一个列表项,因此:
<div class="nav-primary">
<ul>
<li class="nav-primary__menuitem"><a href="">why am I not a different colour?</a></li>
</ul>
</div>
只有这样,您的最后一条规则才会适用于您的 link。
但是要对您的代码进行 BEM 化,您需要确定什么是块,以及 html 结构中该块的元素是什么。因此,在您的代码中,您可能还想将 class 添加到 link 元素。如果您希望块成为 nav-primary
元素,请在 link 上也使用即 .nav-primary__menulink
class:
-
为什么我不是不同的颜色?
那么您的 CSS/SASS/LESS 将看起来:
.nav-primary {
&__menu {
color:red;
}
&__menuitem {
color:green;
}
&__menulink {
color:yellow;
}
}
根据 BEM 文档,我将执行以下操作:
.nav-primary {
&__menu {
color:red;
}
&__menuitem {
color:green;
}
&__menuitem a {
color:yellow;
}
}
然后将您的 html 更改为:
<div class="nav-primary">
<ul>
<li class="nav-primary__menuitem"><a href="">why am I not a different colour?</a></li>
</ul>
</div>
你可以在这里考虑更多的模块化,所以你有一个包装器 nav-primary
和一个高度可重用的模块 list
。而且你不应该通过 Tagname 定位 a
,因为它会极大地减慢你的 css。
<div class="nav-primary">
<ul class="list list--plain list--nav-primary">
<li class="list__item [list__item--nav-item or nav-primary__item]">
<a class="[list__item-link or nav-primary__item-link]" href="">why am I not a different colour?</a>
</li>
</ul>
</div>
然后修改列表项应该通过修改器完成,例如 list__item--nav-important
红色的。