CSS moderno: dialog, oklch y más
⚠️ Soporte de navegadores
Estas funciones son modernas. Antes de usarlas en un proyecto real, comprueba el soporte en MDN y en Can I use. Todo funciona en las versiones actuales de Chrome, Edge, Firefox y Safari salvo lo marcado como soporte parcial.
1.<dialog> y popover: ventanas nativas
El elemento <dialog> es una ventana modal nativa: trae foco, tecla Esc y fondo (::backdrop). El atributo popover crea paneles que se abren con un botón y se cierran al pulsar fuera, sin una línea de JS.
<dialog id="modal">
<p>¿Seguro que quieres continuar?</p>
<form method="dialog"><button>Cancelar</button><button value="ok">Aceptar</button></form>
</dialog>
<button onclick="modal.showModal()">Abrir</button>
💡 Consejo
Usa <dialog> con showModal() para bloquear el resto de la página, y popover para menús y avisos ligeros. Ambos son accesibles por defecto, algo difícil de lograr con un div a mano.
2.Colores modernos: oklch(), color-mix() y light-dark()
oklch(luminosidad croma tono) describe colores como los percibimos: cambiar la luminosidad no altera el tono, ideal para paletas. color-mix() mezcla dos colores y light-dark() elige uno según el tema del usuario.
💡 Truco
Define un solo color de marca y deriva los demás con color-mix() o cambiando la luminosidad en oklch(): tu sistema de variables (lección 11) se vuelve más corto.
3.@property: variables con tipo
Las variables normales son texto, por eso no se pueden animar. Con @property declaras su tipo y el navegador puede transicionarlas.
4.Funciones con soporte parcial o reciente
Estas tres son muy prometedoras, pero no están disponibles igual en todos los navegadores. Úsalas como mejora progresiva (la página debe verse bien sin ellas) y verifica el soporte actual.
| Función | Para qué sirve | Documentación |
|---|---|---|
Animaciones por scroll (animation-timeline: scroll()) | Animar según el desplazamiento, sin JS | MDN |
Anchor positioning (anchor-name, position-anchor) | Anclar tooltips y menús a otro elemento | MDN |
View transitions (document.startViewTransition()) | Transiciones animadas entre estados o páginas | MDN |
@supports (animation-timeline: scroll()) {
.barra { animation: crece linear; animation-timeline: scroll(); }
}
/* Si no hay soporte, la barra simplemente no se anima. */
⚠️ Regla de oro
Nunca dejes que una función con soporte parcial rompa el contenido: encapsúlala en @supports y asegúrate de que sin ella todo siga funcionando.
📒 Apuntes para llevar
<dialog>ypopoverdan ventanas accesibles sin librerías.oklch(),color-mix()ylight-dark()simplifican paletas y temas.@propertypermite animar variables con tipo.- Scroll-driven animations, anchor positioning y view transitions: soporte parcial; usa
@supportsy verifica en MDN.
🧠 Comprueba lo aprendido
Elige una respuesta en cada pregunta.
¿Qué atributo crea un panel que se cierra al pulsar fuera?
¿Qué hace light-dark(a, b)?
¿Para qué sirve @property?
Con una función de soporte parcial, lo correcto es…