Variáveis CSS: de var() a temas e @property

Guia de variáveis CSS (custom properties)

Variáveis CSS: sintaxe, escopo, temas, JavaScript, @property | We.Inc

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.

Perguntas frequentes

Qual é a diferença entre variáveis CSS e variáveis Sass?

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.

Posso usar uma variável CSS em uma media query?

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.

Por que minha variável não funciona?

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.

Dá para animar variáveis CSS?

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.

As variáveis CSS são suportadas em todo lugar?

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.

Escopo e herança

Inválido no momento do valor computado

Tokens de tema usados na demo

Valores claros e escuros

Escopo e fallback, ao vivo

Sobrescrita local e fallback

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.

Tema claro e escuro só com variáveis

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.

Lendo e escrevendo variáveis no JavaScript

getPropertyValue e setProperty

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.

@property: variáveis tipadas e animáveis

Animar o ângulo de um gradiente

Registrar --angle como <angle> permite que o navegador o interpole. Sem o registro, o gradiente saltaria em vez de girar.

@theme do Tailwind v4

Tokens viram utilitários e variáveis

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().

Armadilhas

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

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site