Introducción y configuración
Tailwind CSS es un framework de utilities: clases pequeñas (flex, pt-4, text-center) que se componen en el markup. No es una librería de botones o cards. El CSS que llega al navegador se genera en build a partir de las clases que aparecen en el código; no hay runtime que calcule estilos.
Documentación: instalación, Vite, CLI, detección de clases.
Utility-first, en una frase
En CSS clásico inventas .ficha-titulo. En Tailwind pones text-lg font-semibold tracking-tight donde se usa. El capítulo 2 desarrolla la filosofía; aquí basta el modelo: tokens → utilities → HTML.
Cómo detecta clases
Tailwind trata los ficheros como texto. Busca tokens que parezcan nombres de clase y genera el CSS correspondiente. No ejecuta tu JS: si construyes el nombre a trozos, no existe la cadena completa y esa utility no sale en el CSS.
// No: el scanner no ve bg-green-500 ni bg-red-500
const color = `bg-${variant}-500`
const variantes = {
success: 'bg-green-500',
danger: 'bg-red-500',
}Por defecto escanea el proyecto salvo .gitignore, node_modules, binarios y CSS. @source sirve cuando sí quieres escanear algo ignorado (p. ej. un paquete UI en node_modules):
@import "tailwindcss";
@source "../node_modules/@acme/ui";No lo uses “por si acaso” en un app Vite normal.
Instalación actual (CSS-first)
El CSS de entrada es una línea. No empieces un proyecto nuevo con @tailwind base; @tailwind components; @tailwind utilities; ni con npx tailwindcss init (eso es el flujo v3).
@import "tailwindcss";Vite (recomendado si ya usas Vite)
npm install tailwindcss @tailwindcss/viteimport { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})Importa el CSS en el entry (import './style.css'). El plugin sustituye el PostCSS + Autoprefixer del setup v3.
CLI
Cuando no hay bundler (HTML estático, prototipo):
npm install tailwindcss @tailwindcss/cli
npx @tailwindcss/cli -i ./src/input.css -o ./src/output.css --watchEnlaza output.css en el HTML. Misma hoja con @import "tailwindcss";.
Hay guías por framework (Next, Nuxt, SvelteKit, Laravel…): el patrón es el mismo import; el plugin de build cambia. Capítulo 8.
Un proyecto v3 sigue con tailwind.config.js y content: [...]. Para código nuevo, este manual usa el modelo v4. Migración: upgrade guide y @config si aún arrastras JS.
Errores habituales
- Concatenar
bg-${color}-500. - Copiar un
tailwind.config.jsde un tutorial de 2023 en un repo v4. - Olvidar el viewport meta:
width=device-width(capítulo 3).
Buenas prácticas
- Un CSS global con
@import "tailwindcss"; tokens en@theme(capítulo 7). - Clases completas en el source.
- Tailwind no sustituye HTML semántico ni contraste.
Ejercicio
- Monta Vite + plugin y pinta
text-3xl font-bold. - Reproduce el anti-patrón
bg-${x}-500y comprueba que el fondo no existe en el CSS generado. - Lee Detecting classes in source files.
Siguiente paso
Continúa con Utility-first.
