Vue.js: Bind de Class & Style

Última atualização: 2026-10-20

:class e :style são os dois bindings mais comumente usados no Vue — eles permitem alternar dinamicamente nomes de classes CSS e estilos inline com base nos dados. Essencialmente, são duas formas sintáticas especiais de v-bind; por serem usados com tanta frequência, foram implementados como “açúcar sintático”.

Dominar esses 5 estilos de escrita é suficiente para cobrir 95% dos cenários: sintaxe de objetos, sintaxe de matrizes, operadores ternários, propriedades calculadas e concatenação de strings.

1. O que você vai aprender


2. Um desafio de estilo com uma etiqueta de status do pedido

(1) Problema: 5 estados, 5 instruções “if”

Alice precisava exibir 5 status de ordem no painel de administração com cores diferentes:

HTML
<!-- ❌ The "Broken" Version: 5 v-if with class -->
<span v-if="status === 'pending'" class="badge yellow">Pending</span>
<span v-else-if="status === 'paid'" class="badge green">Paid</span>
<span v-else-if="status === 'shipped'" class="badge blue">Shipped</span>
<span v-else-if="status === 'delivered'" class="badge gray">Delivered</span>
<span v-else class="badge red">Cancelled</span>

O gerente de produto Charlie:

“Alice, isso ficou feio. E se a gente adicionar mais três status no mês que vem? Não dá pra simplesmente copiar e colar. Precisamos de uma abordagem dinâmica e organizada.”

(2) Vue :class Solução: Lidar com 5 estados em apenas 1 linha

(3) Receita


3. 5 maneiras de escrever :class

(1) Sintaxe de strings

(2) Sintaxe de objetos (a mais comum)

(3) Sintaxe de matrizes

(4) Coexistência com classes estáticas

(5) Aulas sobre componentes


▶ Exemplo: 5 maneiras de escrever :class

▶ Experimente

Saída:

TEXT
String → class="badge"
Object → class="active" (isActive = true, hasError = false)
Array → class="active error"
Computed → class="active" (canEdit = true, sem cursor-not-allowed)

4. 5 maneiras de escrever :style

(1) Sintaxe de objetos

(2) Conversão de nomes de propriedades CSS

O Vue converte automaticamente as convenções de nomenclatura do JavaScript para as convenções de nomenclatura do CSS:

(3) Sintaxe de matrizes (combinação de vários objetos)

(4) Aplicação automática de prefixos

O Vue 3 adiciona automaticamente prefixos de navegador às propriedades CSS (com base no mecanismo do navegador):

JS
// Write:
{ transform: 'rotate(45deg)' }

// Vue Auto-add:
{
  -webkit-transform: 'rotate(45deg)',
  transform: 'rotate(45deg)'
}

(5) Variáveis CSS (recomendado para o Vue 3)


▶ Exemplo: 5 maneiras de escrever :style

▶ Experimente

Saída:

TEXT
Object → style="color: red; font-size: 16px"
Multi → background-color #42b883, padding 20px
CSS Var → --theme-color: #35495e no elemento
Computed → cor branca, fundo #35495e, padding 20px

5. Exercício abrangente: emblema de status do pedido

▶ Exemplo: Emblema de status do pedido

▶ Experimente

Saída:

TEXT
status="paid" → <span class="order-badge bg-green">Paid</span>
status="pending" → bg-yellow / "Pending"
status desconhecido → bg-default / "Unknown"

(1) 📊 4. 5 erros comuns

Erro Sintoma Solução
A classe String não está respondendo A classe está codificada de forma rígida e não muda Vinculada usando :class
Nome incorreto da classe de array Várias classes com o mesmo nome se sobrescrevendo mutuamente Uso da sintaxe de objeto
Unidade de estilo ausente O número 16 é interpretado como 16px e é ignorado A sequência de caracteres '16px' é exibida
Nome incorreto da propriedade CSS font-size deveria ser fontSize Use camelCase ou aspas
:conflito de classe Colisão de nomes estáticos e dinâmicos O Vue os mescla automaticamente, tudo bem

(2) 📊 5. 5 Comparações de desempenho

Implementação Resultado da compilação Desempenho Aplicabilidade
String Concatenação direta de strings ⭐⭐⭐⭐⭐ Simples
Objeto Análise estática ⭐⭐⭐⭐ Moderado
Matrizes Concatenação de strings ⭐⭐⭐⭐ Várias classes
Matrizes + Objetos Tratamento misto ⭐⭐⭐ Complexo
Propriedade calculada Valor armazenado em cache ⭐⭐⭐⭐⭐ Lógica complexa

(3) 📊 6. As 5 principais diferenças entre classe e estilo

Aspecto classe estilo
Avaliação ⭐⭐⭐⭐⭐ ⭐⭐⭐
Reutilização de CSS Fácil (reutilização de nomes de classes) Difícil (estilos dispersos)
Desempenho Superior (otimização do navegador) Ligeiramente inferior
Prioridade Depende do seletor Em linha (mais alta)
Troca de tema Fácil (alterar classe) Fácil (alterar variável CSS)

❓ Perguntas Frequentes

P As ligações de classe e de estilo podem coexistir?
R Sim. As ligações estáticas class="x" e dinâmicas :class="{active: y}" são automaticamente combinadas (resultando em class="x active" ou "x").
P Por que o atributo style precisa ser escrito como um objeto? Não posso simplesmente usar uma string de CSS?
R Sim, você pode. <div style="color: red"> é a sintaxe nativa do HTML, e <div :style="'color: red'"> também é uma abordagem baseada em string. No entanto, usar um objeto :style="{ color: 'red' }" permite que você vincule variáveis dinamicamente. Recomendamos o uso de um objeto.
P Como se usa variáveis CSS?
R Use {'--my-var': value} em :style e var(--my-var) no CSS. O Vue 3 recomenda o uso de variáveis CSS para a troca de temas, pois é mais eficiente do que vincular estilos diretamente (basta atualizar uma única variável, e o DOM não será reajustado).
P Como os componentes recebem classes externas?
R Os componentes de raiz única herdam automaticamente o atributo class (comportamento padrão do Vue 3). Os componentes de raízes múltiplas usam $attrs.class para se vincular explicitamente a um elemento específico.
P Qual é a ordem das classes na sintaxe de array?
R Elas são concatenadas na ordem em que aparecem no array, mas a ordem não afeta a especificidade do CSS (que é determinada pela especificidade dos seletores CSS).
P É possível usar :class com v-if?
R Sim. <div v-if="show" :class="{ active: isActive }"> Quando show=false, o elemento inteiro não é renderizado, e isActive não tem efeito.
P Como faço para alternar temas dinamicamente?
R Recomendamos o uso de variáveis CSS. :style="{ '--primary': theme.primary }" se aplica a todos os elementos color: var(--primary). Para alternar temas, basta alterar apenas uma variável, o que é mais eficiente do que alterar 100 classes.

📖 Resumo


📝 Exercícios

  1. Questões básicas (Dificuldade: ⭐)

    Use o seletor :class para implementar três estados do botão:

    • principal: texto branco sobre fundo azul
    • sucesso: texto branco sobre fundo verde
    • perigo: texto branco sobre fundo vermelho

    Dados: const variant = ref('primary')

  2. Problemas avançados (Dificuldade: ⭐⭐)

    Implemente uma lista de pedidos em que cada linha exiba um ícone em uma cor diferente, de acordo com o status do pedido:

    • 5 status (em espera/pago/enviado/entregue/cancelado)
    • Retornar um objeto class usando uma propriedade calculada
    • :style Adicione a cor do ícone correspondente ao status
  3. Problema desafiador (Dificuldade: ⭐⭐⭐)

    Implementar um sistema completo de troca de temas:

    1. 3 temas (claro/escuro/alto contraste)
    2. Use variáveis CSS para definir as cores do tema (primária/secundária/fundo/texto)
    3. :class — Alterar o nome da classe do tema
    4. Use o localStorage para lembrar a seleção do usuário
    5. A troca de temas não atualiza a página (o design responsivo é atualizado automaticamente)
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%