好的,假设我有以下传统的CSS
.social-media { /* ... */ }
.social-media .twitter { /* ... */ }
.social-media .facebook { /* ... */ }
ul.social-media { /* ... */ }
所以,我尝试用SCSS这样做:
.social-media {
/* ... */
.twitter {
/* ... */
}
.facebook {
/* ... */
}
// Here's the problem:
ul& {
/* ... */
}
}
最后一部分不起作用,因为&符号似乎只出现在选择器的开头。有解决方法吗?
答案 0 :(得分:24)
你唯一能做的就是反转你的嵌套或者根本不嵌套: .social-media {
/* ... */
.twitter {
/* ... */
}
.facebook {
/* ... */
}
}
ul.social-media {
/* ... */
}
您可以使用插值和@at-root
指令
.social-media {
/* ... */
// Here's the solution:
@at-root ul#{&} {
/* ... */
}
}
但是,如果您的父选择器包含多个选择器,则需要使用selector-append
代替:
.social-media, .doodads {
/* ... */
// Here's the solution:
@at-root #{selector-append(ul, &)} {
/* ... */
}
}
输出:
.social-media, .doodads {
/* ... */
}
ul.social-media, ul.doodads {
/* ... */
}