Правила более низкой специфичности CSS переопределяют правила более высокой специфичности

У меня есть этот простой код CSS:

p.child-class {
    color: red;
}

.parent-class p {
    color: green;
}

HTML:

<div class="parent-class">
    <p class="child-class"></div>
</div>

Селектор .parent-class применяется вместо селектора более высокой специфичности p.child-class. Почему?
Вот скрипка.

ИЗМЕНИТЬ

Я понимаю, что оба имеют одинаковую специфику. В таком случае, как я могу повысить специфичность дочернего класса, если я не могу редактировать код родительского класса?


person Yoav Kadosh    schedule 28.07.2013    source источник
comment
Не удается воспроизвести: jsfiddle.net/9MmcB. Вам нужно опубликовать свой HTML-код и объяснить, что вы ожидаете. произойдет.   -  person Wesley Murch    schedule 29.07.2013
comment
Если вы измените порядок правил, он может быть воспроизведен, так в каком порядке эти правила применяются к странице?   -  person Andy G    schedule 29.07.2013


Ответы (4)


Селекторы .parent-class p и p.child-class имеют точно такую ​​же специфику CSS, оба имеют 1 селектор тега и 1 селектор класса. Селектор, который появляется позже в коде, будет применяться.

person Ilya Streltsyn    schedule 28.07.2013
comment
Как бы я увеличил специфичность ребенка тогда? Я не могу коснуться родительского класса - person Yoav Kadosh; 29.07.2013
comment
В качестве своего рода хака (полностью действительно) вы можете указать имя класса дважды: p.child-class.child-class. Это не изменит значение селектора, но повысит его формальную специфичность. - person Ilya Streltsyn; 29.07.2013
comment
Это прекрасно работает ... если никто не найдет более элегантного решения, я приму ваш ответ! - person Yoav Kadosh; 29.07.2013

Оба ваши правила имеют разное значение

.parent-class p

это указывает правило для p, которое находится внутри контейнера, имеющего класс .parent-class

p.child-class

это указывает правило для p, которое имеет класс child-class

Пример JsFiddle

person Sachin    schedule 28.07.2013

Как уже упоминалось, они имеют одинаковую специфику, порядок правил имеет значение.

Добавление .parent-class изменит специфичность

.parent-class p.child-class {

и тогда порядок не будет иметь значения.

person Andy G    schedule 28.07.2013
comment
Что делать, если я не могу редактировать код parent-class? Как бы я увеличил специфичность ребенка тогда? - person Yoav Kadosh; 29.07.2013
comment
Мой ответ заключается в повышении специфичности правил css, которые будут применяться к child-class. Если вы можете редактировать HTML, вы можете, конечно, добавить совершенно новый класс или идентификатор. - person Andy G; 29.07.2013

Вы можете использовать !important

При использовании !important — правильный выбор

person Jawad    schedule 28.07.2013