Integração do Tailwind CSS com Vue.js

A integração do Tailwind CSS com Vue.js é direta e altamente eficiente. A combinação do poder das classes utilitárias do Tailwind com a reatividade e componentização do Vue permite construir interfaces modernas, performáticas e escaláveis com rapidez. A seguir, você verá como configurar um projeto Vue com Tailwind do zero, incluindo boas práticas e exemplos para organizar seu código de forma clara e produtiva.

Criando um projeto Vue

O método mais rápido e recomendado atualmente é com o Vite:

npm create vue@latest

Siga os prompts e selecione as opções desejadas (ex: TypeScript, Pinia, Router etc).
Depois acesse o diretório:

cd nome-do-projeto
npm install

Instalando o Tailwind CSS

Execute:

npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

Configurando o Tailwind

Edite o tailwind.config.js:

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./index.html",
    "./src/**/*.{vue,js,ts}"
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

E edite ou crie o arquivo src/assets/tailwind.css:

@tailwind base;
@tailwind components;
@tailwind utilities;

No seu main.js ou main.ts, importe o CSS:

import { createApp } from 'vue'
import App from './App.vue'
import './assets/tailwind.css'

createApp(App).mount('#app')

Usando Tailwind em componentes Vue

Você pode aplicar classes utilitárias diretamente nas tags do template:

<template>
  <div class="p-6 bg-white rounded shadow max-w-md">
    <h1 class="text-2xl font-bold mb-2">Olá, Vue + Tailwind</h1>
    <p class="text-gray-600">Você está construindo interfaces com produtividade.</p>
  </div>
</template>

Organização dos estilos

Embora o Vue permita escopar estilos com <style scoped>, você pode evitar isso quando usa Tailwind, já que todas as definições estão nas classes.

Entretanto, você ainda pode usar <style> global ou @apply para criar classes personalizadas:

/* assets/components.css */
.btn {
  @apply bg-blue-600 hover:bg-blue-700 text-white font-medium px-4 py-2 rounded;
}

Importe no tailwind.css:

@import './components.css';

Use nos templates:

<button class="btn">Salvar</button>

Classes condicionais no Vue

O Vue permite alternar classes com :class (bind dinâmico):

<template>
  <button
    :class="[
      'px-4 py-2 rounded',
      ativo ? 'bg-green-600 text-white' : 'bg-gray-300 text-black'
    ]"
  >
    {{ ativo ? 'Ativo' : 'Inativo' }}
  </button>
</template>

<script setup>
const ativo = true
</script>

Dica de produtividade

Instale a extensão Tailwind CSS IntelliSense no VSCode para:

  • Autocomplete inteligente

  • Visualização de cores e tamanhos

  • Validação inline


Considerações sobre build

Ao gerar o build para produção (npm run build), o Tailwind fará automaticamente a limpeza das classes não utilizadas com base nos arquivos definidos em content.

Se você usa classes dinâmicas com interpolação de strings, utilize a opção safelist para evitar a remoção indevida.


Frameworks e bibliotecas úteis

Tailwind combina bem com:

  • Headless UI (Vue): componentes acessíveis e totalmente estilizados com Tailwind

  • VueUse: utilitários reativos que ajudam a escrever código mais limpo

  • Heroicons: ícones SVG prontos para Tailwind

  • UnoCSS (caso deseje alternativas avançadas)


Deploy rápido

Você pode fazer deploy com:

  • Vercel

  • Netlify

  • GitHub Pages (via build estático)

  • Firebase Hosting

  • Cloudflare Pages


A integração do Tailwind CSS com o Vue é fluida, poderosa e amplamente adotada na indústria. O uso de utilitárias diretamente no template melhora a velocidade de desenvolvimento e reduz dependência de arquivos CSS externos.

Updated on