Custom properties do CSS explicadas com um tema claro e escuro ao vivo feito só de variáveis, getPropertyValue e setProperty no JavaScript, @property, @theme do Tailwind v4 e armadilhas comuns.
Declare uma variável CSS com dois hífens, --brand: #2563eb;, normalmente dentro de :root para que a página inteira a enxergue, e leia com var(--brand). Um segundo argumento é o fallback: var(--brand, blue). As variáveis são herdadas como color, então redefinir uma em uma seção muda o valor para tudo o que está dentro dela, o que torna os temas baratos.
Sintaxe em resumo
Este guia cobre declaração, escopo e fallback, depois um seletor de tema em que só as variáveis mudam, uma ferramenta que lê e escreve variáveis pelo JavaScript nesta mesma página, propriedades registradas com @property, como o Tailwind v4 transforma o tema dele em variáveis e os erros que fazem var() falhar em silêncio.
As variáveis Sass são substituídas quando a folha de estilo é compilada e somem do resultado. As custom properties do CSS existem no navegador em tempo de execução, são herdadas pelo DOM, podem variar por elemento e podem ser alteradas pelo JavaScript ou por uma regra de media query depois que a página carrega.
Não. var() não é permitido na condição de uma regra @media, porque as media queries são avaliadas sem um elemento do qual herdar. Mas você pode mudar o valor de uma variável dentro de um bloco de media query, que é a forma usual de deixar tokens responsivos.
Confira a grafia e as maiúsculas, se a variável está definida no elemento ou em um ancestral e se o valor final é válido para a propriedade. Se o valor substituído for inválido, a declaração fica inválida no momento do valor computado e a propriedade volta ao valor herdado ou inicial, não à sua regra anterior.
Uma variável não registrada é tratada como string, então ela troca no meio do caminho em vez de interpolar. Registre-a com @property e uma syntax como <color> ou <angle>, e o navegador consegue interpolá-la suavemente em transições e animações.
Custom properties e var() funcionam em todos os principais navegadores há anos. @property é mais recente: o Firefox o adicionou na versão 128, em 2024, então consulte o caniuse se você dá suporte a versões antigas e mantenha um fallback não registrado.
Valores claros e escuros
O segundo card redefine --accent para si mesmo. O terceiro usa uma variável que ninguém definiu, então aparece a cor de fallback.
Um único conjunto de regras de componentes. O tema é outro conjunto de valores, escolhido pela configuração do sistema ou por um atributo data-theme.
Leia o valor computado de qualquer elemento. Escreva em :root para uma mudança global, ou em um elemento para afetar só a subárvore dele.
Registrar --angle como <angle> permite que o navegador o interpole. Sem o registro, o gradiente saltaria em vez de girar.
No Tailwind v4, variáveis em @theme geram utilitários como bg-brand e também são emitidas como variáveis CSS reais que você pode usar com var().
O que costuma confundir
Tema claro e escuro, só com variáveis
Tema
modo claro
modo escuro
Relatório semanal
Pedidos acima da semana passada
pedidos de exemplo
Ver detalhes
A única coisa que muda
Copiar CSS
Ler e escrever variáveis pelo JavaScript
A caixa de exemplo abaixo usa var(--demo-accent, #2563eb) na borda e var(--demo-radius, 8px) nos cantos. Defina qualquer uma das variáveis e a caixa muda.
Nome da variável
Novo valor
O nome de uma custom property começa com dois hífens, por exemplo --demo-radius.
Ler
Definir
Remover
Teste --demo-radius
Caixa de exemplo
(não definida)
Comece grátis · Sem cartão de crédito