Я играл со стилями псевдоэлементов и обнаружил поведение, которое меня озадачило.
Рассмотрим следующие CSS и HTML
HTML:
<p>
Note: As a rule, double colons (::) should be used instead of a single colon (:). This distinguishes pseudo-classes from pseudo-elements. However, since this distinction was not present in older versions of the W3C spec, most browsers support both syntaxes for the sake of compatibility. Note that ::selection must always start with double colons ::.
</p>
и стили
p::first-letter {
font-size: 20px;
color: red;
}
p::first-line {
font-variant: small-caps;
color: green;
}
p::before {
content: 'Start';
color: blue;
}
В Chrome поведение следующее: первая буква :: before содержимое окрашивается в красный цвет, даже если это не содержимое p и :: before стили не заменяют цвет синим.
Также, когда в :: before content нет буквы, и я помещаю туда & или * - вся первая строка становится зеленой и не применяются стили :: first-letter и :: before.
В Firefox результат предоставленного кода будет следующим:
Я использую последние версии браузера под Ubuntu 17.04
Итак, может ли кто-нибудь объяснить, почему контент :: before выбирается другими селекторами псевдоэлементов, и к ним применяются стили, и почему стили own :: before не перезаписывают их, даже если они являются «более поздними» стилями.