Guía de paletas y combinaciones de color: de la teoría del color a la combinación profesional de UI en la práctica
Fundamentos de la teoría del color
Modelo de color HSL
H (Hue) Tono: 0-360°, ángulo en el círculo cromático
S (Saturation) Saturación: 0-100%, gris → color puro
L (Lightness) Luminosidad: 0-100%, negro → blanco
| Valor de tono | Color |
|---|---|
| 0° / 360° | Rojo |
| 60° | Amarillo |
| 120° | Verde |
| 180° | Cian |
| 240° | Azul |
| 300° | Magenta |
Círculo cromático
0° Rojo
300° 60°
Magenta Amarillo
240° 120°
Azul Verde
180° Cian
Cinco esquemas clásicos de combinación de color
1. Combinación monocromática (Monochromatic)
Mismo tono, diferente saturación y luminosidad.
:root {
--primary-50: hsl(220, 100%, 97%); /* Azul extremadamente claro */
--primary-100: hsl(220, 100%, 94%);
--primary-200: hsl(220, 100%, 88%);
--primary-300: hsl(220, 100%, 78%);
--primary-400: hsl(220, 100%, 68%);
--primary-500: hsl(220, 100%, 58%); /* Azul base */
--primary-600: hsl(220, 100%, 48%);
--primary-700: hsl(220, 100%, 38%);
--primary-800: hsl(220, 100%, 28%);
--primary-900: hsl(220, 100%, 18%); /* Azul extremadamente oscuro */
}
Aplicación: Simple, profesional, fuerte identidad de marca
2. Combinación análoga (Analogous)
Colores adyacentes a 30° en el círculo cromático.
:root {
--analogous-1: hsl(200, 80%, 50%); /* Azul */
--analogous-2: hsl(220, 80%, 50%); /* Azul-violeta */
--analogous-3: hsl(240, 80%, 50%); /* Violeta */
}
Aplicación: Armónico, natural, cálido
3. Combinación complementaria (Complementary)
Colores opuestos a 180° en el círculo cromático.
:root {
--primary: hsl(220, 80%, 55%); /* Azul */
--complement: hsl(40, 80%, 55%); /* Naranja */
}
Aplicación: Alto contraste, llamativo, botones CTA
4. Combinación triádica (Triadic)
Tres colores equidistantes a 120° en el círculo cromático.
:root {
--triadic-1: hsl(0, 70%, 55%); /* Rojo */
--triadic-2: hsl(120, 70%, 55%); /* Verde */
--triadic-3: hsl(240, 70%, 55%); /* Azul */
}
Aplicación: Vivo, colorido, productos infantiles
5. Combinación complementaria dividida (Split-Complementary)
30° a cada lado del color complementario.
:root {
--primary: hsl(220, 80%, 55%); /* Azul */
--split-1: hsl(10, 80%, 55%); /* Rojo-naranja */
--split-2: hsl(50, 80%, 55%); /* Amarillo-naranja */
}
Aplicación: Rico pero no caótico, más suave que la complementaria
Estándares de contraste WCAG
Cálculo del contraste
Contraste = (L1 + 0.05) / (L2 + 0.05)
L1 = Luminancia relativa del color más claro
L2 = Luminancia relativa del color más oscuro
Cálculo de luminancia relativa:
L = 0.2126 × R + 0.7152 × G + 0.0722 × B
(R/G/B deben linealizarse primero en sRGB)
Estándar WCAG 2.1
| Nivel | Texto del cuerpo | Texto grande | Componentes UI |
|---|---|---|---|
| AA | 4.5:1 | 3:1 | 3:1 |
| AAA | 7:1 | 4.5:1 | - |
Texto grande: ≥18pt (24px) o ≥14pt negrita
Verificar contraste con JavaScript
function getContrastRatio(color1: string, color2: string): number {
const l1 = getRelativeLuminance(color1);
const l2 = getRelativeLuminance(color2);
const lighter = Math.max(l1, l2);
const darker = Math.min(l1, l2);
return (lighter + 0.05) / (darker + 0.05);
}
function getRelativeLuminance(hex: string): number {
const rgb = hexToRgb(hex);
const [r, g, b] = [rgb.r / 255, rgb.g / 255, rgb.b / 255]
.map(c => c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4));
return 0.2126 * r + 0.7152 * g + 0.0722 * b;
}
function meetsWcagAA(fg: string, bg: string, isLargeText = false): boolean {
const ratio = getContrastRatio(fg, bg);
return isLargeText ? ratio >= 3 : ratio >= 4.5;
}
Generación de paletas profesionales
Escalas de color estilo Tailwind CSS
function generatePalette(baseHue: number, baseSat: number) {
const lightnesses = [97, 94, 88, 78, 68, 58, 48, 38, 28, 18];
return lightnesses.map((l, i) => ({
name: `${(i) * 100}`,
value: `hsl(${baseHue}, ${baseSat}%, ${l}%)`,
}));
}
// Generar paleta azul
const bluePalette = generatePalette(220, 80);
// 50: hsl(220, 80%, 97%)
// 100: hsl(220, 80%, 94%)
// ...
// 900: hsl(220, 80%, 18%)
Espacio de color OKLCH (más uniforme)
/* OKLCH es perceptualmente más uniforme que HSL */
:root {
--blue-50: oklch(97% 0.01 250);
--blue-500: oklch(62% 0.19 250);
--blue-900: oklch(30% 0.12 250);
}
| Espacio de color | Uniformidad perceptual | Soporte de navegadores |
|---|---|---|
| HSL | ❌ No uniforme | Todos |
| OKLCH | ✅ Uniforme | Chrome 111+, Safari 15.4+ |
| OKLAB | ✅ Uniforme | Chrome 111+, Safari 15.4+ |
Combinación de colores en modo oscuro
/* Modo claro */
:root {
--bg: #ffffff;
--surface: #f5f5f5;
--text: #1f2937;
--text-secondary: #6b7280;
--border: #e5e7eb;
}
/* Modo oscuro: no simplemente invertir, sino reducir el contraste */
[data-theme="dark"] {
--bg: #111827;
--surface: #1f2937;
--text: #f9fafb;
--text-secondary: #9ca3af;
--border: #374151;
}
Principios de combinación en modo oscuro
- No usar negro puro
#000: Usar grises oscuros como#111827 - Reducir la saturación del color principal: Alta saturación en modo oscuro es deslumbrante
- Mantener contraste ≥ 4.5:1: Estándar WCAG AA
- Reemplazar sombras por capas de fondo más oscuras: Las sombras no son visibles en modo oscuro
Referencia de paletas clásicas
Tecnología/SaaS
Color principal: #3b82f6 (Azul 500)
Color secundario: #8b5cf6 (Violeta 500)
Acento: #06b6d4 (Cian 500)
Fondo: #f8fafc
Texto: #0f172a
E-commerce/Consumo
Color principal: #f97316 (Naranja 500)
Color secundario: #ef4444 (Rojo 500)
Acento: #22c55e (Verde 500)
Fondo: #ffffff
Texto: #1f2937
Finanzas/Profesional
Color principal: #1e40af (Azul 800)
Color secundario: #059669 (Verde 600)
Acento: #d97706 (Ámbar 600)
Fondo: #f9fafb
Texto: #111827
Generación de combinaciones con ToolsKu
- Abre la herramienta de conversión de color o el generador de degradados
- Selecciona el color base
- Genera automáticamente la escala de colores (50-900)
- Verifica si el contraste cumple con WCAG AA
- Previsualiza el efecto en modo oscuro
- Copia el código de variables CSS
Preguntas frecuentes
¿Por qué mi combinación de colores se ve "sucia"?
HSL tiene una percepción de saturación inconsistente en luminosidades altas/bajas. Usa el espacio de color OKLCH para generar escalas de color más limpias.
¿Los colores son demasiado llamativos en modo oscuro?
Reduce la saturación un 20-30%, aumenta la luminosidad un 5-10%:
/* Modo claro */
--primary: hsl(220, 80%, 55%);
/* Modo oscuro: reducir saturación */
--primary: hsl(220, 60%, 65%);
¿Cómo asegurar que sea amigable para daltónicos?
- No confiar solo en el color para transmitir información (agregar iconos/texto)
- La combinación rojo-verde no es amigable para daltónicos, usar azul-naranja como alternativa
- Probar con el simulador de daltonismo
Resumen
Una buena combinación de colores proviene de la teoría del color + estándares de contraste + pruebas prácticas. Dominar los cinco esquemas clásicos de combinación, los estándares de contraste WCAG y el espacio de color OKLCH te permitirá generar paletas de nivel profesional. Recuerda: la combinación de colores no es arte, es ingeniería — hay estándares que seguir, herramientas que medir.