Tailwind CSS
El framework CSS utility-first que revoluciona cómo construimos interfaces. Clases pequeñas, poder ilimitado.
🌬️ ¿Qué es Tailwind CSS?
Definición
Framework CSS utility-first. En lugar de componentes prediseñados, aplicas clases utilitarias directamente en el HTML.
"No necesitas escribir CSS personalizado, solo combinas clases."
Historia
Creado por Adam Wathan y Steve Schoger (2017). Nació de la frustración con metodologías como BEM y Bootstrap. v3 usa JIT (Just-In-Time) compiler.
Utility-First
Cada clase hace UNA sola cosa pequeña (flex, p-4, text-lg). Combinadas construyen interfaces complejas sin escribir CSS propio.
Ventajas Clave
- 🔵 No naming de clases CSS
- 🔵 Diseño directamente en HTML
- 🔵 Purga CSS automática (solo genera lo que usas)
- 🔵 Sistema de diseño consistente
- 🔵 Dark mode con
dark:prefix - 🔵 Responsive con
sm: md: lg: xl:
⚖️ Tailwind vs CSS Tradicional
| Aspecto | CSS Tradicional | Tailwind CSS |
|---|---|---|
| Dónde escribes estilos | En archivos .css separados |
Directamente en el HTML |
| Naming de clases | Debes inventar nombres (BEM, etc.) | No necesitas nombrar nada |
| Reutilización | Con componentes CSS | Con componentes de framework (React/Vue) |
| Tamaño del bundle | Todo el CSS que escribas | Solo las clases que USAS (purga JIT) |
| Curva de aprendizaje | Baja si ya sabes CSS | Media (memorizar clases utilitarias) |
| Consistencia visual | Depende del desarrollador | Sistema de diseño integrado ✓ |
⬇️ Métodos de Instalación
CDN — Prueba rápida (sin configuración)
Ideal para prototipos y aprendizaje. Solo agrega un <script> en el <head>.
No recomendado para producción porque carga TODO Tailwind sin purgar.
<script src="https://cdn.tailwindcss.com"></script>
NPM — Proyecto Real (Recomendado)
Instalación completa con JIT compiler. Genera solo el CSS que usas.
# Instalar Tailwind
npm install -D tailwindcss
npx tailwindcss init
module.exports = {
content: ["./src/**/*.{html,js}"],
theme: { extend: {} },
plugins: [],
}
npx tailwindcss -i ./src/input.css -o ./dist/output.css --watch
Vite + Tailwind (Framework moderno)
Setup recomendado para proyectos con React, Vue o Astro.
npm create vite@latest mi-app -- --template vanilla
cd mi-app && npm install
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
Astro + Tailwind
Astro tiene integración oficial con Tailwind. Se instala en un solo comando con el CLI de Astro.
# Crear proyecto Astro
npm create astro@latest mi-app
cd mi-app
# Agregar integración oficial de Tailwind
npx astro add tailwind
Esto configura automáticamente tailwind.config.mjs y astro.config.mjs. ¡Sin pasos manuales!
Vue 3 + Tailwind
Con Vite como bundler, Vue y Tailwind se integran perfectamente en pocos pasos.
# Crear proyecto Vue con Vite
npm create vite@latest mi-app -- --template vue
cd mi-app && npm install
# Instalar Tailwind + dependencias
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
module.exports = {
content: ["./index.html", "./src/**/*.{vue,js,ts}"],
theme: { extend: {} },
plugins: [],
}
Agrega @tailwind base; @tailwind components; @tailwind utilities; en src/style.css e impórtalo en main.js.
Angular + Tailwind
Angular CLI permite agregar Tailwind usando ng add o con instalación manual desde Angular 11.2+.
# Crear proyecto Angular
npm install -g @angular/cli
ng new mi-app && cd mi-app
# Instalar Tailwind
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init
module.exports = {
content: ["./src/**/*.{html,ts}"],
theme: { extend: {} },
plugins: [],
}
Agrega las directivas @tailwind en src/styles.css (el archivo de estilos global de Angular).
📄 Estructura CSS Base
@tailwind base;
@tailwind components;
@tailwind utilities;
🧰 Clases Utilitarias Esenciales
📱 Diseño Responsive
Tailwind es mobile-first. Las clases sin prefijo aplican a TODOS los tamaños. Los prefijos
sm:
md:
lg:
xl:
2xl:
aplican SOLO desde ese breakpoint hacia arriba.
🧪 Ejemplos Responsive
Grid Responsive
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4">
<div class="bg-sky-500 p-4 rounded-lg">Columna 1</div>
<div class="bg-sky-500 p-4 rounded-lg">Columna 2</div>
<div class="bg-sky-500 p-4 rounded-lg">Columna 3</div>
</div>
Tipografía Responsive
<h1 class="text-2xl md:text-4xl lg:text-6xl font-bold">
Título que crece con la pantalla
</h1>
<p class="text-sm md:text-base lg:text-lg text-gray-400">
Texto que también se adapta
</p>
Flex que cambia de dirección
<div class="flex flex-col md:flex-row items-center gap-6">
<img class="w-full md:w-48 rounded-xl" src="..." alt=""/>
<div>
<h2 class="text-xl font-bold">Título</h2>
<p class="text-gray-400">En móvil imagen arriba, en desktop al lado.</p>
</div>
</div>
🌙 Dark Mode en Tailwind
Tailwind soporta dark mode con el prefijo dark:.
Configuras si se activa automáticamente (según preferencia del OS) o manualmente (con clase .dark en <html>).
Configurar Dark Mode en tailwind.config.js
module.exports = { darkMode: 'class', ... }
Con 'class': agregas la clase dark al <html> desde JS.
Con 'media': usa prefers-color-scheme del sistema automáticamente.
Usando el prefix dark: en clases
<div class="bg-white dark:bg-slate-900 text-gray-900 dark:text-white p-6 rounded-xl">
<h2 class="text-xl font-bold text-sky-600 dark:text-sky-400">Título</h2>
<p class="text-gray-600 dark:text-gray-300">
Este texto cambia de color según el tema.
</p>
<button class="bg-sky-500 hover:bg-sky-600 dark:bg-sky-600
dark:hover:bg-sky-500 text-white px-4 py-2 rounded-lg">
Botón adaptable
</button>
</div>
🛠️ Proyecto Práctico — Card de Perfil
Construye una card de perfil completa usando solo Tailwind.
<div class="max-w-sm mx-auto bg-white dark:bg-slate-800
rounded-2xl shadow-xl overflow-hidden">
<!-- Banner superior -->
<div class="h-24 bg-gradient-to-r from-sky-400 to-purple-500"></div>
<div class="px-6 pb-6 -mt-10">
<img class="w-20 h-20 rounded-full border-4 border-white
dark:border-slate-800 object-cover"
src="https://i.pravatar.cc/80" alt="Avatar"/>
<h2 class="mt-3 text-xl font-bold text-gray-900 dark:text-white">
Jordy Prada
</h2>
<p class="text-sm text-gray-500 dark:text-gray-400">
Full Stack Developer · UFPS
</p>
<div class="flex gap-2 mt-4">
<span class="bg-sky-100 dark:bg-sky-900 text-sky-700
dark:text-sky-300 text-xs px-3 py-1 rounded-full">
JavaScript
</span>
<span class="bg-purple-100 dark:bg-purple-900 text-purple-700
dark:text-purple-300 text-xs px-3 py-1 rounded-full">
Tailwind
</span>
<span class="bg-green-100 dark:bg-green-900 text-green-700
dark:text-green-300 text-xs px-3 py-1 rounded-full">
React
</span>
</div>
<button class="mt-5 w-full bg-sky-500 hover:bg-sky-600 text-white
font-semibold py-2 rounded-xl transition duration-200">
Ver Portafolio
</button>
</div>
</div>