Guía educativa de accent-color
Da color a los controles sin reconstruirlos
accent-color propone un acento para los controles nativos. El navegador conserva su forma, interacción y estados; tú eliges el color y compruebas el resultado.
Modelo mental
Un acento heredable, no una pintura completa del control.
Acepta auto o un color. auto deja la elección al navegador: no promete un tono concreto ni reproducir siempre el acento del sistema. La propiedad se hereda, así que puedes establecerla en un contenedor; una declaración aplicada directamente al input tiene prioridad sobre el valor heredado.
Se aplica a las partes que el navegador dibuja con un acento. No define la forma, el tamaño, todos los fondos ni el indicador de foco. Conserva la apariencia nativa: quitarla con appearance: none puede eliminar la parte que esperabas teñir.
Controles y estados
Prueba checkbox, radio, range y progress con una sola declaración.
Son los cuatro controles documentados actualmente. Marca y desmarca las casillas, cambia de plan con las flechas y ajusta el deslizador. No todos los estados usan el acento: un control sin marcar o deshabilitado puede conservar colores del navegador. progress representa aquí un 60% fijo; mover el rango no lo actualiza.
Un acento compartido y una excepción con auto
accent-color: inherit en los controles hace explícita la herencia incluso si otra regla general les asigna un acento. Los nombres del grupo de radios son exclusivos de este ejemplo. El estado indeterminado de una casilla se establece con JavaScript; accent-color solo participa en su presentación.
Temas y contraste
El mismo control necesita revisarse sobre sus fondos reales.
color-scheme comunica qué esquemas admite una zona y afecta a la apariencia nativa; no cambia por sí solo todos tus colores de autor. Esta comparación fuerza light y dark en dos grupos, usa Canvas/CanvasText para sus superficies y elige un acento para cada uno. En una página que admite ambos esquemas, color-scheme: light dark permite seguir la preferencia del usuario.
Comparación nativa en claro y oscuro
El navegador puede ajustar el acento o el color de la marca para mantener legibilidad, pero no es una garantía de contraste accesible. Comprueba marca, borde, fondo y foco en los estados pertinentes y en los navegadores objetivo. En colores forzados, permite que actúe la paleta del usuario; no impongas forced-color-adjust: none para conservar tu marca.
Errores frecuentes
Diagnostica el elemento, el estado y el fondo antes de añadir CSS.
El select o el campo de texto no cambian
- Resultado esperado
- Personalizar todos los campos con el mismo acento.
- Causa
- accent-color no es una API general para teñir select, botones, campos de texto o meter.
- Solución
- Elige la herramienta según la necesidad: CSS del control, select personalizable para su presentación o field-sizing para su tamaño. Mantén labels, teclado y foco.
La casilla deshabilitada no conserva el color exacto
- Resultado esperado
- Usar el mismo tono en todos los estados y plataformas.
- Causa
- La apariencia nativa decide cuándo emplear el acento y puede ajustar sus colores.
- Solución
- Acepta las diferencias nativas y revisa marcado, sin marcar, disabled, hover y foco. Si necesitas rediseñar el control completo, ese trabajo supera accent-color.
El color de marca se ve, pero cuesta leer el control
- Resultado esperado
- Distinguir el estado y localizar el foco con claridad.
- Causa
- Un acento cercano al fondo o un ajuste del navegador insuficiente puede ocultar detalles. La compatibilidad de sintaxis no prueba contraste.
- Solución
- Revisa el resultado compuesto en ambos temas, conserva el foco visible y prueba colores forzados. Cambia el acento si hace falta; no comuniques estado solo mediante color.
Soporte y compatibilidad
La declaración y el resultado visual son comprobaciones diferentes.
Consulta el estado Baseline y el detalle por navegador. BCD registra una limitación de contraste en Chrome para Android y en Safari anterior a 26.2. No extrapoles el resultado de esta preview a otras plataformas ni a todos los estados.
Sin soporte, se ignora la declaración y permanece el control nativo. Ese es el fallback de estos ejemplos: no sustituyen los controles ni simulan un acento. CSS.supports solo confirma que se acepta la sintaxis, no el teñido de cada parte ni su legibilidad.