2013-10-01 2 views
15

Какой селектор сильнее?Какой CSS-селектор сильнее?

#nav li.current 

или

div #nav li 

и второй

a.test 

или

.test .test 

Каков ответ?

+13

Первый «1,1,1», тогда как второй - «1,0,2», поэтому первый сильнее. Во второй части у вас есть «1,1» против «2,0», что делает вторую сильнее. –

+3

Лучше задать вопрос, как определить силу селектора, тогда вы можете рассчитать его самостоятельно. –

+3

Попробуйте сами, воспользовавшись калькулятором спецификаций http://specificity.keegan.st/ – pwdst

ответ

35

От spec:

Специфичность селектора вычисляется следующим образом:

  • подсчитать количество ID селекторов в селекторе (= а)
  • подсчитать количество селекторов класса , селекторов атрибутов и псевдоклассов в селекторе (= b)
  • подсчитывает количество селекторов и псевдоэлементов типа в селекторе (= c)
  • игнорировать универсальный селектор

селекторов внутри отрицания псевдо-класса подсчитывают как и любой другой, но само отрицание не считается псевдо-класса.

Сочетание трех чисел a-b-c (в системе с большим основанием) дает специфику.

Примеры:

*    /* a=0 b=0 c=0 -> specificity = 0 */ 
LI    /* a=0 b=0 c=1 -> specificity = 1 */ 
UL LI   /* a=0 b=0 c=2 -> specificity = 2 */ 
UL OL+LI  /* a=0 b=0 c=3 -> specificity = 3 */ 
H1 + *[REL=up] /* a=0 b=1 c=1 -> specificity = 11 */ 
UL OL LI.red /* a=0 b=1 c=3 -> specificity = 13 */ 
LI.red.level /* a=0 b=2 c=1 -> specificity = 21 */ 
#x34y   /* a=1 b=0 c=0 -> specificity = 100 */ 
#s12:not(FOO) /* a=1 b=0 c=1 -> specificity = 101 */ 
+3

Хотя это не отвечает непосредственно на вопрос OP, оно предоставляет все инструменты, необходимые для их понимания и ответа. Upvoted. – pwdst

+7

@pwdst Я бы сказал, что это лучше, чем прямо отвечать на вопрос – Bill

+3

@pwdst Научить человека ловить рыбу ... –

9

Вы можете следовать следующим правилам для расчета селекторы точек.

Селектор тегов стоит 1 балл.

Селектор классов стоит 10 баллов.

Селектор ID стоит 100 баллов.

Встраиваемый стиль стоит 1000 баллов.

#nav li.current = 100 + 1 + 10 = 111

div #nav li = 1 + 100 + 1 = 102

a.test = 1 + 10 = 11

.test .test = 10 + 10 = 20

+1

Означает ли это, что вы можете перезаписать встроенный стиль, используя '#foo #bar #baz #quux # foo2 # bar2 # baz2 # quux2 # foo3 # bar3 # baz3'? – jcubic

+0

Не работает http://jsfiddle.net/QNztu/. Встроенный стиль не перезаписывается. – jcubic

+0

@ jcubic AFAIK, css селекция работает справа налево. поэтому, если первый выбор - это идентификатор, тогда он ** не ** ищет следующий выбор, потому что идентификаторы должны быть уникальными. Итак, точки для ваших вышеперечисленных селекторов css - это просто '100'. –

Смежные вопросы