提高CSS特异性的最有效字符方式是什么?

问题描述 投票:13回答:3

如果我想增加规则的CSS特异性,我倾向于在html的前面加上前缀,但我想知道是否还有更简洁的方法?

(这似乎是一个琐碎的问题,但是在我的样式表定义响应网格的过程中,将特异性前缀减少单个字符将节省数百个字节)

html css optimization css-selectors css-specificity
3个回答
27
投票

这实际上取决于您要实现的目标。一种增加特异性的廉价方法是简单地重复选择器。例如,如果这是您的标记:

<figure id="myId" class="myClass"></figure>

这是您的CSS:

#myId.myClass { color:red; font-weight:bold; }      /* Specificity: 110 */

您可以重复classid选择器,而无需完全修改标记:

#myId.myClass.myClass { color:green; }              /* Specificity: 120 */
#myId#myId { font-weight:normal; }                  /* Specificity: 200 */

JSFiddle demo

这是完全有效的,正如W3C选择器3级建议书在其Calculating Specificity section中所述:

注意:允许同一简单选择器重复出现,并且确实增加了特异性。


7
投票

最低字节,但具体多少?

在我看来,对于选择器,在大多数情况下,您不能获得少于两个字符加空格的字符,特别是如果我们正在谈论添加特定性的“全局”用法(自从您使用[ C0])。因此,要保存在CSS上,您需要在html上使用一个字符ID。我想说一个id(而不是一个类),因为您想保持其唯一性。因此,您可以在html:

中实现
html

然后允许在CSS中添加最短的选择器:

<html id="A">

然后使用詹姆士·唐纳利(James Donnelly)所说的(顺便说一句,我从来不知道相同选择器的重复),您可以用最少的字符不断增加越来越多的特异性,例如:

#A .whateverYour [OriginalSelector] string .was {}

免责声明

通过我的回答,我不建议这不一定是做CSS的好方法,也不是处理特异性问题的好方法。但我确实相信,在#A#A#A .whateverYour [OriginalSelector] string .was {} 元素上添加一个短字符ID是一个字节,可以用来增加任何选择器的特异性的最少字节数,这在这里回答了问题。


0
投票

我已经看到postcss库使用html了,它很短,将特异性提高了一个,并且基本上可以用于所有内容。不适用于ie8或以下版本,但是现在是2020年

© www.soinside.com 2019 - 2024. All rights reserved.