IE, похоже, обрабатывает все неизвестные элементы как элементы одного и того же типа. Если вы удалите селектор типа bar
, вы увидите, что IE соответствует элементу baz
(и только ему):
.foo :last-of-type {
background-color: red;
}
<div class="foo">
<bar>bar</bar>
<bar>bar</bar>
<bar>bar</bar>
<span>span</span>
</div>
<div class="foo">
<bar>bar</bar>
<bar>bar</bar>
<bar>bar</bar>
<baz>baz</baz>
</div>
Такое поведение также наблюдалось в Microsoft Edge.
Было ли это признано ошибкой со стороны Microsoft? Что ж, я не нашел никаких отчетов об ошибках на этот счет. Это нарушение спецификации? Это зависит от того, считаете ли вы неизвестные элементы одним и тем же типом элемента (обратите внимание, что я говорю в терминах DOM, а не HTML). Ни в спецификациях селекторов, ни в спецификациях DOM нет даже упоминания о неизвестных элементах (вероятно, потому, что неизвестные элементы изначально не соответствуют требованиям).
Обратите внимание, что я продолжаю говорить «неизвестный элемент», потому что на самом деле у вас нет настраиваемого элемента, пока вы его не зарегистрируете (тем самым сделав его элементом известным, как и все другие стандартные элементы). Кроме того, IE не поддерживает настраиваемые элементы, как это определено ни одним из будущих стандартов, а Microsoft Edge еще не предоставил эту функцию. Пользовательские элементы подходят, если вы работаете с браузерами, которые поддерживают эту функцию или ее полифиллы. Неизвестные элементы, как и любое другое преднамеренное отклонение от стандарта, однозначно являются плохой практикой и могут привести к неожиданному поведению, , даже если спецификация требует, чтобы браузеры относились к ним как к первоклассным гражданам для целей DOM и CSS, и причины этого хорошо аргументированы в этот ответ.
person
BoltClock
schedule
30.07.2016