我可以在SASS中使用符号AND引用父类的特定标记吗?
我有一个类我可以在SASS中使用符号AND引用父类的特定标记吗?,sass,Sass,我有一个类semantic,我将其应用于许多不同的元素。根据类应用于哪个html标记,我希望它应用不同的样式。我就是这样做的: .semantic { &ul { padding: 0; margin: 0; } &p { margin: 0; } } 这不管用。我当然可以这样写,但不会很“干”: 这可能吗 编辑:为了澄清,下面是我的HTML的示例: <ul class='semantic'&
semantic
,我将其应用于许多不同的元素。根据类应用于哪个html标记,我希望它应用不同的样式。我就是这样做的:
.semantic {
&ul {
padding: 0;
margin: 0;
}
&p {
margin: 0;
}
}
这不管用。我当然可以这样写,但不会很“干”:
这可能吗
编辑:为了澄清,下面是我的HTML的示例:
<ul class='semantic'>
<li>An Item</li>
</ul>
<p class='semantic'>This text is semantically a paragraph, but should not be displayed as such</p>
- 项目
此文本在语义上是一个段落,但不应如此显示
理论上,你想要的是:
.semantic {
ul& {
padding: 0;
margin: 0;
}
p& {
margin: 0;
}
}
这是不可能的,因为&
必须在第一位。你只需要面对它不干燥的事实,用手把它写出来:
ul.semantic {
padding: 0;
margin: 0;
}
p.semantic {
margin: 0;
}
从Sass 3.3或3.4开始,可以使用以下语法:
.semantic {
ul#{&} {
padding: 0;
margin: 0;
}
p#{&} {
margin: 0;
}
}
由于CSS的特殊性是如何工作的,您可以这样做:
.semantic {
margin: 0;
}
ul.semantic {
padding: 0;
}
在HTML中,p.semantic
和ul.semantic
将具有边距:0代码>并且只有ul。语义将有填充:0代码>
更少的Sass,更少的CSS。干的
与您的示例不同,如果真实站点上的元素的共同点更少,您可能需要重新思考为什么它们需要具有相同的类名。在Sass 3.4上:
.semantic {
@at-root {
ul#{&} {
padding: 0;
margin: 0;
}
p#{&} {
margin: 0;
}
}
}
生成:
ul.semantic {
padding: 0;
margin: 0;
}
p.semantic {
margin: 0;
}
将块移动到顶层。这有多种用途(请参见链接),但在这里它被用来保持利用&
语法,而不意味着规则是.semantic
的子选择器。我试图避免的部分是必须为每个规则指定.semantic
。SASS的最大优点之一是它的嵌套。我试图避免多次指定类名(以保持干燥)。没有必要先指定&
。唯一严格的要求是&
必须用空格或那些特殊的css选择器字符~
,
等包围。这对我不适用。在Sass 3.4.16中,您的wxample生成.semantic ul.semantic{padding:0;margin:0;}。semantic p.semantic{margin:0;}
这在Sass 3.4.21中不起作用。相反,@jruz的解决方案工作得很好。谢谢你。这对我帮助很大,效果也很好:)聪明。我从来都不知道你能做到这一点,但非常方便。你能解释一下这是如何/为什么工作的吗?这有两个类吗?例如:.semantic、.semantic2{}
这应该是公认的答案相关信息:不幸的是,它不会与嵌套样式一起工作,因为它将直接应用于根元素(使用@at root
特殊选择器时有意义),而不是父元素()。对于记录,@at root-ul{&}
(在一行上)致力于
ul.semantic {
padding: 0;
margin: 0;
}
p.semantic {
margin: 0;
}