以编程方式设置 CSS 选择器特异性
Programmatically set CSS selector specificity
是否可以设置 CSS 选择器的特异性,而不是仅由包含它的选择器的计数决定?即,如果我有两个这样的选择器(显示计算的特异性):
UL OL LI /* a=0 b=0 c=3 -> specificity = 3 */
UL OL LI.red /* a=0 b=1 c=3 -> specificity = 13 */
(示例来自 https://www.w3.org/TR/selectors/#specificity)
有什么方法可以将第一个示例更改为这样,以便均衡两个选择器的特异性并且无需添加任意 class 选择器来这样做:
UL OL LI /* a=0 b=1 c=3 -> specificity = 13 */
-或-
UL OL LI.red /* a=0 b=0 c=3 -> specificity = 3 */
选择器的特殊性仅由其组件简单选择器(和伪元素,如果有的话)决定。您不能在不改变选择器本身的情况下改变选择器的特殊性。
如果您担心更改选择器(或其潜在匹配集)的含义,可以添加某些虚拟简单选择器,同时保持语义完整。在您的示例中,您可以增加 UL OL LI
的特异性以匹配 UL OL LI.red
而无需通过在选择器(带有后代组合器)或将 :nth-child(n)
添加到三种类型选择器中的任何 一个 - 两者都是保证匹配,伪 classes 同样特定于 class 选择器。
另请参阅我对以下问题的回答以获得更多选项:
- CSS class repetition to increase specificity
没有类似的方法来减少选择器的特异性,但是,无论是通过编程还是通过改变选择器(当然除了删除冗余选择器,如上述不合格的:root
、:nth-child(n)
或重复的 type/class 选择器)。
是否可以设置 CSS 选择器的特异性,而不是仅由包含它的选择器的计数决定?即,如果我有两个这样的选择器(显示计算的特异性):
UL OL LI /* a=0 b=0 c=3 -> specificity = 3 */
UL OL LI.red /* a=0 b=1 c=3 -> specificity = 13 */
(示例来自 https://www.w3.org/TR/selectors/#specificity)
有什么方法可以将第一个示例更改为这样,以便均衡两个选择器的特异性并且无需添加任意 class 选择器来这样做:
UL OL LI /* a=0 b=1 c=3 -> specificity = 13 */
-或-
UL OL LI.red /* a=0 b=0 c=3 -> specificity = 3 */
选择器的特殊性仅由其组件简单选择器(和伪元素,如果有的话)决定。您不能在不改变选择器本身的情况下改变选择器的特殊性。
如果您担心更改选择器(或其潜在匹配集)的含义,可以添加某些虚拟简单选择器,同时保持语义完整。在您的示例中,您可以增加 UL OL LI
的特异性以匹配 UL OL LI.red
而无需通过在选择器(带有后代组合器)或将 :nth-child(n)
添加到三种类型选择器中的任何 一个 - 两者都是保证匹配,伪 classes 同样特定于 class 选择器。
另请参阅我对以下问题的回答以获得更多选项:
- CSS class repetition to increase specificity
没有类似的方法来减少选择器的特异性,但是,无论是通过编程还是通过改变选择器(当然除了删除冗余选择器,如上述不合格的:root
、:nth-child(n)
或重复的 type/class 选择器)。