2011-03-29 8 views
46

Teóricamente hablando, si usted ha tenido este escenario:múltiples declaraciones de clases importantes y precedencia

<style type="text/css"> 
    .class1 { 
     color:#F00 !important; 
    } 
    .class2 { 
     color:#00F !important; 
    } 
</style> 

<p class="class2 class1">Test</p> 

Qué color debe prevalecer? ¿Cómo determinan los navegadores la precedencia en este escenario?

+0

¡Bienvenido a SO! Buena primera pregunta. De hecho, es 'class2' que se usa: http://jsfiddle.net/yd6Gy/ ¿Pero por qué? Interesado en ver qué surge. –

+0

Esta pregunta destaca por qué siento que la bandera '! Important' estaba mal diseñada. – Spudley

+2

@Spudley, tienes toda la razón al respecto; sin embargo, por lo que entiendo el problema, '! important' no es importante aquí. El mismo fenómeno ocurriría si eliminaras ambos –

Respuesta

47

De acuerdo con esta fuente: http://www.boogiejack.com/CSS_4.html

clase2 debe reemplazar el estilo de clase 1.

Orden del pliego de condiciones: Como último recurso, cuando todos los demás conflictos especificaciones de resolución no pueden determinar qué estilo debe tomar precedencia , el último estilo especificado será el estilo utilizado.

+8

+1 esta es la información en profundidad que estaba esperando. El [MDC] (http://webcache.googleusercontent.com/search?q = caché: 0fgzBZMKlXEJ: https: //developer.mozilla.org/en/Common_CSS_Questions+css+multiple+classes+w3c&cd=6&hl=de&ct=clnk&gl=de&source=www.google.de) lo pone aún más claro: 'Si la misma propiedad se declara en ambas reglas, el conflicto se resuelve primero a través de la especificidad, luego de acuerdo con el orden de las declaraciones de CSS. El orden de las clases en el atributo de clase no es relevante. ' –

+1

Parece que esto no sucederá si agrega 'class2' utilizando el método JQuery .addClass. – delphirules

6

Dado que todas las clases son "igual de importantes" cuando se agregan a un elemento, no importa en qué orden las asigne a su párrafo.

En este caso, color en .class1 y .class2 están ambos declarados tan importante, sino porque .class2 fue declarado después de .class1 el navegador mostrará su párrafo en azul, ya que sobrescribe el color declarada de .class1

también , échele un vistazo a esto: http://jsfiddle.net/3uPXx/1/ Puede ver que no importa en qué orden declare la clase en su párrafo. Como ambas clases definen el mismo atributo (color), se sobrescribirá la clase que se declare la última.

Lo único que puede sobreescribir esto es un estilo en línea con! Importante como se puede ver en el violín.

9

Con dos selectores ponderados equitativamente, el comportamiento es el mismo si aplica !important a ambos u omítalo de ambos.

<style type="text/css"> 
    .class1 { 
     color: #F00; /* red */ 
    } 
    .class2 { 
     color: #00F; /* blue */ 
    } 
</style> 

El orden de las clases en el atributo de clase HTML es independiente del nivel de especificidad de cada selector de clase.

<p class="class2 class1">Test X</p> 
<p class="class1 class2">Test Y</p> 

salida

  • prueba X → azul
  • Prueba Y → azul

Si utiliza !important en una sola clase de selección, luego de que uno tendrá prioridad (porque adquiere un mayor nivel de especificidad).

Cuestiones relacionadas