Estilos no DOM
Depois de aprender a mudar conteúdo e estrutura da página com JS, o próximo passo é controlar estilos — fazer elementos mudar de cor, mostrar/esconder ou trocar temas. CSS cuida de estilos estáticos, JS cuida de estilos dinâmicos, e juntos eles permitem interatividade.
Propriedade style
element.style corresponde ao estilo inline do HTML (style="..."). Só lê/escreve estilos inline — não consegue acessar regras definidas em arquivos CSS ou tags <style>.
<div id="box">Olá Estilo</div>
<script>
const element = document.getElementById('box');
element.style.color = 'red';
element.style.fontSize = '20px'; // Obs: CSS font-size → JS fontSize
</script>
background-color → backgroundColor, font-size → fontSize. Esta é uma das armadilhas mais comuns para iniciantes.
Exemplo: Lendo e Escrevendo a Propriedade style
<div id="box" style="color: blue;">Olá Estilo</div>
<script>
const box = document.getElementById('box');
console.log('Cor atual:', box.style.color);
box.style.color = 'red';
box.style.fontSize = '24px';
box.style.backgroundColor = '#f0f0f0';
box.style.padding = '10px';
box.style.borderRadius = '8px';
</script>
className e classList
Manipular a class de um elemento é a forma mais comum de mudar estilos com JS — você pré-define classes no CSS, e o JS apenas adiciona ou remove nomes de classes.
className
className é uma string, e atribuir a ela sobrescreve todas as classes existentes.
<div id="demo1" class="item">Elemento 1</div>
<div id="demo2" class="item">Elemento 2</div>
<script>
const el1 = document.getElementById('demo1');
el1.className = 'active'; // Sobrescreve, apenas 'active' permanece
const el2 = document.getElementById('demo2');
el2.className += ' highlight'; // Adiciona, mas é primitivo e propenso a erros
console.log('el1.className:', el1.className);
console.log('el2.className:', el2.className);
</script>
className é como restaurar as configurações de fábrica do celular e depois instalar novos apps — tudo que havia antes some. Na maioria dos casos, classList é mais seguro.
classList
classList é um objeto DOMTokenList que fornece métodos para adicionar, remover e trocar classes sem afetar outras classes.
| Método | Descrição |
|---|---|
add('cls') |
Adicionar classe |
remove('cls') |
Remover classe |
toggle('cls') |
Remover se presente, adicionar se ausente |
contains('cls') |
Verificar se a classe existe, retorna booleano |
Exemplo: Troca de Tema
<style>
.dark { background: #222; color: #fff; }
.light { background: #fff; color: #222; }
body { transition: background 0.3s, color 0.3s; padding: 20px; }
</style>
<body class="light">
<h2>Demo de Troca de Tema</h2>
<p>Clique no botão para alternar entre temas claro e escuro</p>
<button id="toggleBtn">Trocar Tema</button>
</body>
<script>
const body = document.body;
const btn = document.getElementById('toggleBtn');
btn.addEventListener('click', function() {
body.classList.toggle('dark');
body.classList.toggle('light');
});
</script>
Exemplo: Mostrar e Esconder
<style>
.hidden { display: none; }
.panel { border: 1px solid #ccc; padding: 15px; margin-top: 10px; }
</style>
<button id="togglePanel">Mostrar/Esconder Painel</button>
<div id="panel" class="panel">Este é o conteúdo do painel</div>
<script>
const panel = document.getElementById('panel');
const btn = document.getElementById('togglePanel');
btn.addEventListener('click', function() {
panel.classList.toggle('hidden');
btn.textContent = panel.classList.contains('hidden') ? 'Mostrar Painel' : 'Esconder Painel';
});
</script>
getComputedStyle
element.style só lê estilos inline. Como ler estilos definidos em arquivos CSS ou tags <style>? A resposta é getComputedStyle.
<div id="box">Elemento de Teste</div>
<script>
const element = document.getElementById('box');
const style = window.getComputedStyle(element);
console.log(style.color); // "rgb(0, 0, 0)"
console.log(style.fontSize); // "16px"
</script>
getComputedStyle retorna o estilo computado final do elemento — o resultado do navegador mesclando todas as fontes CSS (inline, tags style, arquivos CSS, herança). O valor retornado é somente leitura.
Exemplo: Obtendo Estilos Computados
<style>
#measured { font-size: 18px; color: green; margin: 20px; }
</style>
<div id="measured">Meça meus estilos</div>
<script>
const el = document.getElementById('measured');
console.log('cor do atributo style:', el.style.color);
console.log('cor do estilo computado:', getComputedStyle(el).color);
console.log('fontSize do estilo computado:', getComputedStyle(el).fontSize);
console.log('margem do estilo computado:', getComputedStyle(el).margin);
</script>
Estilização em Lote com cssText
Se você precisa definir múltiplos estilos inline em um elemento de uma vez, escrever style.xxx = ... linha por linha é verboso. cssText permite escrever tudo de uma vez.
<div id="box">Estilização em Lote</div>
<script>
const element = document.getElementById('box');
element.style.cssText = 'color: red; font-size: 20px; padding: 10px;';
</script>
cssText substitui todos os estilos inline existentes. Para adicionar, use +=: element.style.cssText += '; color: red;'.
Exemplo: Estilização em Lote com cssText
<div id="box">Estilização em Lote</div>
<script>
const box = document.getElementById('box');
box.style.cssText = 'color: white; background: #4CAF50; padding: 15px; border-radius: 8px; font-size: 18px; text-align: center;';
</script>
📖 Resumo
element.stylesó opera em estilos inline; não lê regras de arquivos CSS. Nomes de propriedades devem usar camelCase ao escrever.- Atribuição de
classNamesobrescreve todas as classes. UsarclassListcomadd/remove/toggleé mais seguro. getComputedStylelê o estilo computado final do elemento; o valor retornado é somente leitura.cssTextdefine estilos inline em lote, mas a substituição substitui estilos inline existentes.
❓ Perguntas Frequentes
P: Por que
element.style.colornão consegue ler a cor definida em um arquivo CSS? R: A propriedadestylecorresponde apenas aostyle="..."inline. Regras de arquivos CSS e tags<style>estão fora do seu escopo. UsegetComputedStyle(element).colorpara ler o valor final.
P:
classList.togglepode adicionar ou remover condicionalmente? R: Sim.classList.toggle('cls', force)recebe um segundo parâmetro:trueforça adicionar,falseforça remover. É equivalente aforce ? add : remove.
P: Devo usar
styleouclassListpara modificar estilos? R: A regra é simples: usestylepara alterações de estilo temporárias e pontuais, useclassListcom classes CSS para troca de estado/tema. Este último mantém os estilos no CSS e a lógica no JS, facilitando a manutenção.
📝 Atividades
- Básico: Crie uma página com 3 botões (vermelho/verde/azul). Quando clicados, use
style.backgroundColorpara mudar a cor de fundo da página. - Intermediário: Use
classList.togglepara implementar um recurso de "destaque" — clique em um parágrafo para alternar uma classe de destaque (fundo amarelo), clique novamente para remover. - Desafio: Implemente um simples "modo noturno" — alterne com um botão, use
getComputedStylepara ler a cor de fundo atual e determinar o modo, e exiba "Modo atual: Dia/Noite" na página.



