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
Escpor 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! ????