在关联规则集内部没有简单的方法来限定选择器。限定是指在类名前面添加一个元素名称(例如 a
),这样规则集就针对元素选择器和类选择器的组合(例如 a.btn
)变得更具体。
截至目前,最佳(也是唯一有效的)方法如下
.button {
@at-root a#{&} {
// Specific styles for `a.button`
}
}
哇,这绝对不优雅,是吧?理想情况下,你可能想将这种可怕的语法隐藏在 Mixin 后面,这样你就可以保持一个干净友好的 API,尤其是如果你团队中有新手开发者。
当然,这样做非常简单
/// Since the current way to qualify a class from within its ruleset is quite
/// ugly, here is a mixin providing a friendly API to do so.
/// @author Kitty Giraudel
/// @param {String} $element-selector - Element selector
@mixin qualify($element-selector) {
@at-root #{$element-selector + &} {
@content;
}
}
现在,重写我们之前的代码片段
.button {
@include qualify(a) {
// Specific styles for `a.button`
}
}
好多了,对吧?但是,qualify
对没有经验的 Sass 玩家来说可能有点棘手。你可以为一个更具描述性的名称提供别名,例如 when-is
。
/// @alias qualify
@mixin when-is($args...) {
@include qualify($args...) {
@content;
}
}
最后一个例子
.button {
border: none;
// Qualify `.button` with `button`
@include qualify(button) {
-webkit-appearance: none;
}
// Qualify `.button` with `a`
@include when-is(a) {
text-decoration: none;
}
}
你不能在 a 后面使用尾部 & 符号吗?
你是说像这样吗?
这将生成
如果你是指
a&
,它会产生错误它可能会在某个时候被修复,但目前它不起作用。
你应该结束写这篇文章的人的实习期。
不要使用 Mixin,使用前两位朋友提到的尾部 & 符号。
CSS Tricks 过去发布过严肃的文章。
我的天,我今天早上没睡醒,哈哈
丢弃我这个邪恶的帖子。它是由我大脑的困倦部分写成的。
顺便说一下,我就是所谓的“实习生”。:)
现在是 2017 年了,这个问题还没有解决。但感谢你的信息,节省了我很多麻烦!
不幸的是,当你有选择器列表时,Mixin 不会起作用
这将产生以下输出
使用 selector.append() 可以解决这个问题