Un diálogo que se porta bien en HTML
El diálogo nativo te da la trampa de foco, el fondo y Escape para cerrar.
<button type="button" id="open-prefs">Preferences</button>
<dialog id="prefs" aria-labelledby="prefs-title">
<h2 id="prefs-title">Preferences</h2>
<form method="dialog">
<label for="theme">Theme</label>
<select id="theme" name="theme">
<option value="light">Light</option>
<option value="dark">Dark</option>
</select>
<button value="cancel">Cancel</button>
<button value="save">Save</button>
</form>
</dialog>
<script>
const prefs = document.getElementById('prefs');
document.getElementById('open-prefs')
.addEventListener('click', () => prefs.showModal());
prefs.addEventListener('close', () => {
console.log('closed with', prefs.returnValue);
});
</script>
Cómo funciona
showModal()vuelve inerte el resto de la página y atrapa el foco adentro.aria-labelledbynombra el diálogo desde su propio encabezado.- Un formulario con
method="dialog"lo cierra y reporta qué botón se usó.
Palabras clave y builtins usados aquí
constdocument
El intento, en números
- Líneas
- 23
- Caracteres a escribir
- 660
- Tokens
- 178
- Ritmo de tres estrellas
- 75 tpm
Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 142 segundos.
Paso 4 de 4 en Foco y visibilidad; paso 12 de 15 en HTML accesible.