Variáveis CSS

Variáveis CSS (Propriedades Personalizadas) permitem definir valores reutilizáveis no CSS, semelhantes a variáveis em linguagens de programação. Usar variáveis CSS pode reduzir muito o código repetitivo e facilitar o gerenciamento de tokens de design como cores de tema e espaçamento.

Definindo Variáveis

Variáveis CSS usam nomes de propriedades personalizados (começando com --) para declarar:

Exemplo

HTML
<style>
/* Definir variáveis globais em :root */
:root {
  --primary-color: #3498db;
  --secondary-color: #2ecc71;
  --text-color: #333;
  --border-radius: 8px;
  --spacing: 16px;
  --font-size: 16px;
}
</style>
▶ Experimente

Usando Variáveis

Referencie variáveis usando a função var():

Exemplo

HTML
<style>
.button {
  background-color: var(--primary-color);
  color: white;
  border-radius: var(--border-radius);
  padding: var(--spacing);
  font-size: var(--font-size);
}

.card {
  border: 1px solid var(--primary-color);
  border-radius: var(--border-radius);
  padding: var(--spacing);
}
</style>
<button class="button">Botão</button>
<div class="card">Card</div>
▶ Experimente

Escopo de Variáveis

O escopo de variáveis CSS é determinado por onde são definidas:

Variáveis globais — definidas em :root:

Exemplo

HTML
<style>
:root {
  --color: blue;
}
</style>
<div class="box-demo">Caixa de demostração mostrando efeito da propriedade atual</div>
▶ Experimente

Variáveis locais — definidas em um seletor específico, efetivas apenas naquele seletor e seus filhos:

Exemplo

HTML
<style>
.card {
  --card-bg: #f5f5f5;
  --card-padding: 20px;
}

.card-header {
  background: var(--card-bg);
  padding: var(--card-padding);
}
</style>
<div class="card">Card</div>
<div class="card-header">Cabeçalho do card</div>
▶ Experimente

Herança de Variáveis

Variáveis CSS herdam como propriedades CSS normais:

Exemplo

HTML
<style>
:root {
  --theme-color: #333;
}

/* Sobrescrever variável em um contêiner */
.dark-theme {
  --theme-color: #eee;
}

.dark-theme .content {
  color: var(--theme-color);  /* #eee */
}

.content {
  color: var(--theme-color);  /* #333 */
}
</style>
<div class="dark-theme">Visualização do tema escuro</div>
<div class="content">Área principal de conteúdo</div>
▶ Experimente

Valores de Reserva para var()

var() pode definir um segundo parâmetro como reserva — usado quando a variável é indefinida:

Exemplo

HTML
<style>
.element {
  color: var(--undefined-color, red);  /* Usa vermelho porque --undefined-color é indefinido */
  background: var(--bg, var(--fallback, #eee));  /* Pode aninhar reservas */
}
</style>
<div class="element">Este é um elemento de exemplo</div>
▶ Experimente

Modificando Variáveis com JavaScript

✅ Implementação de troca de tema: Variáveis CSS combinadas com JavaScript são a melhor solução para implementar "modo escuro" — alterne o atributo data-theme no <html>, use variáveis no CSS para referenciar diferentes cores, e uma linha de código JS pode mudar o esquema de cores do site inteiro.

Uma grande vantagem das variáveis CSS é que podem ser modificadas dinamicamente via JavaScript:

Exemplo

JAVASCRIPT
// Obter
const color = getComputedStyle(document.documentElement)
  .getPropertyValue('--primary-color');

// Definir
document.documentElement.style.setProperty('--primary-color', '#e74c3c');
▶ Experimente

Implementando Troca de Tema

Variáveis CSS são a melhor maneira de implementar troca de tema como "modo escuro":

Exemplo

HTML
<style>
/* Tema claro (padrão) */
:root {
  --bg-color: #ffffff;
  --text-color: #333333;
  --card-bg: #f5f5f5;
  --border-color: #dddddd;
}

/* Tema escuro */
[data-theme="dark"] {
  --bg-color: #1a1a2e;
  --text-color: #eeeeee;
  --card-bg: #16213e;
  --border-color: #0f3460;
}

body {
  background-color: var(--bg-color);
  color: var(--text-color);
}
</style>
▶ Experimente

Depois troque temas via JavaScript:

JAVASCRIPT
document.documentElement.setAttribute('data-theme', 'dark');
// ou
document.documentElement.setAttribute('data-theme', 'light');

Vantagens das Variáveis CSS

  1. Reduz código repetitivo: Uma variável usada em muitos lugares, mude uma vez para atualizar todas
  2. Modificável em tempo de tempo: Pode ser alterada dinamicamente via JS para troca de tema
  3. Controle de escopo: Pode sobrescrever valores de variáveis em contêineres específicos
  4. Semântico: --primary-color é mais fácil de entender que #3498db

Diferenças dos Pré-processadores

Variáveis CSS (Propriedades Personalizadas) diferem das variáveis Sass/Less:

Recurso Variáveis CSS Variáveis Sass
Modificação em tempo de execução ✅ Sim ❌ Fixo após compilação
Escopo ✅ Herança CSS ❌ Valores fixos após compilação
Navegador Suporte a navegadores modernos Sem suporte de navegador necessário (pré-compilado)
Interação JS ✅ Legível/gravável ❌ Não acessível

❓ Perguntas Frequentes

Q Qual é a diferença entre variáveis CSS e variáveis Sass?
R Variáveis CSS são verdadeiras propriedades CSS que podem ser modificadas dinamicamente no navegador e suportam leitura/escrita JavaScript. Variáveis Sass tornam-se valores fixos após compilação e não podem ser modificadas em tempo de execução. Variáveis CSS podem fazer troca de tema; variáveis Sass não. Elas não conflitam e podem ser usadas juntas.
Q Quais são as regras de escopo para variáveis CSS?
R Variáveis CSS seguem regras de cascata. Variáveis definidas em `:root` são globalmente disponíveis; variáveis definidas em um elemento só são efetivas naquele elemento e seus filhos. Esta propriedade permite sobrescritas locais de tema — dê a um contêiner valores de variáveis diferentes, e todas as referências àquelas variáveis dentro mudam automaticamente.
Q Variáveis CSS podem implementar modo escuro?
R Sim, este é o caso de uso mais clássico para variáveis CSS. Defina variáveis de cores claras em `:root`, sobrescreva-as com valores escuros em `[data-theme="dark"]`, depois uma linha de JavaScript `document.documentElement.dataset.theme = "dark"` pode mudar o esquema de cores do site inteiro.

📖 Resumo

📝 Exercícios

  1. Crie uma página usando variáveis CSS para definir pelo menos 5 variáveis para cores de tema, cores de texto, espaçamento, etc., e use-as por toda a página.
  2. Baseado na página acima, implemente "troca de cor de tema com um clique" — modifique a variável de cor primária em :root e observe mudanças em todos os elementos relacionados.
  3. Use variáveis CSS para implementar uma troca simples de modo "dia/noite" (trocando classe ou atributo data-theme via JS).
  4. Sobrescreva localmente valores de variáveis CSS em um contêiner (como um componente de card) e observe mudanças de estilo em seus elementos filhos.
100%