La Etiqueta DIALOG

Permite crear ventanas modales y diálogos interactivos nativos en HTML, sin necesidad de librerías externas.
La etiqueta <dialog>
permite crear ventanas modales y diálogos interactivos nativos en HTML, sin necesidad de librerías externas. Es ideal para formularios, alertas, confirmaciones o contenido emergente, con soporte para accesibilidad y gestión de enfoque automático.
Sintaxis básica
<dialog id="miDialogo"> <h2>¡Hola! Soy un diálogo</h2> <button onclick="document.getElementById('miDialogo').close()">Cerrar</button> </dialog> <button onclick="document.getElementById('miDialogo').showModal()">Abrir diálogo</button>
Atributos y métodos clave
Atributo/Método | Descripción |
---|---|
open |
Muestra el diálogo (sin backdrop, no modal) |
showModal() |
Abre el diálogo como modal (con backdrop) |
close() |
Cierra el diálogo |
returnValue |
Valor devuelto al cerrar el diálogo (útil para formularios) |
Casos de uso comunes
Diálogo de confirmación
<dialog id="confirmacion"> <p>¿Guardar cambios?</p> <form method="dialog"> <button value="cancelar">Cancelar</button> <button value="confirmar">Confirmar</button> </form> </dialog> <script> const dialog = document.getElementById('confirmacion'); dialog.addEventListener('close', () => { if (dialog.returnValue === 'confirmar') { console.log('Cambios guardados'); } }); </script>
Formulario en modal
<dialog id="formulario"> <form method="dialog"> <label>Nombre: <input type="text" required></label> <button type="submit">Enviar</button> </form> </dialog>
Diálogo con backdrop personalizado
dialog::backdrop { background: rgba(0, 0, 0, 0.8); }
Accesibilidad
-
Enfoque automático: El primer elemento interactivo recibe el foco al abrirse.
-
Cierre con Esc: Los modales se cierran con la tecla
Esc
por defecto. -
ARIA: No requiere roles adicionales (ya incluye
role="dialog"
).
Estilización con CSS
Personaliza la apariencia del diálogo y su fondo:
dialog { border: none; border-radius: 8px; padding: 2rem; box-shadow: 0 0 20px rgba(0,0,0,0.3); width: 90%; max-width: 500px; } dialog::backdrop { background: rgba(0, 128, 0, 0.5); }
Errores comunes
Olvidar cerrar el diálogo
// Incorrecto: Abrir sin opción de cierre document.getElementById('dialogo').showModal();
Usar para contenido no modal
<!-- Incorrecto: Usar <dialog> como tooltip --> <dialog open>Información adicional</dialog>
Ignorar la compatibilidad
-
Algunos navegadores antiguos no soportan
<dialog>
(ver Can I use).
Ejemplos avanzados
Diálogo con resultado personalizado
<dialog id="personalizado"> <p>Elige una opción:</p> <button onclick="this.closest('dialog').close('opcion1')">Opción 1</button> <button onclick="this.closest('dialog').close('opcion2')">Opción 2</button> </dialog> <script> document.getElementById('personalizado').addEventListener('close', function() { console.log('Opción seleccionada:', this.returnValue); }); </script>
Animación de entrada/salida
dialog { animation: slideIn 0.3s ease-out; } @keyframes slideIn { from { transform: translateY(-100%); } to { transform: translateY(0); } }
Buenas prácticas
-
Usar
method="dialog"
en formularios: Cierra automáticamente el diálogo al enviar. -
Manejar el evento
close
: Para procesar datos después de cerrar. -
Polyfill para compatibilidad: Usa dialog-polyfill si es necesario.
-
Semántica clara: Incluir encabezados (
<h2>
) y etiquetas accesibles.
Conclusión:
La etiqueta <dialog>
simplifica la creación de ventanas modales:
- Nativa y accesible: Soporte integrado para teclado y lectores de pantalla.
- Personalizable: Estilos CSS y animaciones.
- Versátil: Ideal para formularios, confirmaciones o contenido emergente.
¡Reemplaza tus modales customizados por la solución nativa de HTML! ????