2011-01-15 11 views
15
<div id="normal" class="wider"> 

</div> 

Ma questo non funziona! La larghezza del blah fino a cancellare la classe "più ampia" con.Come faccio a fare in modo che una classe abbia la precedenza su un ID?

+3

Huh? Per favore sii più esplicito nel tuo esempio. –

+4

Sospetto che voglia che la larghezza dichiarata per '.wider' abbia la precedenza su quella dichiarata per' # normal'. –

risposta

29

Quello che hai c'è un problema CSS specificity.

.wider ha una specificità di 0,0,1,0 mentre #normal ha 0,1,0,0. Non puoi battere un ID con nient'altro che un ID (o definizioni incorporate, ma non è questo il caso).

Quello che mi sento di raccomandare, se non si può mettere la necessaria width dichiarazione nel selettore #normal, è quello di mettere in #normal.wider o, se ciò sia non è possibile, hanno un contenitore identificato, dire #container, più in alto nella gerarchia il più possibile (forse un ID sul corpo?) e sostituire .wider con #container .wider. Questo nuovo selettore avrà una specificità di 0,1,1,0 che è leggermente superiore a 0,1,0,0.

L'utilizzo di !important funziona anche, ma dovrebbe essere utilizzato solo come ultima risorsa.

Esempio:

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

Per questo snippet HTML alcune possibili selettori in ordine di specificità sarebbe in diminuzione:

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 per spiegare la specificità – ChrisR

3

uso # blah.wider invece per risolvere questo

+0

ha funzionato per me! thakns – Toadums

3

Potete decorare con attributi !important per aumentare la loro importanza ....

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

Una nota: non aumentare o diminuire l'importanza. Li * rendi importanti *. Non puoi renderli due importanti. Rendendoli importanti, affermi che hanno la precedenza su quelli che non sono importanti, ma il mezzo per decidere quale delle due dichiarazioni che sono importanti o meno importanti è chiamata specificità ed è determinata dalla struttura del selettore. –

+0

Un buon punto. E c'è anche di più in questo, l'origine di uno stile lo influenza pure. Ad esempio, gli stili importanti dell'utente sostituiscono gli stili importanti dell'autore, indipendentemente dalla specificità. Ho usato vagamente la parola importanza per significare ciò che suppongo potrebbe essere meglio chiamato la precedenza a cascata. –

0

Dato che le persone hanno già detto, un ID ha una specificità del 100, mentre una classe ha solo 10.

Un'alternativa alle risposte suggerite (che non utilizza !important,) è rimuovere la proprietà da #normal che è in conflitto (la larghezza) e lo applica a una seconda classe. Così che sarebbe assomigliare:

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

.normal { 
    width : 400px; 
} 

.wider { 
    width : 1000px; 
} 

lasciando il vostro markup che deve essere effettivamente:

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

in cui si desidera che la 'larghezza normale,' e:

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

Dove si desidera che il elemento extra largo. Potrebbe essere necessario tornare indietro tra le pagine che utilizzano #normal per aggiungere la classe .normal, ma ciò risolverà il problema.

Penso anche che la risposta di Gerben funzioni anche - aggiunge 10 ulteriori specificità alla proprietà ID (totalmente 110,) che dovrebbe ignorare la proprietà della larghezza #normal.

#normal.wider { 
    1000px; 
} 
+1

Un ID in realtà non ha una specificità di 100 e una classe di 10, è solo un'analogia comune per far capire alla gente. Hanno specificità rispettivamente di 0,1,0,0 e 0,0,1,0. Il fatto che nella maggior parte dei casi è possibile calcolare utilizzando 100 e 10 è dovuto a persone che non utilizzano più di 9 ID o classi. Si noti che 11 classi hanno ancora una specificità inferiore rispetto a un singolo ID. Se vuoi essere rigoroso devi usare la notazione 'a, b, c, d'. –

+0

Boom. Alin ha parlato;) Grazie, penso di avere una migliore comprensione della specificità CSS. – jlmakes

Problemi correlati