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?


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.

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


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.


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/


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á)


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'


-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>
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.