Escopo das Variáveis CSS: Global e Local
Entenda onde suas variáveis estarão disponíveis no seu CSS.
Na lição anterior, você aprendeu a declarar e usar variáveis CSS. Agora, vamos aprofundar um conceito muito importante: o escopo das variáveis.
Pense no escopo como o "alcance" ou a "visibilidade" de uma variável. Assim como em outras linguagens de programação, no CSS, uma variável pode ser acessível em todo o seu documento (escopo global) ou apenas em partes específicas dele (escopo local). Entender isso é fundamental para organizar seu código e evitar surpresas.
Escopo Global: Variáveis para o Documento Inteiro
Uma variável com escopo global é aquela que pode ser acessada e utilizada por qualquer elemento em sua página HTML. É como uma regra que vale para todos na casa.
Como declarar variáveis globais?
A maneira mais comum e recomendada de declarar variáveis globais é dentro do seletor :root.
- O seletor
:rootrepresenta o elemento raiz do documento HTML (o elemento<html>). - Qualquer variável definida dentro de
:rootserá herdada por todos os outros elementos da página.
Exemplo:
/* Variáveis globais declaradas em :root */
:root {
--cor-primaria: #007bff; /* Azul principal */
--tamanho-fonte-base: 16px;
--espacamento-padrao: 1em;
}
body {
font-size: var(--tamanho-fonte-base);
margin: 0;
padding: var(--espacamento-padrao);
}
h1 {
color: var(--cor-primaria); /* Usa a cor primária global */
}
button {
background-color: var(--cor-primaria); /* Usa a cor primária global */
padding: var(--espacamento-padrao);
}
Neste exemplo, --cor-primaria, --tamanho-fonte-base e --espacamento-padrao podem ser usadas em qualquer lugar do CSS, pois foram definidas no escopo mais alto.
Escopo Local: Variáveis para Elementos Específicos
Uma variável com escopo local é aquela que só pode ser acessada e utilizada dentro do elemento onde foi declarada e em seus elementos filhos. É como uma regra que vale apenas para um cômodo específico da casa e para os objetos que estão dentro dele.
Como declarar variáveis locais?
Você declara variáveis locais dentro de qualquer seletor CSS que não seja :root.
Exemplo:
:root {
--cor-primaria: #007bff; /* Variável global */
}
.card {
--cor-fundo-card: #f8f9fa; /* Variável local para .card */
--borda-card: 1px solid var(--cor-primaria); /* Usa variável global */
background-color: var(--cor-fundo-card);
border: var(--borda-card);
padding: 20px;
margin: 10px;
}
.card-header {
--cor-texto-header: #343a40; /* Variável local para .card-header */
color: var(--cor-texto-header); /* Usa a variável local */
font-size: 1.5em;
}
.card-body {
color: var(--cor-texto-header); /* ERRO! --cor-texto-header NÃO está acessível aqui */
/* Correto seria: color: #343a40; ou definir --cor-texto-header em .card */
}
.card-footer {
background-color: var(--cor-fundo-card); /* OK! --cor-fundo-card é acessível aqui (filho de .card) */
border-top: var(--borda-card); /* OK! --borda-card é acessível aqui (filho de .card) */
padding-top: 10px;
}
Observações Importantes sobre Escopo:
- Herança: Variáveis CSS são herdadas. Se você define
--cor-textoem um elemento pai, todos os seus filhos podem usarvar(--cor-texto). - Sobrescrita: Você pode sobrescrever uma variável global em um escopo local. Se você definir
--cor-primaria: red;dentro de.minha-secao, todos os elementos dentro de.minha-secaousarão o vermelho para--cor-primaria, enquanto o resto do site continuará usando o valor global (azul, no nosso exemplo). - Cascata: A cascata do CSS ainda se aplica. A regra mais específica ou a última declarada (se tiver a mesma especificidade) prevalecerá. Isso é crucial para entender como as variáveis são resolvidas.
Por que o Escopo é Importante?
- Organização: Ajuda a manter seu CSS mais organizado, definindo variáveis onde elas realmente fazem sentido.
- Modularidade: Permite criar componentes independentes com suas próprias variáveis, facilitando a reutilização.
- Evitar Conflitos: Reduz a chance de uma variável global afetar acidentalmente um componente que deveria ter um estilo específico.
- Temas e Variações: Facilita a criação de variações de componentes ou temas específicos para seções da página, sobrescrevendo variáveis globais localmente.
Entender o escopo é um passo fundamental para dominar as Variáveis CSS e escrever um código mais robusto e flexível. Na próxima lição, veremos como a cascata e a herança interagem com as variáveis.