Técnica Scripts de cliente WCAG 2.2 obsoleta
SCR37Crear cuadros de diálogo personalizados de forma independiente del dispositivo
Técnica obsoleta: el W3C ya no la recomienda. Se mantiene traducida como referencia histórica y porque sigue apareciendo en auditorías antiguas. |
En resumen
Muchos sitios sustituyen las ventanas emergentes del navegador por cuadros de diálogo propios hechos con un div sobre la página. Para que funcionen con teclado y lectores de pantalla, esta técnica indica abrirlos desde el evento onclick de un enlace o botón e insertar el div en el DOM justo después del elemento que lo lanza. Técnica obsoleta: hoy se recomienda el elemento dialog y el patrón de diálogo modal de ARIA.
Aplicabilidad
HTML y XHTML usados con scripts.
Descripción
Quienes diseñan sitios web a menudo quieren crear cuadros de diálogo que no usen las ventanas emergentes que proporciona el navegador. Esto suele conseguirse encerrando el contenido del cuadro de diálogo en un div y colocando ese div por encima del contenido de la página mediante el orden z y el posicionamiento absoluto de CSS.
Para ser accesibles, estos cuadros de diálogo deben seguir unas pocas reglas sencillas.
- Lanzar el script que abre el cuadro de diálogo desde el evento onclick de un enlace o de un botón.
- Colocar el
divdel cuadro de diálogo en el modelo de objetos del documento (DOM) inmediatamente después del elemento que lo ha activado. El elemento activador conservará el foco y, al insertar el contenido del cuadro de diálogo justo después de ese elemento, el contenido del cuadro de diálogo pasará a ser el siguiente en el orden de lectura del lector de pantalla y el siguiente en el orden de tabulación. El cuadro de diálogo puede seguir posicionándose de forma absoluta para aparecer visualmente en otro lugar de la página. Esto puede hacerse creando el cuadro de diálogo en el HTML y ocultándolo con CSS, como en el ejemplo siguiente, o insertándolo inmediatamente después del elemento activador mediante un script. - Garantizar que el HTML del interior del div del cuadro de diálogo cumple el mismo estándar de accesibilidad que el resto del contenido.
También es conveniente, aunque no siempre necesario, que el enlace que abre el cuadro de diálogo sirva para abrirlo y cerrarlo alternativamente, y que el cuadro de diálogo se cierre cuando el foco del teclado lo abandone.
Ejemplos
Un botón de opciones que abre un cuadro de diálogo
El HTML de este ejemplo incluye un elemento activador, en este caso un botón, y un div que actúa como marco del cuadro de diálogo.
El elemento activador es un botón y el script se lanza desde el evento onclick. Esto envía los eventos adecuados al sistema operativo para que las tecnologías de asistencia sean conscientes del cambio en el DOM.
En este ejemplo, los botones de envío (Submit) y de restablecimiento (Reset) del interior del cuadro de diálogo se limitan a ocultar el div.
...
<button onclick="TogglePopup(event,true)"
name="pop0001">Options</button>
<div class="popover" id="pop0001">
<h3>Edit Sort Information</h3>
<form action="default.htm" onsubmit="this.parentNode.style.display='none'; return false;" onreset="this.parentNode.style.display='none'; return false;">
<fieldset>
<legend>Sort Order</legend>
<input type="radio" name="order" id="order_alpha" /><label for="order_alpha">Alphabetical</label>
<input type="radio" name="order" id="order_default" checked="true" /><label for="order_default">Default</label>
</fieldset>
<div class="buttons">
<input type="submit" value="OK" />
<input type="reset" value="Cancel" />
</div>
</form>
</div>
...
El div, el encabezado y los elementos form se estilizan con CSS para que parezcan un cuadro de diálogo.
...
a { color:blue; }
a.clickPopup img { border:none; width:0; }
div.popover { position:absolute; display:none; border:1px outset; background-color:beige; font-size:80%; background-color:#eeeeee; color:black; }
div.popover h3 { margin:0; padding:0.1em 0.5em; background-color:navy; color:white; }
#pop0001 { width:20em; }
#pop0001 form { margin:0; padding:0.5em; }
#pop0001 fieldset { margin-bottom:0.3em; padding-bottom:0.5em; }
#pop0001 input, #pop0001 label { vertical-align:middle; }
#pop0001 div.buttons { text-align:right; }
#pop0001 div.buttons input { width:6em; }
...
El script alterna la visualización del div emergente, mostrándolo y ocultándolo.
...
function TogglePopup(evt,show) {
HarmonizeEvent(evt);
var src = evt.target;
if ("click" == evt.type) {
evt.returnValue = false;
}
var popID = src.getAttribute("name");
if (popID) {
var popup = document.getElementById(popID);
if (popup) {
if (true == show) {
popup.style.display = "block";
}
else if (false == show) {
popup.style.display = "none";
}
else {
popup.style.display = "block" == popup.style.display ? "none" : "block";
}
if ("block" == popup.style.display) {
//window.alert(document.documentElement.scrollHeight);
popup.style.top = ((document.documentElement.offsetHeight - popup.offsetHeight) / 2 ) + 'px';
popup.style.left = ((document.documentElement.offsetWidth - popup.offsetWidth) / 2) + 'px';
}
}
}
}
function SubmitForm(elem) {
elem.parentNode.style.display='none';
return false;
}
function ResetForm(elem) {
elem.parentNode.style.display='none';
return false;
}
...
Pruebas
Procedimiento
- Localizar todas las áreas de la página que abren cuadros de diálogo que no sean ventanas emergentes.
- Comprobar que los cuadros de diálogo pueden abrirse llegando al área con la tecla de tabulación y pulsando Intro.
- Comprobar que, una vez abierto, el cuadro de diálogo es el siguiente en el orden de tabulación.
- Comprobar que los cuadros de diálogo se abren desde el evento de clic de un botón o de un enlace.
- Con una herramienta que permita inspeccionar el DOM generado por el script, comprobar que el cuadro de diálogo es el siguiente en el DOM.
Resultados esperados
- Las comprobaciones n.º 2, n.º 3, n.º 4 y n.º 5 son verdaderas.
Recursos
- ARIA Authoring Practices Guide - Dialog (Modal) (guía de prácticas de autoría de ARIA: cuadro de diálogo modal).
- HTML - the
dialogelement (especificación HTML: el elemento dialog).
Cómo lo comprobamos en ADDAW
En las auditorías de accesibilidad de ADDAW revisamos cada criterio de conformidad siguiendo este catálogo de técnicas: comprobamos si la web aplica una técnica suficiente y documentamos cada fallo común con capturas y el código afectado, para que el equipo de desarrollo sepa exactamente qué corregir. Los informes siguen la metodología del Observatorio de Accesibilidad y la norma UNE-EN 301 549.
Fuente y licencia
Traducción al español, no oficial, realizada por ADDAW a partir de la técnica SCR37 del documento «Techniques for WCAG 2.2» del W3C (versión del repositorio público del W3C a 22/10/2026). Copyright © W3C® (MIT, ERCIM, Keio, Beihang). Se publica conforme a la licencia de documentos del W3C. El texto normativo de referencia es el original en inglés; si detecta un error en la traducción, escríbanos.