你有一个XY 问题。您需要覆盖 的颜色a
,但不是要求最佳方式来做到这一点,而是发明了一些奇怪的结构并询问为什么它不起作用。
问题是您不需要放入a
内部.foo
来覆盖颜色。Ana
不是直接从自己的属性中获取颜色.foo
,而是从a
自己的color
属性中获取颜色。
默认color
设置为inherit
,它自然地从父级继承。因此,要覆盖a
的颜色,您可以将其color
属性从更改inherit
为您想要的任何内容。为此,您无需将 parent 放入选择器!
UPD:由于cimmanon在下面纠正了我,颜色a
不是从父级继承的,而是使用自己的默认值。
所以一个最佳的解决方案是这样的:
.foo {
color: blue; }
a {
color: red;
.foo.bar & {
color: green; } }
此外,您想要完全覆盖 for 的事实.foo.bar a
表明您将事情复杂化了。
仅.foo.bar a
当您需要处理四种不同的情况时才需要: a
、.foo a
和。你真的有那么多不同的链接颜色吗?为什么?.bar a
.foo.bar a
当然,您可以重构您的 HTML 结构,使其更具语义化,并对这样的代码感到满意:
a {
color: red; }
#header {
color: blue; }
.cart-item
& a {
color: green; } }
使用此代码,链接只能是两种不同的颜色:绿色表示购物车项目,红色表示其他所有项目。
如果您确实有充分的理由拥有多种颜色,请考虑使用 mixin:
@mixin link-with-color($color: red) {
a {
color: $color; } }
#header {
@include link-with-color(blue); }
.cart-item {
@include link-with-color(green); }