Почему ‘foo bar’ и ‘foo > bar’ имеют одинаковую специфику в CSS?

#css #css-selectors #css-specificity

#css #css-селекторы #специфичность css

Вопрос:

Мне любопытно, почему использование > или других комбинаторов не влияет на специфичность селекторов CSS, т.е. почему div span (соответствие промежутку где-то внутри div) и div > span (соответствие промежутку, который является непосредственным дочерним элементом div) считаются равными в отношении специфичности.

Я понимаю, что использование комбинаторов совершенно не имеет отношения к специфике, но мне интересно, есть ли для этого определенная причина.

Комментарии:

1. Я предполагаю, что это просто потому, что они такие же специфические, как и друг друга… «a span , который является потомком a div » и «a span , который является дочерним элементом a div «, а не что-то более конкретное, например «a span с некоторым именем класса, которое является дочерним элементом a div «.

2. Ну, вы могли бы возразить, что некоторый диапазон внутри div не так специфичен, как диапазон, который является непосредственным дочерним элементом div

3. Да, совершенно верно. Хороший вопрос!

4. Я могу утверждать, что » непосредственный потомок» излишне специфичен.

5. @Josh Stodola: Где в этом документе (или в последней рекомендуемой редакции , если на то пошло) объясняется, почему комбинаторы не добавляют специфичности?

Ответ №1:

На самом деле это было затронуто в списке рассылки рабочей группы, когда-то, в этой теме.

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

Наконец,

Хотя это могло быть так, это одна из немногих вещей в CSS2
которые были реализованы в течение многих лет и, следовательно, не будут 
изменение в CSS2.1.

«Если это не сломано, не исправляйте это». похоже, это был последний вызов.