Seletores CSS Filho x Descendente

298

Estou um pouco confuso entre esses 2 seletores.

O seletor descendente :

div p

selecionar tudo pdentro divde um descendente imediato ou não? Então, se o pestiver dentro de outro, divele ainda será selecionado?

Em seguida, o seletor filho :

div > p

Qual é a diferença? Criança significa criança imediata ? Por exemplo.

<div><p>

vs

<div><div><p>

os dois serão selecionados ou não?

iceangel89
fonte
Eu tentei explicar aqui em detalhe, pode referir-se apenas caso se o seu útil a ninguém ...
Sr. Estrangeiro

Respostas:

468

Pense no que as palavras "criança" e "descendente" significam em inglês:

  • Minha filha é minha filha e minha descendente
  • Minha neta não é minha filha, mas é minha descendente.
RichieHindle
fonte
49
Uma observação importante é que um seletor filho será mais rápido que o seletor descendente, o que pode ter um efeito visível em páginas com milhares de elementos DOM.
Jake Wilson
Boa resposta, mas eu simplesmente acrescentaria respostas diretas aos exemplos dele na pergunta também - apenas para deixar isso ridiculamente claro.
JoeCool
45

Sim você está correto. div pcorresponderá ao exemplo a seguir, mas div > pnão será.

<div><table><tr><td><p> <!...

O primeiro é chamado seletor descendente e o segundo é chamado seletor filho .

Çağdaş Tekin
fonte
23

Bascailly, " ab seleciona" tudo b de dentro de um, enquanto " a> b " seleciona b de que só são filhos para o um , não vai selecionar b que é filho de b que é filho de um .

Este exemplo ilustra a diferença:

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

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

A cor de fundo abc e def será verde, mas ghi terá a cor vermelha.

IMPORTANTE: Se você alterar a ordem das regras para:

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

Todas as letras terão fundo vermelho, porque o seletor descendente também seleciona a criança.

Ignas2526
fonte
A seção "Importante" que você adicionou torna esta resposta completa. Obrigado!
Aakash Verma
10

Em teoria: Criança => um descendente imediato de um ancestral (por exemplo, Joe e seu pai)

Descendente => qualquer elemento descendente de um ancestral em particular (por exemplo, Joe e seu tataravô)

Na prática: tente este 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>

com este CSS:

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

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

Snowcrash
fonte
Interessante de qual navegador você testou-lo, uma vez que parecem funcionar de fato
halb yoel
3
Para sua informação, o CSS na resposta não corresponde ao CSS no JSFiddle ( rede bluetrocado).
Pang
7

Esteja ciente de que o seletor filho não é suportado no Internet Explorer 6. (Se você usar o seletor em um seletor jQuery / Prototype / YUI etc, em vez de em uma folha de estilos, ainda funcionará)

rlovtang
fonte
Eu estou pensando que eu uso isso em css. mas em jquery i detectar se o navegador é o IE6 (em jquery que eu posso fazer isso ou eu preciso usar? <! - [if IE 6]>) e adicionar uma classe
iceangel89
2
jquery apresentam sniffing ao invés de sniffing de navegador, então eu não acho que você possa detectar se o navegador é ie6. E você não deveria. O melhor é incluir uma folha de estilo adicional para o ie6 com comentários condicionais, como você descreveu.
rlovtang
4
div p 

Seleciona todos os elementos 'p' em que o pai é um elemento 'div'

div> p

Significa filhos imediatos Seleciona todos os elementos 'p' onde o pai é um elemento 'div'

user3351229
fonte
-1

A seleção de CSS e a aplicação do estilo a um elemento específico podem ser feitas através da passagem pelo elemento dom [Exemplo

Exemplo

.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>
Aravind Cheekkallur
fonte