Color y unidades
Un texto gris claro #bbbbbb sobre blanco tiene una relación de contraste de 1.92 a 1. WCAG pide al menos 4.5 a 1 para el texto normal.
Maneras de escribir un color
CSS acepta colores en varias notaciones, y todas terminan siendo lo mismo: cantidades de luz roja, verde y azul en la pantalla. Los colores con nombre, como red, navy o rebeccapurple, son fáciles de leer pero limitados. La notación hexadecimal escribe el rojo, el verde y el azul con dos dígitos hexadecimales cada uno, de 00 a ff (de 0 a 255): #1a5fb4 es 26 de rojo, 95 de verde y 180 de azul, un azul medio. rgb(26 95 180) dice lo mismo en decimal. hsl(210 80% 40%) describe un color por su tono (un ángulo en el círculo cromático, donde 0 es rojo, 120 verde y 240 azul), su saturación y su luminosidad, lo que facilita obtener un tono más claro u oscuro del mismo color cambiando un solo número.
color: navy; color: #1a5fb4; /* same as #1A5FB4 */ color: #36c; /* short form of #3366cc */ color: rgb(26 95 180); color: rgb(26 95 180 / 50%); /* half transparent */ color: hsl(210 80% 40%); background-color: transparent;
Un cuarto valor, después de una barra, fija el canal alfa: rgb(0 0 0 / 50%) es negro con media opacidad, así que se ve lo que hay detrás. color fija el color del texto, background-color el relleno detrás de un elemento y border-color su borde. La palabra clave currentColor significa el color del texto del elemento, algo práctico para íconos y bordes que deben coincidir con el texto.
El contraste no es opcional
Un texto con una luminosidad demasiado parecida a la de su fondo es difícil de leer para mucha gente: cualquiera con baja visión, los lectores mayores y todos los que leen el celular bajo el sol. WCAG 2.2, las pautas de accesibilidad del W3C, lo mide como una relación de contraste que va de 1 a 1 (sin diferencia) a 21 a 1 (negro sobre blanco). El criterio de conformidad 1.4.3 pide al menos 4.5 a 1 para el texto normal y 3 a 1 para el texto grande, que WCAG define como al menos 18 puntos, o 14 puntos en negrita. El gris oscuro #767676 sobre blanco pasa por poco con 4.54 a 1; #777777 no pasa por poco con 4.48. Las herramientas para desarrolladores del navegador muestran la relación cuando inspeccionas un elemento de texto, así que no hace falta adivinar.
Además, el color nunca debe ser la única forma de mostrar una información. Un formulario que marca los errores solo poniendo un borde en rojo deja fuera a quienes no ven bien el rojo; agrega también un mensaje o un ícono.
Unidades absolutas y relativas
Las longitudes necesitan una unidad, salvo el cero. px es el píxel CSS, una unidad fija; en pantallas de alta densidad un píxel CSS ocupa varios píxeles físicos, así que a la vista mantiene más o menos el mismo tamaño. Las unidades relativas cambian según otra cosa. em es relativa al tamaño de letra del propio elemento, así que padding: 0.5em en un texto de 20 píxeles son 10 píxeles. rem es relativa al tamaño de letra de la raíz (html), que en los navegadores es de 16 píxeles a menos que el lector lo haya cambiado, así que 1.25rem son normalmente 20 píxeles. % es relativo al padre, normalmente a su ancho. vw y vh son centésimas del ancho y del alto de la ventana gráfica, y ch es más o menos el ancho del dígito cero en la fuente actual.
¿Cuál usar? Dar el tamaño del texto en rem respeta al lector: si alguien configura su navegador con letra más grande, todo lo que está en rem crece con ella, mientras que el texto fijado en px puede no hacerlo. El padding en em crece con el texto que rodea. Los píxeles sirven para lo que no debe cambiar de escala, como un borde de 1 píxel.
| color hexadecimal | #rrggbb, cada par de 00 a ff |
| hsl() | Ángulo de tono, saturación %, luminosidad % |
| alfa | Opacidad, después de una barra: rgb(0 0 0 / 50%) |
| relación de contraste | 4.5:1 texto normal, 3:1 texto grande (WCAG 1.4.3) |
| px | Píxel CSS, fijo |
| em | Relativa al tamaño de letra del elemento |
| rem | Relativa al tamaño de letra de la raíz (16px por defecto) |
| vw / vh | 1% del ancho / alto de la ventana gráfica |
- ¿Cuánto rojo hay en
#ff8000, en una escala de 0 a 255? - ¿Cuánto verde hay en
#ff8000? - En hsl(), ¿qué ángulo de tono es el verde puro?
- ¿Qué relación de contraste mínima pide WCAG 1.4.3 para el texto normal?
- 4.5 to 1
- 3 to 1
- 7 to 1
- ¿#777777 sobre blanco cumple el requisito de 4.5 a 1?
- No, da 4.48 a 1
- Sí, da 4.54 a 1
- Sí, cualquier gris pasa
- El tamaño de letra de la raíz es 16px. ¿Cuántos píxeles son 1.5rem?
- Un elemento tiene font-size: 20px y padding: 0.5em. ¿Cuántos píxeles de padding tiene?
- La ventana gráfica mide 400px de ancho. ¿Cuánto mide 50vw?
- ¿Por qué dar el tamaño del texto en rem y no en px?
- Sigue la configuración de tamaño de texto del navegador del lector
- Siempre es más pequeño
- Carga más rápido
- Un formulario marca los errores solo con un borde rojo. ¿Qué falta?
- Un mensaje o un ícono, porque el color solo no basta
- Un rojo más oscuro
- Nada
- Colores con nombre, hexadecimales, rgb() y hsl(); una barra agrega alfa.
- WCAG 1.4.3: 4.5:1 para el texto normal, 3:1 para el texto grande; nunca solo el color.
- px es fijo; em sigue el tamaño de letra del elemento; rem sigue el de la raíz (16px por defecto).
Fuentes de este curso (6)
- W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
- MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
- W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
- W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
- 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
- every code exercise checked with a Playwright probe against a reference solution.
Fecha de consulta: 2026-10-17