En el desarrollo front‑end, los selectores CSS y varias propiedades modernas poco aprovechadas permiten escribir interfaces más limpias, accesibles y con menos hacks.
Aquí reunimos nueve funciones infravaloradas, tres selectores/pseudoclases y seis propiedades, con ejemplos reales, buenas prácticas y enlaces técnicos para profundizar.
Índice
- Antes de empezar: recordatorio rápido de selectores y especificidad
- 1) accent-color
- 2) caret-color
- 3) currentColor
- 4) ::marker
- 5) :placeholder-shown
- 6) :user-valid
- 7) all: unset
- 8) text-wrap: balance
- 9) inset
- Compatibilidad, progressive enhancement y fallbacks
- Preguntas frecuentes
- Siguiente paso
Antes de empezar: recordatorio rápido de selectores y especificidad
Un selector CSS indica qué nodos del DOM recibirán los estilos. Tipos más comunes:
- Básicos: etiqueta (
h1), clase (.btn) e id (#menu). - Combinadores: descendiente (
ul li), hijo (ul > li), hermano adyacente (h2 + p) y hermano general (h2 ~ p). - De atributo:
input[type="email"]. - Pseudoclases:
:hover,:focus,:nth-child(),:placeholder-shown,:user-valid. - Pseudoelementos:
::before,::after,::marker.
| Tipo | Ejemplo | Especificidad | Uso típico |
|---|---|---|---|
| Clase | .card |
0-1-0 | Estilos reutilizables |
| Atributo | input[required] |
0-1-0 | Formularios |
| Pseudoclase | a:focus-visible |
0-1-0 | Accesibilidad |
| Pseudoelemento | li::marker |
0-0-1 | Decoración de partes |
Consejo de snippet: para consultas genéricas sobre “selectores CSS”, abrir con una definición breve y una lista de tipos —como la anterior— suele ganar fragmento destacado. A partir de aquí, el valor diferencial está en los nueve ítems prácticos.
1) accent-color
Permite colorear controles nativos (checkboxes, radios, progress, range) sin “re-skin” complejo.
/* Marca corporativa directa sobre inputs nativos */
input[type="checkbox"],
input[type="radio"],
progress,
input[type="range"] {
accent-color: #0a7cff; /* azul corporativo */
}
- Cuándo usar: coherencia visual rápida, accesibilidad mantenida y menor coste de mantenimiento que recrear el control.
- Detalles: respeta estados deshabilitado/activo del sistema.
- MDN: accent-color
2) caret-color
Cambia el color del cursor parpadeante en cajas de texto, útil en temas oscuros o fondos personalizados.
/* Cursor legible sobre fondos oscuros */
input, textarea {
caret-color: limegreen;
}
- Consejo: combinar con
colorybackgroundpara contraste claro. - MDN: caret-color
3) currentColor
Valor mágico que reutiliza el color de texto (color) en otras propiedades sin repetir valores.
.btn {
color: #1f2937; /* texto */
border: 2px solid currentColor; /* mismo color sin duplicar */
box-shadow: 0 0 0 2px color-mix(in srgb, currentColor 20%, transparent);
}
- Ventaja: consistencia temática y menor deuda técnica.
- MDN: currentColor
4) ::marker
Estiliza los bullets o números de elementos de lista (li) sin pseudo‑elementos extra ni imágenes.
/* Listas de características con identidad visual */
.features li::marker {
color: #ff3b81;
font-size: 1.15em;
content: "✦ "; /* opcional en listas con 'list-style-type: none' */
}
- Truco: cambiar
list-style-typey combinar con::markerpara numeraciones personalizadas. - MDN: ::marker
5) :placeholder-shown
Se activa cuando el placeholder es visible (es decir, el campo está vacío). Ideal para micro‑interacciones y estados iniciales.
/* Formulario con estado inicial discreto */
input:placeholder-shown {
opacity: 0.7;
border-color: color-mix(in srgb, gray 40%, transparent);
}
/* Label flotante sin JS */
input:placeholder-shown + label {
transform: translateY(8px);
opacity: .6;
}
- Atajo mental: pensar en “campo vacío” más que en el placeholder en sí.
- MDN: :placeholder-shown
6) :user-valid
Aplica estilos solo cuando el usuario ha interactuado y el valor cumple la validación del navegador. Evita “falsos positivos” al cargar la página.
/* Validación accesible post-interacción */
input[required]:user-valid { border-color: #22c55e; }
input[required]:user-invalid { border-color: #ef4444; }
/* Mensajes solo tras interacción */
input[required]:user-invalid ~ .error {
display: block;
}
- Recomendación: combinar con
:user-invalidy:focus-visiblepara una UX clara. - MDN: :user-valid
7) all: unset
Resetea de golpe todas las propiedades del elemento a su estado “no especificado” (heredables pasan a inherit, el resto a initial). Útil para crear componentes desde cero sin arrastrar estilos de UA o de herencia.
/* Botón-hipervínculo limpio, listo para un style system */
.button-reset {
all: unset;
display: inline-flex;
align-items: center;
gap: .5rem;
cursor: pointer;
}
- Precaución: restaurar explícitamente estados de accesibilidad (por ejemplo,
outlineen foco). - MDN: all
8) text-wrap: balance
Equilibra los saltos de línea en títulos y encabezados multilínea de forma automática, mejorando la legibilidad sin scripts.
/* Titulares con ritmo tipográfico estable */
h1, h2, h3 {
text-wrap: balance;
}
- Escenario ideal: CMS con títulos variables, cards y hero headings.
- MDN: text-wrap
9) inset
Shorthand de top, right, bottom y left. Reduce ruido y deja clara la intención en layouts posicionados.
.modal__backdrop {
position: fixed;
inset: 0; /* equivale a top:0; right:0; bottom:0; left:0; */
background: color-mix(in srgb, black 60%, transparent);
}
- Ventajas: sintaxis compacta, menos errores de mantenimiento y fácil lectura.
- MDN: inset
Compatibilidad, progressive enhancement y fallbacks
La mayoría de estas funciones cuentan con soporte amplio en navegadores modernos. Para proyectos con audiencias heterogéneas, conviene aplicar progressive enhancement y prever retrocompatibilidad simple:
accent-color: si no está disponible, el control nativo seguirá funcionando con el tema del sistema. No romperá la UI.caret-color: degradado seguro; el cursor usa el color por defecto.currentColor: ampliamente soportado; usarlo reduce repetición de valores.::marker: si faltase, el marcador por defecto sigue visible. Evitar sustituirlo por imágenes decorativas sin texto alternativo.:placeholder-shown: si no aplica, el estilo inicial no variará; mantener contratos de contraste AA.:user-valid/:user-invalid: basarse en validación nativa HTML5 y ofrecer mensajes accesibles vinculados a los campos.all: unset: tras el reset, reponeroutlinepara foco visible y roles ARIA cuando corresponda.text-wrap: balance: en ausencia de soporte, el título se mostrará con saltos “normales”.inset: si se necesita, duplicar con las cuatro propiedades tradicionales en hojas críticas.
| Función | Degradado seguro | Notas de accesibilidad | Referencia |
|---|---|---|---|
| accent-color | Sí (control nativo) | Respetar contrastes y estados deshabilitados | MDN |
| caret-color | Sí | Asegurar contraste del cursor en temas oscuros | MDN |
| currentColor | Amplio soporte | Favorece consistencia cromática | MDN |
| ::marker | Sí | No eliminar marcadores sin alternativa | MDN |
| :placeholder-shown | Sí | No usar placeholder como label; mantener label real |
MDN |
| :user-valid | Sí | Mensajes asociados con ARIA y aria-live si hace falta |
MDN |
| all: unset | — | Reponer outline y estados de foco |
MDN |
| text-wrap: balance | Sí | Evita viudas/huérfanas en titulares | MDN |
| inset | Replicable con top/right/bottom/left | Ninguna | MDN |
Enlaces de referencia y lecturas recomendadas
Siguiente paso
Aplicar estas nueve funciones no exige reescribir la base del proyecto. Un plan razonable es empezar por currentColor (consistencia), text-wrap: balance (legibilidad) y accent-color (coherencia UI). Para proyectos que requieren velocidad y una capa de marketing sólida, el equipo de Fonsi trabaja diseño, rendimiento y SEO técnico en conjunto. Más información en diseño de tiendas online con WordPress o en la página de contacto.
Conclusión
El ecosistema de selectores CSS y propiedades CSS sigue creciendo, y conocer funciones poco utilizadas marca la diferencia entre un código básico y uno profesional. Recursos como accent-color, caret-color, currentColor o ::marker simplifican tareas comunes y mejoran la accesibilidad. Pseudoclases como :placeholder-shown o :user-valid, junto a propiedades modernas como all: unset, text-wrap: balance e inset, ayudan a mantener proyectos más limpios y sostenibles. Adoptar estas prácticas no es solo una cuestión de estilo, también impacta en la experiencia de usuario y en la percepción de calidad de cualquier interfaz web.
Preguntas frecuentes
¿Pseudoclase y pseudoelemento son lo mismo?
No. La pseudoclase describe un estado (:hover, :user-valid), mientras que el pseudoelemento representa una parte del elemento (::marker, ::before).
¿Por qué usar currentColor en lugar de repetir valores?
Porque reduce la repetición, facilita tematizar y evita desajustes cromáticos al cambiar la paleta.
¿all: unset es un reset global recomendable?
Es una herramienta quirúrgica para componentes concretos. Usarlo de forma masiva puede ocultar estilos de accesibilidad importantes.
¿text-wrap: balance afecta al SEO?
No. Es una propiedad de presentación. Mejora la legibilidad y la experiencia de lectura, lo que suele correlacionar con mejores métricas de comportamiento.
¿Qué diferencia hay entre :user-valid y :valid?
:valid se aplica aunque el usuario no haya interactuado todavía. :user-valid solo entra en acción tras la interacción, evitando mensajes prematuros.
¿Cuál es la ventaja de accent-color frente a rehacer un checkbox con CSS?
accent-color mantiene accesibilidad, rendimiento y coherencia con el sistema operativo, mientras que rehacer controles nativos suele ser más costoso y frágil.
¿Qué navegadores soportan ::marker?
Todos los navegadores modernos principales (Chrome, Edge, Firefox, Safari). En versiones antiguas el marcador volverá al estilo por defecto.
¿Es recomendable depender de caret-color?
Sí, siempre que se combine con pruebas de contraste. En navegadores sin soporte, el cursor se verá con el color por defecto.
¿Cuándo conviene usar inset en vez de top/right/bottom/left?
En layouts donde se quiera claridad y menos repetición. Ahorrar líneas evita errores y facilita leer bloques de posicionamiento.
¿Qué errores comunes se cometen al usar :placeholder-shown?
Usar el placeholder como sustituto de una etiqueta real. El placeholder es un apoyo visual, no debe reemplazar a la etiqueta accesible <label>.
- El SEO No Está Muerto: Perspectiva Real En La Era De La IA
- Evolución del SEO: De Los Primeros Buscadores A La Era De La IA
- Google Elimina Los 100 Resultados Por Página: Impacto En SEO Y Métricas
- Dominar CSS Es Mucho Más Que Memorizar Propiedades
- Por Qué Usar Rem En CSS Mejora La Accesibilidad Y El Diseño Web
- Analítica Web
- API
- Chat GPT
- Ciberseguridad
- CMS
- CRM
- CSS
- Desarrollo Web
- Diseño Gráfico
- Diseño Web
- Elementor
- Email Marketing
- Emmet
- Figma
- Funnel De Ventas
- Gemini
- General
- GEO
- Git
- Google Ads
- Google Analytics 4
- Google Business
- Google Merchant
- Google Search Console
- HTML
- Inteligencia Artificial
- Internet
- Javascript
- Link Building
- Marketing
- Marketing Digital
- NPM
- NPX
- Optimización Web
- PHP
- Prestashop
- Prompts
- Reddit Answers
- Redes
- Redes Sociales
- Semrush
- SEO
- Software
- Sora
- SQL
- Tiendas Online
- TikTok
- Tipografías
- Typescript
- UX/UI
- Webflow
- Wordpress
- Todas
- Funnel De Ventas
- Diseño Web
- SEO
- Analítica Web
- Internet
- CSS
- Marketing
- Marketing Digital
- UX/UI
- Inteligencia Artificial
- Tiendas Online