2009-10-28 21 views
12

CSS Pregunta: Si dos selectores diferentes se aplican a un elemento, ¿quién gana?¿Cuáles son las prioridades entre los selectores CSS

Sé que esto no debería suceder, pero quiero ajustar una aplicación heredada, y el CSS está en el medio.

+1

exacta duplicar http://stackoverflow.com/questions/514506/understanding-css-selectors –

Respuesta

38

La gory details en la especificación es realmente razonablemente legible. En resumen:

  1. !important reglas y normas en línea style ganan más.

  2. De lo contrario, normalmente las ganancias más específicas. #id es un selector más específico que .classname es un selector más específico que tagname.

  3. Donde las reglas son igualmente específicas, la última declarada gana.

No hay ninguna razón en particular por la que esto 'no debería suceder'. Es normal especificar una regla general y luego agregar una regla más específica para apuntar a un caso; múltiples reglas de propiedad igual en un solo elemento no son inusuales o indeseables.

+1

También se deben tener en cuenta las hojas de estilo del usuario/autor: 'Por defecto, las reglas en la hoja de estilos de un autor anulan las de la hoja de estilos del usuario. Las hojas de estilo del autor y del usuario pueden contener declaraciones "! Important" y las reglas del usuario "! Important" anulan las reglas del autor "! Important". –

2

Consulte la sección specificity order de la especificación (junto con el resto de ese capítulo como reglas importantes y el orden en que aparecen las reglas en la hoja de estilos también tiene un impacto).

5

¡Debería suceder! Es por eso que se llama hojas de estilo CASCADING. Puede encontrar un ejemplo de las prioridades here

0

La prioridad entre los selectores se controla por su especificidad. Los selectores más específicos ganan sobre los menos específicos.

Si dos selectores son igualmente específicos, el último gana sobre el primero.

Existen tres niveles de especificidad, id, clase y elemento. Entonces, #elem gana más de .elem ya que una identificación es más específica. .elem .cont gana más de .elem ya que tiene más selectores en el mismo nivel.

Lea más en "¿Qué sucede cuando ocurren conflictos?" en Selectutorial.

0

CSS significa Cascading Style Sheets. Esto significa que las reglas se aplican a los elementos de forma en cascada. Es perfectamente normal que diferentes selectores se apliquen a un elemento. Piensa, por ejemplo, a la siguiente:

<div class="wrapper"> 
    <div id="foo" class="bar" style="some rules">Test</div> 
</div> 

Las siguientes reglas afectarían al elemento "foo":

.wrapper { 
    //some other rules 
} 

#foo { 
    // some more rules 
} 

.bar { 
    // some more rules 
} 

Reglas para las prioridades se puede encontrar here.

Siempre recomiendo usar el plugin Firefox "firebug". Le mostrará exactamente qué propiedades se evalúan para un elemento específico y por qué, enfatizando las anulaciones durante la cascada.

4

usted tiene que encontrar #no de id = A, # no de la clase B y = #no del tag = c en el selector

ABC con victorias de mayor valor.

.wrapper .title p { 
    //some other rules 
} 

A=0 B=2 C=1 =021 

\#foo { 
    // some more rules 
} 

A=1 = 100 

.bar .head div li{ 
    // some more rules 
} 


A=0 B=2 C=2 =022 

100> 022> 021

por lo #foo gana

+0

! Important es equivalente a agregar 1000, por cierto. :) – poitroae

0
  1. ! Important estilo en línea
  2. #id
  3. clase
  4. etiqueta
+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones, y una vez que tenga suficiente [reputación] (http://stackoverflow.com/help/whats-reputation) lo hará poder [comentar cualquier publicación] (http://stackoverflow.com/help/privileges/comment). - [De la crítica] (/ review/low-quality-posts/11251760) –

+1

@sebastianbrosch ¿Cómo no intenta dar una respuesta? Podría estar completamente mal o mal formateado, [pero eso no significa que debamos abusar de las colas de revisión para eliminarlo.] (Http://meta.stackoverflow.com/q/287563/1849664) – Undo

2

"#id" es más poderoso que el nombre ".class" y ".class" es más poderoso que el nombre de "etiqueta". Pero si aplicamos "! Important" que su prioridad es la mayoría de ellos.

  • !
  • importante
  • estilo en línea
  • Identificación
  • clase
  • etiqueta
Cuestiones relacionadas