Nella mia barra laterale ho un menu di navigazione gerarchico che utilizza elenchi annidati (tag
Quindi il css ha già gli stili per “#sidebar ul” e “#sidebar ul li”, ma mi piacerebbe aggiungere altri stili a “#sidebar .top-level-nav” che NON si sovrappone ai suoi subchildren. C’è un modo per farlo semplicemente o ho bisogno di riorganizzare tutti gli stili in modo che gli stili che erano su “#sidebar ul” siano ora specifici per certe classi.
Al momento non ci sono selettori genitori (o come li chiama Shaun Inman , selettori qualificati ), quindi dovrai applicare gli stili agli elementi dell’elenco secondario per sovrascrivere gli stili negli elementi dell’elenco principale.
La cascata è una sorta di punto focale di Cascading Style Sheets, da cui il nome.
O usi il selettore di bambini
Quindi usando
#parent > child
Rende solo i bambini di primo livello a cui applicare gli stili. Sfortunatamente IE6 non supporta il selettore di figlio.
Altrimenti puoi usare
#parent child child
Per impostare altri stili specifici per i bambini che sono più di un livello sotto.
Esiste una proprietà chiamata all
nel modulo di ereditarietà CSS3 . Funziona così:
#sidebar ul li { all: initial; }
A partire dal 2016-12, tutti i browser tranne IE / Edge e Opera Mini supportano questa proprietà.
È ansible utilizzare il selettore * per riportare gli stili figli ai valori predefiniti
esempio
#parent { white-space: pre-wrap; } #parent * { white-space: initial; }
Il wrapping con iframe rende obsoleto il css padre.
Risposta breve è: No, non è ansible impedire l’ereditarietà CSS. Puoi solo sostituire gli stili impostati sui genitori. Vedi le specifiche:
Ogni elemento in un documento HTML erediterà tutte le proprietà ereditabili dal suo genitore eccetto l’elemento radice (
html
), che non ha un genitore. – W3C
Oltre a scavalcare ogni singola proprietà ereditata. Puoi anche utilizzare initial
parola chiave initial
, ad es. color: initial;
. Può anche essere usato insieme a all
, ad es. all: initial;
, che resetterà tutte le proprietà contemporaneamente. Esempio:
.container { color: blue; font-style: italic; } .initial { all: initial; }
The quick brown fox jumps over the lazy dog
Potresti usare qualcosa come jQuery per “disabilitare” questo comportamento, anche se non penso che sia una buona soluzione in quanto ottieni la logica di visualizzazione in css e javascript. Tuttavia, a seconda delle tue esigenze, potresti scoprire che i css di jQuery ti semplificano la vita piuttosto che provare i css hacky, specialmente se stai cercando di farlo funzionare per IE6
Ad esempio se hai due div nel documento XHTML.
hello, how are you?
I am fine, thank you.
Quindi prova questo in CSS.
#div1 > #div2 > p{ color: red; }
influisce solo sul paragrafo ‘div2’.
#div1 > p { color: red; }
influisce solo sul paragrafo ‘div1’.
Non hai bisogno del riferimento di class per il li
s. Invece di avere CSS come
li.top-level-nav { color:black; }
tu puoi scrivere
ul#sidebar > li { color:black; }
Questo applicherà lo styling solo a quelli che scendono immediatamente dalla barra laterale.
basta riportarli ai loro valori predefiniti nel selettore “#sidebar ul li”