Seletores

Seletores

Os seletores de elemento são os mais simples e gerais do CSS. Eles permitem aplicar estilos diretamente a todas as ocorrências de uma determinada tag HTML. Por exemplo, ao utilizar o seletor p { color: blue; }, todos os parágrafos (<p>) de uma página terão o texto exibido em azul. Essa abordagem é útil quando se deseja manter a consistência visual em elementos de mesmo tipo, porém não permite diferenciação individual entre eles.

Os seletores de classe oferecem maior flexibilidade, pois permitem aplicar estilos a grupos específicos de elementos sem se restringir ao tipo de tag. Eles são representados por um ponto (.) seguido do nome da classe, como em .destaque { font-weight: bold; }. Nesse caso, qualquer elemento HTML que possua o atributo class="destaque" será exibido em negrito, independentemente de ser um parágrafo, um título ou uma lista. O uso de classes favorece a reutilização de estilos e a criação de componentes visuais consistentes em diferentes partes do site.

Já os seletores de ID são utilizados para aplicar estilos exclusivos a um único elemento da página. Eles são representados pelo símbolo # seguido do nome do identificador, como em #principal { background-color: lightgray; }. Apenas o elemento com o atributo id="principal" receberá o estilo definido. Por convenção, os IDs devem ser únicos em cada documento HTML, o que significa que não se deve aplicar o mesmo ID a mais de um elemento. Esse seletor é particularmente útil quando é necessário destacar ou personalizar um elemento específico dentro do layout.

Básicos

  • Elemento → seleciona todas as ocorrências de uma tag.

    p { color: blue; } /* todos os parágrafos */
  • Classe → seleciona elementos com determinada classe.

    .destaque { font-weight: bold; }
  • ID → seleciona elemento único com determinado id.

    #principal { background: lightgray; }
  • Universal → aplica a todos os elementos.

    * { margin: 0; padding: 0; }

Combinadores

  • Descendente (espaço) → elementos dentro de outro.

    div p { color: red; } /* todos <p> dentro de <div> */
  • Filho direto (>) → apenas filhos imediatos.

    div > p { color: green; }
  • Adjacente (+) → próximo irmão imediato.

    h1 + p { font-style: italic; }
  • Irmãos gerais (~) → todos os irmãos seguintes.

    h1 ~ p { color: gray; }

Atributo

  • [atributo]

    [title] { color: purple; }
  • [atributo="valor"]

    [type="text"] { border: 1px solid black; }
  • [atributo^="valor"] → começa com

  • [atributo$="valor"] → termina com

  • [atributo*="valor"] → contém

Pseudo-classes

Estados ou condições especiais do elemento.

  • :hover → quando o mouse passa por cima.

  • :focus → quando o campo está ativo.

  • :first-child, :last-child → primeiro ou último filho.

  • :nth-child(2n) → elementos em posições específicas.

  • :checked → inputs selecionados.

  • :disabled, :enabled.

Exemplo:

a:hover { text-decoration: underline; }

Pseudo-elementos

Criam partes “virtuais” do elemento.

  • ::before → conteúdo antes.

  • ::after → conteúdo depois.

  • ::first-letter → primeira letra.

  • ::first-line → primeira linha.

p::first-letter { font-size: 200%; }

Seletores modernos (CSS4+)

  • :is() → simplifica múltiplos seletores.

    :is(h1, h2, h3) { color: blue; }
  • :where() → igual ao :is(), mas sem peso de especificidade.

  • :has() → seleciona elemento pai com base em filho.

    div:has(> img) { border: 2px solid red; }

O seletor :root é uma pseudo-classe que representa o elemento raiz do documento, que no caso do HTML é sempre o elemento <html>. Ele funciona de forma semelhante a usar diretamente o seletor html, mas com uma diferença importante: :root tem maior especificidade na cascata, o que significa que suas declarações têm mais peso do que as mesmas regras aplicadas em html.

O uso mais comum de :root é para definir variáveis CSS (custom properties) que podem ser reutilizadas em todo o documento. Por exemplo:

:root {
  --cor-principal: #1e66ff;
  --espacamento: 16px;
}

body {
  background-color: var(--cor-principal);
  margin: var(--espacamento);
}

Nesse exemplo, --cor-principal e --espacamento são variáveis criadas no escopo global (raiz) e podem ser chamadas em qualquer parte do CSS usando var(--nome-da-variavel). Isso facilita a manutenção, já que trocar uma cor ou medida em um só lugar atualiza todos os elementos que usam aquela variável.

Além das variáveis, :root também é útil quando queremos aplicar estilos globais que devem ter prioridade sobre regras aplicadas em html. Por exemplo, se você definir uma cor de fundo em html e outra em :root, o valor de :root prevalecerá por causa da especificidade maior.

Exemplo

<!DOCTYPE html>
<html lang="pt-br">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Exemplo :root e variáveis CSS</title>
  <style>
    /* Definição global das variáveis */
    :root {
      --cor-principal: #1e66ff;
      --cor-secundaria: #ff9800;
      --espacamento: 16px;
      --raio-borda: 8px;
    }

    body {
      font-family: Arial, sans-serif;
      background: #f9f9f9;
      margin: var(--espacamento);
    }

    h1 {
      color: var(--cor-principal);
    }

    .card {
      background: white;
      border-radius: var(--raio-borda);
      padding: var(--espacamento);
      margin-bottom: var(--espacamento);
      border: 2px solid var(--cor-principal);
    }

    /* Sobrescrevendo variáveis dentro de um contexto */
    .tema-alternativo {
      --cor-principal: #4caf50;   /* Verde */
      --cor-secundaria: #e91e63;  /* Rosa */
    }

    .tema-alternativo .card {
      border-color: var(--cor-principal);
    }

    .btn {
      background: var(--cor-secundaria);
      border: none;
      color: white;
      padding: 10px 20px;
      border-radius: var(--raio-borda);
      cursor: pointer;
    }
  </style>
</head>
<body>

  <h1>Exemplo com :root e variáveis CSS</h1>

  <div class="card">
    <p>Este card usa as variáveis globais definidas em <code>:root</code>.</p>
    <button class="btn">Botão Padrão</button>
  </div>

  <div class="tema-alternativo">
    <div class="card">
      <p>Este card está dentro de <code>.tema-alternativo</code>, que sobrescreveu as variáveis.</p>
      <button class="btn">Botão Alternativo</button>
    </div>
  </div>

</body>
</html>

Last updated