Executando verificação de segurança...
3

Vale lembrar que dá para combinar esses seletores.

Por exemplo, um seletor de elemento junto com a classe: p.intro seleciona os parágrafos que contém a classe intro. Qualquer outro elemento que tiver esta classe não será selecionado. Ou seja, se eu tiver este CSS:

p.intro {
  color: red;
}

p {
  color: green;
}

E este HTML:

<p>verde</p>
<p class="intro">vermelho</p>
<div class="intro">não muda de cor</div>

O primeiro parágrafo fica verde, o segundo fica vermelho e o div não muda de cor.

Da mesma forma, p#intro seleciona somente o parágrafo cujo id é intro.


E claro, dá para fazer combinações ainda mais complexas, como div.intro a[target="_blank"]. Neste caso, vai pegar os elementos a que contém o atributo target igual a _blank, e que estão dentro de uma div com a classe intro. Ou seja, com este CSS:

div.intro a[target="_blank"] {
  color: red;
}

div a {
  color: blue;
}

E este HTML:

<div class="intro">
  <a href="/" target="_blank">vermelho</a>
  <a href="/">azul</a>
</div>
<div>
  <a href="/" target="_blank">outro azul</a>
  <a href="/">e mais outro azul</a>
</div>

Somente o primeiro link fica vermelho, e todos os outros ficam azuis.

E também daria para fazer algo como a[target="_blank"].intro: seleciona somente elementos a que possuem o atributo target igual a _blank e a classe intro. Enfim, dá para combinar da maneira que precisar.


Quanto aos seletores de descendentes, existe o > que serve para selecionar somente o descendente direto.

Por exemplo, com este CSS:

span {
  background-color: lightblue;
}

div span {
  background-color: gray;
}

div > span {
  background-color: yellow;
}

E este HTML:

<div>
  <span>
    Fundo amarelo
    <span>Fundo cinza</span>
  </span>
</div>
<span>Fundo azul claro</span>

O primeiro span é descendente direto do div, então o estilo definido em div > span se aplica e ele fica com fundo amarelo. Já o segundo span, apesar de estar dentro do div, não é descendente direto deste (pois ele está dentro do primeiro span), então o estilo div span é aplicado a ele, ficando com o fundo cinza. E o terceiro span não está dentro de nenhuma div, então ele fica com fundo azul claro.


E existem outros como os sibling combinators, que procuram elementos "irmãos" (que estão dentro do mesmo elemento, e na mesma hierarquia). Por exemplo, com este CSS:

h1 ~ span {
  color: red;
}

E este HTML:

<div>
  <span>antes</span>
  <h1>abc</h1>
  <span>vermelho 1</span>
  <p>blabla <span>não sou sibling</span></p>
  <span>vermelho 2</span>
</div>

Somente o segundo e o último span's ficam vermelhos, pois h1 ~ span pega apenas os elementos span que são "irmãos" de h1, aparecem depois dele e estão no mesmo nível da hierarquia (ambos possuem o mesmo elemento "pai", que no caso é a div). O primeiro span está no mesmo nível mas aparece antes, por isso não é afetado. E o terceiro span não está no mesmo nível, pois o elemento "pai" dele é o p.

E se mudarmos o seletor para h1 + span, somente o segundo span fica vermelho, pois agora ele pega somente o span que está imediatamente depois de h1.

Carregando publicação patrocinada...