使用&符号(&)与类型选择器组合使用Sass

McS*_*man 87 sass css-selectors

我在Sass筑巢时遇到了麻烦.说我有以下HTML:

<p href="#" class="item">Text</p>
<p href="#" class="item">Text</p>
<a href="#" class="item">Link</a>
Run Code Online (Sandbox Code Playgroud)

当我尝试在下面嵌套我的样式时,我得到一个编译错误:

.item {
    color: black;
    a& {
        color:blue;
   }
}
Run Code Online (Sandbox Code Playgroud)

当父选择器是同一元素的一部分时,如何在父选择器之前引用类型选择器?

Bla*_*ine 145

正如库马尔指出的那样,自萨斯以来,这已经成为可能了3.3.0.rc.1 (Maptastic Maple).

@ at-root指令导致在文档的根目录下发出一个或多个规则,而不是嵌套在其父选择器下面.

我们可以将@at-root指令插值#{}结合起来,以达到预期的结果.

上海社会科学院

.item {
    color: black;
    @at-root {
        a#{&} {
            color:blue;
        }
    }
}

// Can also be written like this.
.item {
    color: black;
    @at-root a#{&} {
        color:blue;
    }
}
Run Code Online (Sandbox Code Playgroud)

输出CSS

.item {
    color: black;
}
a.item {
    color: blue;
}
Run Code Online (Sandbox Code Playgroud)

  • 这应该是这个问题的解决方案. (3认同)
  • 我有一个[稍微难一点的版本](/sf/ask/3319256041/)来解决,类似,但对于_multiple_类,必须附加到_tag_ - 有人吗? (2认同)

Ben*_*ing 26

@at-root如果您打算将最近的选择器扩展到链上,则-only方法将无法解决问题.举个例子:

#id > .element {
    @at-root div#{&} {
        color: blue;
    }
}
Run Code Online (Sandbox Code Playgroud)

将编译为:

div#id > .element {
    color: blue;
}
Run Code Online (Sandbox Code Playgroud)

如果您需要加入标记.element而不是#id

Sass中有一个函数selector-unify()可以解决这个问题.使用@at-root它可以定位.element.

#id > .element {
    @at-root #{selector-unify(&, div)} {
        color: blue;
    }
}
Run Code Online (Sandbox Code Playgroud)

将编译为:

#id > div.element {
    color: blue;
}
Run Code Online (Sandbox Code Playgroud)


imj*_*red 6

对于初学者来说,(在写这个答案的时候)没有使用选择器&的 sass语法.如果你要做那样的事情,你需要在选择器和&符号之间留一个空格.例如:

.item {
    .helper & {

    }
}

// compiles to:
.helper .item {

}
Run Code Online (Sandbox Code Playgroud)

使用&符号的另一种方式可能就是你(错误地)寻找:

.item {
    &.helper {

    }
}

// compiles to:
.item.helper {

}
Run Code Online (Sandbox Code Playgroud)

这允许您使用其他类,ID,伪选择器等扩展选择器.不幸的是,对于您的情况,这理论上会编译为类似.itema的东西,这显然不起作用.

您可能只想重新思考如何编写CSS.是否有可以使用的父元素?

<div class="item">
    <p>text</p>
    <p>text</p>
    <a href="#">a link</a>
</div>
Run Code Online (Sandbox Code Playgroud)

这样,您可以通过以下方式轻松编写SASS:

.item {
    p {
        // paragraph styles here
    }
    a {
        // anchor styles here
    }
}
Run Code Online (Sandbox Code Playgroud)

(旁注:你应该看看你的HTML.你是混合单引号和双引号并将href属性放在p标签上.)


Vah*_*hid 5

AFAIK 如果您想同时为类和标签组合与号,则需要使用以下语法:

.c1 {
  @at-root h1#{&},
    h2#{&}
    &.c2, {
    color: #aaa;
  }
}
Run Code Online (Sandbox Code Playgroud)

将编译为

h1.c1,
h2.c1,
.c1.c2 {
  color: #aaa;
}
Run Code Online (Sandbox Code Playgroud)

其他用途(例如使用之前的类@at-root或使用多个@at-roots)将导致错误。

希望它会很有用