En CSS2.1, un elemento solo puede tener como máximo uno de cualquier tipo de pseudo-elemento en cualquier momento. (Esto significa que un elemento puede tener tanto un un pseudo-elemento :before
y :after
-. Simplemente no puede tener más de uno de cada clase)
Como resultado, cuando se tienen varios :before
reglas que coinciden con el mismo elemento, lo harán todos en cascada y se aplican a un solo pseudo-elemento :before
, como con un elemento normal. En su ejemplo, el resultado final es el siguiente:
.circle.now:before {
content: "Now";
font-size: 19px;
color: black;
}
Como se puede ver, sólo la declaración content
que tiene precedencia más alta (como se ha mencionado, el que viene al final) se llevará a efecto - el resto de las declaraciones se descartan, como es el caso con cualquier otra propiedad de CSS.
Este comportamiento se describe en el Selectors section of CSS2.1:
pseudo-elementos se comportan igual que los elementos reales en CSS con las excepciones que se describen a continuación y elsewhere.
Esto implica que los selectores con los pseudo-elementos funcionan como selectores para elementos normales. También significa que la cascada debería funcionar de la misma manera. Curiosamente, CSS2.1 parece ser la única referencia; ni css3-selectors ni css3-cascade mencionan esto en absoluto, y queda por ver si se aclarará en una futura especificación.
Si un elemento puede coincidir con más de un selector con el mismo pseudo-elemento, y desea que todos se apliquen de alguna manera, tendrá que crear reglas CSS adicionales con selectores combinados para que pueda especificar exactamente qué navegador debería hacer en esos casos. No puedo proporcionar un ejemplo completo que incluya la propiedad content
aquí, ya que no está claro, por ejemplo, si el símbolo o el texto deben aparecer primero. Pero el selector que necesita para esta regla combinada es .circle.now:before
o .now.circle:before
- el selector que elija es preferencia personal, ya que ambos selectores son equivalentes, es solo el valor de la propiedad content
que deberá definir usted mismo.
Si aún necesita un ejemplo concreto, consulte mi respuesta al this similar question.
The legacy css3-content specification contains a section on inserting multiple ::before
and ::after
pseudo-elements utilizando una notación que sea compatible con la cascada de CSS2.1, pero tenga en cuenta que ese documento en particular está obsoleto: no se ha actualizado desde 2003 y nadie lo ha implementado en la última década. La buena noticia es que el documento abandonado se está reescribiendo activamente bajo la apariencia de css-content-3 y css-pseudo-4. La mala noticia es que la característica de múltiples pseudo-elementos no se encuentra en ninguna de las especificaciones, presumiblemente debido, de nuevo, a la falta de interés de los implementadores.
En el caso dado, si un elemento pertenece a la clase 'tanto circle' y clase' now', se aplica tanto a las reglas para el elemento de ': antes 'pseudo-elemento, pero el CSS normal implica que solo una de las configuraciones' content' puede tener efecto (por las reglas normales de cascada). El punto es que 'content' no se acumula. –
Resulta [esta pregunta] (http://stackoverflow.com/questions/14111751/what-happens-if-multiple-classes-of-the-same-element-define-a-before-pseudo-ele) que yo respondida varios meses después es un duplicado de este. Desde entonces, he fusionado la mayoría de la información de la otra respuesta, que básicamente se amplía a todo lo que dice @Jukka más arriba, ya que está obteniendo mucho más tráfico, además de estar primero. – BoltClock
Después de 13 años, el borrador css-content-3 finalmente se ha [actualizado] (https://www.w3.org/TR/2016/WD-css-content-3-20160602/#changes). La sección de pseudo-elementos definitivamente se ha eliminado a favor de css-pseudo-4, que no permite múltiples pseudo-elementos ':: before 'ni' :: after'. – Oriol