Ответ 1
В CSS2.1 элемент может содержать только не более одного из псевдоэлементов любого типа в любой момент. (Это означает, что элемент может иметь как псевдо-элемент :before
, так и :after
- он просто не может иметь более одного типа.)
В результате, когда у вас несколько правил :before
, соответствующих одному и тому же элементу, все они будут каскадироваться и применяться к одному псевдоэлементу :before
, как и к нормальному элементу. В вашем примере конечный результат выглядит следующим образом:
.circle.now:before {
content: "Now";
font-size: 19px;
color: black;
}
Как вы можете видеть, вступает в силу только объявление content
с наивысшим приоритетом (как упоминалось выше), остальные декларации отбрасываются, как и в случае любого другого свойства CSS.
Это поведение описано в разделе Селекторы CSS2.1:
Псевдоэлементы ведут себя как реальные элементы в CSS с исключениями, описанными ниже, и в другом месте.
Это означает, что селекторы с псевдоэлементами работают как селекторы для обычных элементов. Это также означает, что каскад должен работать одинаково. Как ни странно, CSS2.1, по-видимому, является единственной ссылкой; ни css3-selectors, ни css3-cascade упоминать об этом вообще, и еще предстоит выяснить, будет ли оно разъяснено в будущей спецификации.
Если элемент может соответствовать более чем одному селектору с тем же псевдоэлементом, и вы хотите, чтобы все они каким-то образом применились, вам нужно будет создать дополнительные правила CSS с комбинированными селекторами, чтобы вы могли точно указать, что браузер должен в таких случаях. Я не могу предоставить полный пример, включая свойство content
здесь, поскольку он не ясно, например, должен ли первый или первый символ или текст. Но селектор, который вам нужен для этого комбинированного правила, либо .circle.now:before
, либо .now.circle:before
- какой бы селектор вы ни выбрали, является личным предпочтением, так как оба селектора эквивалентны, это только значение свойства content
, которое вам нужно будет определить самостоятельно.
Если вам все еще нужен конкретный пример, см. мой ответ на этот похожий вопрос.
Унаследованная спецификация содержимого css3 содержит раздел о вставке нескольких псевдоэлементов ::before
и ::after
, используя нотацию, совместимую с каскад CSS2.1, но обратите внимание, что этот конкретный документ устарел - он не обновлялся с 2003 года, и никто не реализовал эту функцию за последнее десятилетие. Хорошей новостью является то, что заброшенный документ активно переписывается под видом css-content-3 и css-pseudo-4. Плохая новость заключается в том, что множественная функция псевдоэлементов нигде не встречается ни в одной спецификации, по-видимому, опять-таки потому, что ее не интересует.