2011-01-15 20 views

Respuesta

29

Lo que tienes allí es un problema de CSS specificity.

.wider tiene una especificidad de 0,0,1,0 mientras que #normal tiene . No se puede superar una ID con otra cosa que no sea una ID (o definiciones en línea, pero ese no es el caso aquí).

Lo que yo recomendaría, si no se puede poner la necesaria declaración width en el selector #normal, es ponerlo en #normal.wider o, en caso de que o bien no es posible, tiene un recipiente identificado, por ejemplo #container, tan alto en el jerarquía como sea posible (¿tal vez una identificación en el cuerpo?) y reemplace .wider por #container .wider. Este nuevo selector tendrá una especificidad de 0,1,1,0 que es un poco mayor que 0,1,0,0.

El uso de !important también funcionará, pero debe utilizarse solo como último recurso.

Ejemplo:

<div id="container" class="wrapper"> 
    <div id="normal" class="wider"> 
</div> 

Para este código HTML algunos selectores posibles con el fin de especificidad sería decreciente:

CSS Selector   -> Specificity 
--------------------------------------- 
#container #normal -> 0,2,0,0 
#container .wider -> 0,1,1,0 // These two have the same specificity so 
#normal.wider  -> 0,1,1,0 // the last declared value will be used 
#normal    -> 0,1,0,0 
.wrapper .wider  -> 0,0,2,0 
.wider    -> 0,0,1,0 
+1

+1 para explicar la especificidad – ChrisR

3

uso # blah.wider en lugar de resolver este

+0

funcionó para mí! thakns – Toadums

3

Se puede decorar con atributos !important para aumentar su importancia ....

.wider 
{ 
    width:9000px !important; 
} 
+2

Una nota: no aumenta o disminuye la importancia. Usted simplemente * los hace importantes *. No puedes hacer que sean doblemente importantes. Al hacerlos importantes, dices que tienen prioridad sobre aquellos que no son importantes, pero los medios para decidir cuál de las dos declaraciones son importantes o no importantes se llama especificidad y está determinada por la estructura del selector. –

+0

Un buen punto. Y aún hay más: el origen de un estilo también lo afecta. Por ejemplo, los estilos importantes del usuario anulan los estilos importantes del autor, independientemente de la especificidad. Usé la palabra importancia vagamente para significar lo que supongo podría llamarse mejor la precedencia en cascada. –

0

Como personas ya se han mencionado, una identificación tiene una especificidad del 100, mientras una clase tiene solo 10.

Una alternativa a las respuestas sugeridas (que no usa !important,) es eliminar la propiedad de #normal que es conflictivo (el ancho,) y aplicarlo a una segunda clase. Por lo que vería como:

#normal { 
    padding : 0; 
    margin : 0; 
} 

.normal { 
    width : 400px; 
} 

.wider { 
    width : 1000px; 
} 

de alejarse de su margen de beneficio real para ser:

<div id="normal" class="normal"> 
</div> 

donde desea que el 'ancho normal', y:

<div id="normal" class="wider"> 
</div> 

Dónde desea que el elemento extra ancho Es posible que tenga que regresar a través de sus páginas que usan #normal para agregar la clase .normal, pero esto solucionará su problema.

También creo que la respuesta de Gerben también funciona: añade 10 especificidades más a la propiedad de ID (totalmente 110,) que debe anular la propiedad de ancho #normal.

#normal.wider { 
    1000px; 
} 
+1

Una ID no tiene realmente una especificidad de 100 y una clase de 10, es solo una analogía común para que la gente entienda. Tienen especificidades de 0,1,0,0 y 0,0,1,0 respectivamente. El hecho de que en la mayoría de los casos se puede calcular usando 100 y 10 se debe a que las personas no usan más de 9 ID o clases. Tenga en cuenta que 11 clases todavía tienen una especificidad menor que una única ID. Si quieres ser riguroso, debes usar la notación 'a, b, c, d'. –

+0

Boom. Alin ha hablado;) Gracias, creo que tengo una mejor comprensión de la especificidad de CSS. – jlmakes

Cuestiones relacionadas