【发布时间】:2016-03-29 19:19:35
【问题描述】:
让我们来看看这三个选择器,从高到低排序:
.special-section p { }
.weird-font { }
p { }
许多 CSS 专家建议不要像在第一个选择器 .special-section p 中那样进行嵌套,因为它的特异性足够高,以至于您无法使用像 .weird-font 这样的简单类来覆盖它。我想找到一种方法来仍然像.special-section p 那样实现嵌套,但不增加特异性。像这样的:
.weird-font { }
.special-section p /* with hack to decrease specificity */ { }
p { }
用例:
使用像p 这样的简单选择器为排版和文档范围应用默认值是非常安全的。但是,我想更改特定部分的这些默认值,类似于.special-section p,而不必使用黑客来增加选择器的特异性,例如.weird-font。我宁愿使用 hack 来降低 .special-section p 的特异性,也不愿使用 hack 来增加 .weird-font 的特异性。有没有办法做到这一点?
【问题讨论】:
-
!important的问题是只有一层覆盖。如果你制作了一个更具体的选择器,你可以用一个更具体的选择器再次覆盖它。使用!important后,你别无选择。 -
添加类然后由它们选择不是一个技巧;这是选择元素的定义方式。如果您有一些示例标记,则用例可能会更清楚。
-
@TylerH:这不是 OP 所指的。您真的不需要示例标记来推断在示例 CSS 中,p 和 .weird-font 指的是同一个元素。
-
@BoltClock 我不同意;我完全不清楚 OP 的标记会是什么样子。即使通过巨大的努力,我们可以做出一个假设(所有答案都是如此),但通过一个简单的标记示例,它会变得更清晰、更容易理解(因此对其他人有帮助)。此外,如果我们知道标记,我们可以提供一种潜在的替代方法来实现 OP 的目标。例如,接受的答案与 OP 想要的完全相反(它在他想要避免增加特异性的地方增加了特异性)。
-
@TylerH:我不否认总有改进的余地,但考虑到 only 的情况,做出这样的假设并不需要“很大的努力”当两个选择器都引用同一个元素时,甚至适用于特殊性。接受的答案和我自己的建议都建议增加而不是减少它,因为你 can't 减少它,并且对于 OP 的问题没有任何其他解决方案不依赖于标记(而且,显然,OP 对这样的解决方案也不是很感兴趣,这也是 fine)。
标签: css css-selectors css-specificity