Skip to content

Tailwind

Tailwind CSS

Tailwind CSS es un framework utility-first que proporciona clases de bajo nivel para construir interfaces web directamente en el HTML. Permite una gran flexibilidad, rapidez de desarrollo y consistencia visual.


✅ Ventajas de usar Tailwind

  • 🔧 CSS Utility-first: clases reutilizables para cada propiedad de estilo.
  • 🎨 Configuración personalizada: puedes adaptar el tema a tus necesidades.
  • Compilación optimizada: elimina clases no utilizadas (purge) y reduce el tamaño final del CSS.
  • 🏗️ Maquetación directa en HTML: no necesitas escribir CSS personalizado para todo.
  • 📦 Consistencia visual: diseño sistematizado mediante escalas predefinidas.
  • 🔁 Fomenta la componetización de la UI.
  • 📋 Componentes reutilizables de proyectos como Flowbite, DaisyUI, etc.

❌ Desventajas de Tailwind

  • 🧱 HTML verboso con muchas clases.
  • 👀 Difícil de leer al principio si no estás familiarizado.
  • 🧹 Mantenimiento de clases complejo en proyectos grandes.
  • 📘 Curva de aprendizaje para principiantes.
  • 🔧 Dependencia de herramientas externas.
  • 🧪 Requiere configuración inicial para aprovechar todo su potencial.
  • 🏷️ Pérdida de semántica: se tiende a usar <div> con clases en lugar de etiquetas semánticas (<card>, <section>, etc.).

🚀 Instalación de Tailwind CSS

🔹 Opción rápida (CDN - Solo para pruebas)

<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>

⚠️ No recomendado para producción.


🔹 Instalación en un proyecto (Vite o CLI)

Terminal window
# Vite
npm install tailwindcss @tailwindcss/vite
# CLI standalone
npm install -D tailwindcss @tailwindcss/cli
npx tailwindcss init

⚙️ Configuración básica

Vite Plugin (vite.config.js)

import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})

Archivo de entrada input.css

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

Comando para compilar

Terminal window
npx tailwindcss -i ./input.css -o ./assets/output.css --watch
  • Quita el script CDN si lo usabas.
  • Asegúrate de importar output.css en tu HTML.

🧠 IntelliSense en VSCode

Instala la extensión Tailwind CSS IntelliSense para autocompletado, documentación emergente y más.

Además, si @theme da error en los .css, ya que es algo propio de tailwind y no de css asocia los archivos css a tailwind:

.vscode/settings.json
{
"files.associations": {
"*.css": "tailwindcss"
}
}

🎨 Customización del tema

Tailwind permite modificar su tema predeterminado desde el archivo tailwind.config.js.

Variables personalizadas

@theme {
--color-custom: #09f;
--font-inter: 'Inter', sans-serif;
}

@apply para clases reutilizables

.custom-button {
@apply p-2 size-10 xs:size-12 flex items-center justify-center rounded-full hover:scale-110 transition-transform;
}

🅰️ Añadir fuentes personalizadas

@font-face {
font-family: 'Inter';
src: url('https://fonts.gstatic.com/s/inter/v3/UcCo7F8a1b4d5f6e2a4c.woff2') format('woff2');
font-weight: 400;
font-style: normal;
font-display: swap;
}

Luego la puedes poner en el tema y usarla en tu CSS:

@theme {
--font-inter: 'Inter', sans-serif;
}

🌀 Animaciones

Animaciones personalizadas

Puedes definir animaciones con @keyframes y aplicar con @apply:

@keyframes wiggle {
0%,
100% {
transform: rotate(-3deg);
}
50% {
transform: rotate(3deg);
}
}
.wiggle {
@apply animate-wiggle;
}

Plugin de animaciones

Terminal window
npm install @midudev/tailwind-animations

Configuración:

tailwind.config.js
import animations from '@midudev/tailwind-animations'
export default {
plugins: [animations],
}
input.css
@plugin '@midudev/tailwind-animations';

📝 Plugins útiles


📐 Breakpoints

Tailwind usa estas media queries por defecto:

ClaveTamaño mínimo
sm640px
md768px
lg1024px
xl1280px
2xl1536px

👥 Utilidad group y peer

Permite aplicar estilos a elementos hijos o hermanos cuando un evento ocurre:

<div class="group">
<button class="group-hover:rotate-12 transition-transform">Hover me</button>
</div>

Cheat Sheet

📦 Layout

ClaseDescripción
containerContenedor responsivo
box-borderModelo de caja border-box
box-contentModelo de caja content-box
block inline inline-blockComportamiento de display
flex inline-flexContenedor flex
gridContenedor grid
hiddenOculta el elemento

🧭 Flexbox & Grid

ClaseDescripción
flex-row flex-colDirección de los elementos
items-centerAlineación vertical
justify-centerAlineación horizontal
gap-x-4 gap-y-2Espaciado entre items
grid-cols-3N° de columnas en grid

📐 Spacing

ClaseDescripción
m-4 mt-2Margen
p-4 px-2Relleno (padding)
space-x-4Espaciado horizontal entre hijos
space-y-4Espaciado vertical entre hijos

📏 Sizing

ClaseDescripción
w-1/2Ancho 50%
h-64Altura fija (ej. 16rem)
min-w-fullAncho mínimo completo
max-h-screenAltura máxima pantalla

🎨 Color

ClaseDescripción
bg-blue-500Fondo azul
text-whiteTexto blanco
border-red-300Borde rojo
placeholder-gray-400Placeholder gris

🔤 Tipografía

ClaseDescripción
text-sm text-2xlTamaño de texto
font-boldNegrita
italicCursiva
tracking-wideEspaciado entre letras
leading-tightAltura de línea
text-centerAlineación centrada

🧱 Borders & Radius

ClaseDescripción
border border-2Ancho de borde
border-gray-300Color del borde
rounded rounded-lgBordes redondeados
divide-x divide-yLíneas divisorias

🧊 Efectos visuales

ClaseDescripción
shadow shadow-lgSombra del elemento
opacity-50Opacidad
blur-smDesenfoque (blur)
transitionTransición CSS
duration-300Duración de transición
hover:bg-gray-100Hover/focus state

🖱️ Interacción

ClaseDescripción
cursor-pointerCambia el cursor a “mano”
select-noneNo se puede seleccionar texto
pointer-events-noneDesactiva interacción

🧑‍💻 Responsive

SufijosDispositivos
sm:>= 640px
md:>= 768px
lg:>= 1024px
xl:>= 1280px
2xl:>= 1536px