Предполагая, что оба они относятся к одному элементу, должны ли эти два быть рассчитаны как (0011) и, следовательно, должны быть упорядочены в соответствии с порядком появления? Или селекторы внутри псевдокласса :not()
следует вычислять отдельно в зависимости от того, какой из них соответствует второму шагу, чтобы определить тот, который имеет приоритет над другим?
Если вы реализуете селекторы 3, они не должны вообще учитываются. Как уже упоминалось, оба ваших селектора недействительны в соответствии с этой спецификацией, потому что она определяет только :not()
для одновременного приема одного простого селектора.
Если вы расширите их, чтобы они проверялись (следуя инструкциям/примерам, приведенным здесь), то их особенности будут рассчитаны следующим образом:
/* 2 attributes, 1 class, 1 type -> specificity = 0-3-1 */
input:not([type="text"]):not([type="password"]):not(.someClass)
/*
* 1 ID, 1 type -> specificity = 1-0-1
* 1 attribute, 1 type -> specificity = 0-1-1
*/
input:not(#someId), input:not([type="text"])
Потому что Selectors 3 говорит:
Селекторы внутри псевдокласса отрицания учитываются как любые другие, но само отрицание не считается псевдоклассом.
Также в ответ на ваш комментарий:
Правда, по спецификациям только простые селекторы. Но некоторые браузеры поддерживают несколько. Некоторые из них не делают, а некоторые отказались от них позже. Кроме того, вы можете написать то же правило даже с простыми селекторами, такими как этот: input:not([type="text"]):not([type="password"]):not(.someClass)
что лучше и работает также. Означает ли это, что он должен рассчитываться как 0031? Как насчет тех, которые поддерживают несколько, как они вычисляют?
Единственный браузер, который когда-либо поддерживал множественные селекторы в :not()
, — это Firefox 3.0, и он делает это из-за ошибки. Селекторы 3 никогда не позволяли :not()
содержать несколько селекторов — это введено только в Селекторы 4, для которых расчет специфичности еще даже не определен четко1, так что даже если вы пытаетесь внедрить Селекторы 4 (которые я серьезно сомневаюсь, что вы есть), вы застрянете.
Мне непонятно, как Firefox 3.0 реализовал специфичность со своей версией селектора :not()
, и у меня нет его копии для тестирования, но я думаю, можно с уверенностью предположить, что это больше не имеет значения, поскольку в любом случае это никогда не было предполагаемым поведением. Хорошо, поэтому я взял Firefox 3.0 beta 1, 3.0.0, 3.0.18 и 3.1 beta 1, и ни одна из них вообще не воспроизводит это поведение. Итак, у вас есть это.
1 Обратите внимание, что и в текущем ED 2013 г., и в FPWD 2011 г. говорится, что специфичность :not()
равна специфичности его наиболее конкретного аргумента, но это может измениться в будущем.< /под>
person
BoltClock
schedule
26.04.2013
not
является частью спецификаций CSS3, и многие браузеры поддерживают несколько селекторов в качестве аргумента для него, если это то, на что вы ссылаетесь, как на недействительное. - person tria   schedule 08.04.2013:not(X)
может принимать только простые селекторы. Вам придется расширить его, чтобы он выглядел так:input:not([type="text"]), input:not([type="password"]), input:not(.someClass) {...}
иinput:not(#someId):not([type="text"]) {...}
. - person thgaskell   schedule 08.04.2013input:not([type="text"]):not([type="password"]):not(.someClass)
что лучше и работает также. Означает ли это, что он должен рассчитываться как 0031? Как насчет тех, которые поддерживают несколько, как они вычисляют? - person tria   schedule 08.04.2013input:not(#someId), input:not([type="text"])
- см. мой ответ, который я только что опубликовал ниже, а также ответ здесь. - person BoltClock   schedule 26.04.2013