Нет, в комбинаторах нет понятия приоритета.Тем не менее, существует понятие порядка элементов в сложном селекторе.
Любой сложный селектор может быть прочитан в любом направлении, которое имеет смысл для вас, но это не означает, что комбинаторы являются дистрибутивными * 1004.* или коммутативно , так как они указывают на связь между двумя элементами , например ancestor descendant
и previous + next
).Вот почему важен порядок элементов.
Однако, согласно Google , браузеры реализуют свои механизмы выбора так, что они оценивают сложные селекторы справа налево :
Движок [Gecko] оценивает каждое правило справа налево, начиная с крайнего правого селектора (называемого «ключом») и перемещаясь по каждому селектору, пока не найдет совпадение или не отклонит правило.
Статья Mozilla, Написание эффективного CSS для использования в пользовательском интерфейсе Mozilla содержит раздел, в котором описывается, как их движок CSS оценивает селекторы.Это зависит от XUL, но один и тот же механизм компоновки используется как для пользовательского интерфейса Firefox, так и для страниц, отображаемых в окне просмотра Firefox.
Как описано Google в приведенной выше цитате, ключевой переключатель простоссылается на самую правую простую последовательность селекторов, поэтому опять она справа налево :
Система стилей соответствует правилам, начиная с селектора клавиш, затем двигаясь влево(ищет каких-либо предков в селекторе правила).Пока поддерево селектора продолжает проверяться, система стилей продолжает двигаться влево, пока не будет соответствовать правилу или не выйдет из-за несоответствия.
Имейте в виду две вещи:
Они документированы на основе подробностей реализации ;в сущности, селектор - это селектор, и все, что он должен сделать, - это сопоставить элемент, который удовлетворяет определенному условию (размеченному компонентами селектора).В каком направлении он читается, зависит от реализации;как указано в другом ответе, спецификация ничего не говорит о том, какой порядок оценивать селектор или о приоритете комбинатора.
Ни в одной статье не говорится, что каждая простаяСелектор оценивается слева направо в его простой последовательности селектора (см. этот ответ , почему я считаю, что не дело).В статьях говорится, что механизм браузера будет оценивать последовательность клавиш выбора, чтобы выяснить, соответствует ли его рабочий элемент DOM, а затем, если это так, перейдет к следующей последовательности селектора, следуя комбинатору и проверитдля любых элементов, которые соответствуют этой последовательности, затем промойте и повторите до завершения или сбоя.
С учетом всего сказанного, если бы вы попросили меня прочитать селекторы и описать, чтоони выбирают простым английским языком, я бы тоже читал их справа налево (хотя я не уверен, имеет ли это отношение к деталям реализации!).
Итак, селектор:
a > b ~ c d
будет означать:
Выберите любой d
элемент
, который является потомком c
элемента
, который является родным или последующим, b
element
, который является дочерним (прямым потомком) элемента a
.