sobreescribir - especificidad css
Relación entre! Importante y CSS especificidad (2)
Al observar la especificación de especificidad de CSS , no se menciona cuántos "puntos" vale la regla !important .
¿Cuándo uno reemplaza a otro? ¿Qué pasa si uno es declarado después del otro? ¿Qué regla se declara más importante? ¿Hay algún tipo de patrón?
Por lo que se ve !important aplica a lo que tiene puntos más específicos para comenzar. Pero, ¿qué pasará si declaro un bazillion id lleno de clases y anidado profundamente? ¿Anulará las reglas establecidas en otra regla menos específica marcada con !important ?
La forma en que pienso sobre esto es esta:
!importantes una carta de espadas . Sobrepasa todos los puntos de especificidad. Para su pregunta específica, el!importantanulará un bazillion id / classes.!importantrestablece la cascada. Por lo tanto, si usa un!importantdebajo de otro!important, la segunda instancia gobierna.
Hay una respuesta más técnica por ahí, pero así es como pienso !important .
Una nota más, si está utilizando !important , debe dar un paso atrás y comprobar si está haciendo algo mal. !important implica que estás trabajando contra la cascada de CSS. Deberías usar !important en casos raros.
La especificidad en CSS solo concierne a los selectores , no a sus declaraciones asociadas. !important aplica a una declaración, por lo que solo no juega ningún papel en la especificidad.
Sin embargo !important influye en la cascada , que es el cálculo general de los estilos para un elemento determinado cuando se le aplica más de una declaración de la misma propiedad. O, como Christopher Altman describe sucintamente :
!importantes una carta de espadas . Sobrepasa todos los puntos de especificidad.
Pero no solo eso: debido a que influye en la cascada en general, si tiene más de un selector !important con una regla que contenga una declaración !important que coincida con el mismo elemento, la especificidad del selector continuará aplicándose. De nuevo, esto se debe simplemente a que se aplica más de una regla al mismo elemento.
En otras palabras, para dos reglas con selectores desiguales en la misma hoja de estilo (por ejemplo, la misma hoja de estilo del usuario, la misma hoja de estilo del autor interno o la misma hoja de estilo del autor externo), se aplican las reglas con el selector más específico. Si hay estilos !important , gana el que está en la regla con el selector más específico. Finalmente, dado que solo puede tener algo que sea importante o no, eso es todo lo que puede hacer para influir en la cascada.
Aquí hay una ilustración de los diversos usos de !important y cómo se aplican:
La declaración
!importantsiempre prevalece sobre la que no lo tiene (excepto en IE6 y versiones anteriores):/* In a <style> element */ #id { color: red !important; color: blue; }Si hay más de una declaración
!importanten una regla con el mismo nivel de especificidad, la más tarde declarada gana:/* In a <style> element */ #id { color: red !important; color: blue !important; }Si declara la misma regla y la misma propiedad en dos lugares diferentes,!
!importantsigue el orden en cascada si ambas declaraciones son importantes:/* In an externally-linked stylesheet */ #id { color: red !important; } /* In a <style> element appearing after the external stylesheet */ #id { color: blue !important; /* This one wins */ }Para el siguiente HTML:
<span id="id" class="class">Text</span>¡Si tiene dos reglas diferentes y una
!important#id { color: red; } .class { color: blue !important; }Eso
!importantsiempre gana.¡Pero cuando tienes más de uno
!important:#id { color: red !important; } .class { color: blue !important; }La regla
#idtiene un selector más específico, por lo que uno gana.