Selettori CSS vs Discendenti


298

Sono un po 'confuso tra questi 2 selettori.

Il selettore discendente :

div p

seleziona tutto pall'interno divdi un discendente immediato o no? Quindi, se pè dentro un altro div, sarà comunque selezionato?

Quindi il selettore figlio :

div > p

Qual è la differenza? Un bambino significa bambino immediato ? Per esempio.

<div><p>

vs

<div><div><p>

saranno entrambi selezionati o no?


Ho cercato di spiegare qui in dettaglio, posso riferirmi solo in caso di utile a qualcuno ...
Mr. Alien

Risposte:


468

Basti pensare a cosa significano le parole "figlio" e "discendente" in inglese:

  • Mia figlia è sia mia figlia che mia discendente
  • Mia nipote non è mia figlia, ma è la mia discendente.

49
Una nota importante è che un selettore figlio sarà più veloce del selettore discendente, il che può avere un effetto visibile sulle pagine con migliaia di elementi DOM.
Jake Wilson,

Buona risposta, ma aggiungerei semplicemente le risposte dirette ai suoi esempi nella domanda - solo per renderlo ridicolmente chiaro.
JoeCool


23

Bascailly, " ab " seleziona tutte le b all'interno di a, mentre " a> b " seleziona b quali sono solo figli di a , non selezionerà b ciò che è figlio di b ciò che è figlio di a .

Questo esempio illustra la differenza:

div span{background:red}
div>span{background:green}

<div><span>abc</span><span>def<span>ghi</span></span></div>

Il colore di sfondo di abc e def sarà verde, ma ghi avrà il colore di sfondo rosso.

IMPORTANTE: se si modifica l'ordine delle regole in:

div>span{background:green}
div span{background:red}

Tutte le lettere avranno uno sfondo rosso, perché il selettore discendente seleziona anche quello del bambino.


La sezione "Importante" che hai aggiunto rende completa questa risposta. Grazie!
Aakash Verma,

10

In teoria: Child => un discendente immediato di un antenato (ad esempio Joe e suo padre)

Discendente => qualsiasi elemento che discenda da un particolare antenato (ad es. Joe e il suo trisavolo)

In pratica: prova questo HTML:

<div class="one">
  <span>Span 1.
    <span>Span 2.</span>
  </span>
</div>

<div class="two">
  <span>Span 1.
    <span>Span 2.</span>
  </span>
</div>

con questo CSS:

span { color: red; } 
div.one span { color: blue; } 
div.two > span { color: green; }

http://jsfiddle.net/X343c/1/


Interessante su quale browser lo hai testato, dal momento che sembra funzionare davvero
giocherai il

3
Cordiali saluti, CSS in risposta non corrisponde a CSS in JSFiddle ( rede bluescambiato).
Pang

7

Tenere presente che il selettore figlio non è supportato in Internet Explorer 6. (Se si utilizza il selettore in un selettore jQuery / Prototype / YUI ecc. Anziché in un foglio di stile, funziona comunque)


sto pensando di usarlo in CSS. ma in jquery rilevo se il browser è ie6 (in jquery posso farlo? o devo usare <! - [se IE 6]>) e aggiungere una classe
iceangel89

2
jquery ha lo sniffing piuttosto che lo sniffer del browser, quindi non credo che tu possa rilevare se il browser è ie6. E non dovresti. La cosa migliore è includere un foglio di stile aggiuntivo per ie6 con commenti condizionali come hai descritto.
rlovtang

4
div p 

Seleziona tutti gli elementi 'p' in cui l'elemento principale è un elemento 'div'

div> p

Significa figli immediati Seleziona tutti gli elementi 'p' in cui il genitore è un elemento 'div'


-1

La selezione CSS e l'applicazione dello stile a un particolare elemento possono essere eseguite attraversando l'elemento dom [Esempio

Esempio

.a .b .c .d{
    background: #bdbdbd;
}
div>div>div>div:last-child{
    background: red;
}
<div class='a'>The first paragraph.
 <div class='b'>The second paragraph.
  <div class='c'>The third paragraph.
   <div class='d'>The fourth paragraph.</div>
   <div class='e'>The fourth paragraph.</div>
  </div>
 </div>
</div>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.