2012-11-23 11 views
8

considerare questo HTML con le classi CSS aa, bb e cc:Selettore figlio opzionale, con CSS/Stylus/LESS: .aa> .bb? > .cc

<div class='aa'> 
<div class='bb'> 
<div class='cc'> 
</div> 
</div> 
</div> 

posso selezionare il tag class=cc in questo modo: .aa > .bb > .cc. Tuttavia, nel mio caso, a volte il tag .bb è assente, che è, il codice HTML si presenta in questo modo:

<div class='aa'> 
<div class='cc'> 
</div> 
</div> 

Thererfore, per selezionare tutte .cc vicino ad una .aa, avrei bisogno di specificare due percorsi CSS:

.aa > .bb > .cc, 
.aa > .cc { .... } 

questo funziona, ma, non c'è un modo più breve? Qualcosa di simile a questo:

.aa > (.bb >)? .cc { ... } /* ? means "optional" */ 

con i CSS o qualcosa di simile stilo o di meno?

Motivazione: Nel mondo reale, "aa" e "bb" e "cc" sono nomi un po 'più lunghi, e ci sono altre cose prima e dopo "aa" e "cc", e sarebbe bello non è necessario duplicare quella roba.

Nota: nel mio caso, questo non funzionerà: .aa .cc perché corrisponderebbe a troppi .cc s altrove nella pagina. Gli .cc s devono essere immediatamente sotto lo .aa o sotto .aa > .bb.

+3

Se '.aa .cc' è troppo generico perché non si vogliono confrontare gli elementi' .cc' che sono discendenti più distanti degli elementi '.aa', quindi penso' .aa> .bb>. Il selettore cc, .aa> .cc' che hai già menzionato è il migliore. – nnnnnn

+1

Nel CSS standard non c'è altro modo. – BoltClock

+0

Sono '.bb' e' .cc' gli unici due possibili figli di '.aa'? – BoltClock

risposta

9

Per Stilo e Sass si potrebbe fare questo (live example for Sass):

.aa 
    > .bb, & 
    > .cc 
     width: 10px 

non riuscivo a trovare un modo per farlo in un one-liner per Sass, ma per di meno/stilo/SCS si potrebbe fare anche questo (esempi dal vivo for Scss, for Less):

.aa { > .bb, & { > .cc { 
    width: 10px 
}}} 

Questo non è che abbastanza anche, ma sempre meglio di niente :)

+0

Ho quasi pensato che non fosse possibile! Grazie :-) – KajMagnus

0

.aa > .cc, .aa > .bb > .cc {} non funziona? O ho frainteso la tua domanda?
Questo seleziona solo i .aa bambini diretti e gli .cc che sono .bb bambini (figli di .aa) pure.

+0

Sì, funzionerebbe, ma mi stavo chiedendo se c'è un'alternativa più breve. – KajMagnus

+0

(Ho aggiornato la domanda per chiarire perché lo sto chiedendo.) – KajMagnus

1

se si desidera utilizzare il vostro op zione, tra l'altro è molto interessante, è possibile utilizzare una forma più corretta:

>.aa (>.bb)? >.cc { ... } 

ma la forma corretta sarebbe:

.aa .cc { ... } 

in stilo:

.aa 
    .cc 

Questo è tutto.

+1

Grazie per la tua risposta, e io non lo capisco davvero. Non capisco cosa intendi con * "puoi usare un modulo più corretto" * Stai dicendo che '.aa (> .bb)? > .cc {...} 'è un CSS valido? (Non penso che lo sia) – KajMagnus

Problemi correlati