Подтвердить что ты не робот

Повторение CSS-класса для повышения специфичности

В соответствии с документами CSS: http://www.w3.org/TR/CSS21/cascade.html#specificity

Специфика определяется (среди прочего) количеством атрибутов и псевдоклассами в селекторе.

Итак, мой вопрос: возможно ли увеличить специфичность, повторяя одно и то же имя класса снова и снова?

Например:

будет

.qtxt.qtxt.qtxt.qtxt.qtxt
{
}

имеют более высокую специфичность, чем

.qtxt.lalgn
{
}

или

.lalgn .qtxt//(space added to create child selector)
{
}

?

4b9b3361

Ответ 1

Да, это возможно и намеренно. Хотя это не упоминается в спецификации CSS2, оно явно упоминается в Спецификации Selectors 3:

Примечание: Разрешены повторяющиеся вхождения [sic] одного и того же простого селектора и повышают специфичность.

Поэтому браузеры должны повышать специфичность при появлении повторных простых селекторов, если селектор действителен и применим. Это относится не только к повторяющимся классам, но также относится к повторным идентификаторам, атрибутам и псевдоклассам.

Учитывая ваш код, .qtxt.qtxt.qtxt.qtxt.qtxt будет иметь самую высокую специфичность. Два других селектора одинаково специфичны; Комбинаторы не имеют никакого отношения к вычислениям специфичности:

/* 5 classes -> specificity = 0-5-0 */
.qtxt.qtxt.qtxt.qtxt.qtxt

/* 2 classes -> specificity = 0-2-0 */
.qtxt.lalgn

/* 2 classes -> specificity = 0-2-0 */
.lalgn .qtxt

Кроме того, пространство вашего последнего селектора - это комбинатор потомков; дочерний комбинатор >.

Ответ 2

.qtxt.qtxt.qtxt будет иметь самую высокую специфичность...

http://jsfiddle.net/nXBTp/1/

Однако это только в том случае, если вы повторяете имя класса больше раз, чем любой другой селектор, например:

http://jsfiddle.net/nXBTp/2/

Ответ 3

Вам не нужно взломать специфику, подобную этой... если вам нужно заставить значение, используйте !important.