Мне очень сложно понять, почему следующий код отображается синим цветом в Safari, но красным цветом в Chrome и Firefox.
em:not(div) {
color: red
}
em:not(p div) {
color: blue
}
<p>
<em>FOO</em>
</p>
Мне очень сложно понять, почему следующий код отображается синим цветом в Safari, но красным цветом в Chrome и Firefox.
em:not(div) {
color: red
}
em:not(p div) {
color: blue
}
<p>
<em>FOO</em>
</p>
Safari недавно отправила версию 4 уровня :not()
, которая позволяет создавать сложные селектора для аргументов, помещая его на уровне с нестандартной реализацией jQuery. См. примечания к выпуску. текущее воплощение :not()
позволяет только один простой селектор для аргумента, поэтому сложный селектор типа p div
не будет работать сегодня браузеров по дизайну.
Комплексный селектор представляет собой выражение, состоящее из одного или нескольких составных селекторов, разделенных комбинаторами, такими как потомок, >
, ~
и +
. Составной селектор представляет собой последовательность одного или нескольких простых селекторов. div
представляет собой составной селектор, состоящий из одного простого селектора, а p div
представляет собой сложный селектор, состоящий из двух составных селекторов (каждый из которых состоит из одного простого селектора), разделенных комбинатором-потомком.
В настоящее время неизвестно, когда это приземлится в других браузерах, хотя маловероятно, что новая спецификация :not()
изменится на данный момент - определение текущего уровня 4 не имеет проблем, и если исходный штамм WebKit достаточно смелый, чтобы реализовать его, тогда это действительно только вопрос времени, прежде чем он пробивается в другие штаммы (включая Blink).
После почти пяти изнурительных лет ожидания со времени FPWD мы могли бы наконец наконец увидеть CR селекторов-4 в ближайшее время. Подумайте, что я закачан.
Из spec:
Псевдокласс класса отрицания: not (X) является функциональным обозначением, принимающим простой селектор (за исключением самого псевдокласса отрицания) в качестве аргумента. Он представляет элемент, который не представлен его аргументом.
и в другом месте в спецификации:
Простым селектором является либо селектор типов, универсальный селектор, селектор атрибутов, селектор классов, селектор идентификаторов, либо псевдокласс.
Поведение Chrome и Firefox верное. Комбинатор потомков может не отображаться в простом селекторе (и, следовательно, a: не псевдокласс)
Это может измениться в Селекторах Уровня 4. Текущий проект позволяет более сложные селектора. Кажется, вы столкнулись с экспериментальной реализацией.