2012-01-12 9 views
5

Ho un Html che contiene qualcosa di simile: (div multipli in div A).Css non sovrascrive i valori ereditati

<div class="a"> 
    <div class="b"></div> 
</div> 

mio css sembra che:

.a div { 
    border: solid; 
    border-width: thin; 
} 

.b { 
    border: none; 
    border-width: 0px; 
    border-collapse: collapse; 
} 

Per qualche motivo i valori di b non viene sostituita. tuttavia, se scrivo piuttosto che "a .div" non otterrò il comportamento previsto per le altre div all'interno di a.

L'unico modo per farlo funzionare è "importante!" (es. "border: none! important";) ma sembra meno elegante.

piacerebbe tutte le idee su ciò che sta succedendo lì ..

Ehud.

risposta

1

.a div ha una specificità superiore a .b.
Se si desidera che il css per .b sovrascriva quello .a, conferisce ancora una specificità più elevata, ad esempio .a div.b.

(Oppure è possibile utilizzare !important, sì, ma non consigliato qui.)

+0

Questo è alquanto intuitivo, almeno per me, ma funziona come un incantesimo (a proposito ho appena usato ".b div" e anche quello ha funzionato). – EhudFisher

+0

Questo è strano, '.b div' non dovrebbe funzionare, dal momento che non ci sono div all'interno del tuo .b, almeno non nel tuo esempio. Ad ogni modo, la specificità è un concetto molto importante all'interno dei CSS, ti consiglierei di leggerlo. –

3

I selettori sono errati.

Invece di

a. div { 

Scrivi

div.a { 

(selezionare qualsiasi div con una classe di "a")

Invece di

b { 

(che in realtà sarà prova a stile tutto b elementi)

Usa

.b { 

(che dice selezionare tutto ciò che è definito dalla classe di "b")

EDIT (in risposta alla risposta)

Per selezionare tutti i div che si trovano all'interno di un div con la classe di "a", utilizzare il seguente selettore: -

div.a div 
+0

miei selettori (nel codice) erano soddisfacenti, ma quello che ho messo nella domanda era ovviamente sbagliato. I miei selettori sono ".b" e ".a div". Spiacente, modifico il post originale. La soluzione, tuttavia, non funziona per me. Quello che sto cercando di selezionare non sono tutti i div con una classe a, ma tutti i div in un elemento la cui classe è a. – EhudFisher

+0

Modificato con un nuovo selettore per voi, signore. –

0

Specificità punteggio viene calcolato dal compilatori CSS, il punteggio più alto tra dichiarazione arriva a modificare il contenuto.

punti vengono generalmente calcolato da questo ordine:

inline id-element class-element no.-of-elements 
    $   $    $    $ 

($) -> 1 se il rispettivo tipo di specificità esiste nel codice
($) -> 0 se il rispettivo tipo di specificità doesn 't esiste nel codice

Quindi, ecco
per .a div punteggio sarà 0012
per .b punteggio sarà 0011
Chiaramente primo vince così si arriva a modificare i contenuti anche se .b cerca di ignorare .a div

(OR)

è possibile utilizzare !important nella dichiarazione di finalizzare tale dichiarazione

Problemi correlati