- Aprender
- Informática
- Programación
- Fundamentos de desarrollo web
- Páginas web accesibles
Creación de páginas web accesibles
PrincipianteUnidad 7 de 8 del curso Curso de Fundamentos de desarrollo web
Lo que aprenderás
- Usa los elementos HTML por su significado para que los navegadores, los lectores de pantalla y los teclados puedan funcionar con tus páginas, y comprende qué reciben las tecnologías de apoyo de tu código.
- Explica cómo leen una página web las tecnologías de apoyoDescribe quién depende de un código accesible, cómo convierte el navegador el HTML en un árbol de accesibilidad y cómo establece el nivel AA de las WCAG 2.2 un objetivo comprobable.
- Da a cada página una estructura clara y fácil de recorrerDefine el idioma y el título de la página, marca los puntos de referencia, encabezados y listas, y mantén un orden significativo en el código fuente.
- Elige elementos nativos para enlaces, botones, controles y tablasElige enlaces para navegar y botones para realizar acciones, escribe textos de enlace comprensibles, prefiere los controles integrados y marca las tablas de datos para que se anuncien sus encabezados.
- Explica cómo leen una página web las tecnologías de apoyo
- Proporciona a imágenes, iconos, gráficos, audio y vídeo un equivalente textual que cumpla la misma función, y oculta el contenido puramente decorativo a las tecnologías de apoyo.
- Escribe texto alternativo adecuado para la finalidad de cada imagenDetermina si una imagen es informativa, decorativa, funcional, de texto o compleja, y escribe el texto
altcorrespondiente. - Asigna nombres a los iconos y gráficos SVG y proporciona alternativas textuales al contenido multimediaDa un nombre accesible a los botones con iconos y a los SVG en línea, oculta los gráficos decorativos y añade subtítulos para personas sordas, transcripciones y audiodescripción al audio y al vídeo.
- Escribe texto alternativo adecuado para la finalidad de cada imagen
- Permite que las personas lleguen a todos los controles y los usen con el teclado en un orden lógico, vean siempre dónde está el foco, salten el contenido repetido y mantengan su lugar cuando cambie la página.
- Usa una página con el teclado siguiendo un orden de foco lógicoUsa las teclas estándar, conoce qué elementos reciben el foco, usa
tabindexcorrectamente y mantén un orden de foco lógico, sin trampas ni paradas invisibles. - Muestra el foco con claridad y facilita la activación de los controlesMantén un indicador de foco visible y de alto contraste, evita que el elemento con foco quede cubierto y da a las áreas de activación del puntero suficiente tamaño o separación.
- Añade enlaces de salto y gestiona el foco cuando cambie el contenidoPermite que quienes usan el teclado salten bloques repetidos, mueve el foco de forma lógica cuando el contenido se abra, se cierre o desaparezca, y evita cambios que el usuario no haya solicitado.
- Usa una página con el teclado siguiendo un orden de foco lógico
- Elige combinaciones de colores con suficiente contraste, nunca dejes que el color transmita significado por sí solo y mantén las páginas utilizables cuando las personas apliquen zoom o amplíen el texto.
- Mide el contraste de color y cumple los requisitosCalcula y comprueba las relaciones de contraste del texto y de las partes de la interfaz, y aplica los umbrales AA de las WCAG y sus excepciones.
- Usa el color junto con otras indicacionesAsegúrate de que los enlaces, errores, campos obligatorios, gráficos e indicadores de estado no dependan solo del color.
- Mantén las páginas utilizables al aplicar zoom o ampliar el textoUsa unidades relativas y disposiciones flexibles para que las páginas funcionen con un tamaño de texto del 200 %, un zoom del 400 % y el espaciado de texto definido por el usuario, sin perder contenido.
- Mide el contraste de color y cumple los requisitos
- Etiqueta todos los controles, agrupa los relacionados, proporciona instrucciones e información de autocompletado y comunica los errores y mensajes de estado para que todo el mundo pueda completar un formulario.
- Etiqueta y agrupa todos los controles del formularioAsocia etiquetas visibles a los campos de entrada, agrupa los botones de opción y las casillas de verificación, da nombre a los botones y elige tipos de entrada adecuados para los datos.
- Proporciona instrucciones, señala los campos obligatorios y permite el rellenado automáticoAsocia textos de ayuda a los campos, muestra cuáles son obligatorios, añade identificadores de autocompletado y evita pasos que obliguen a volver a escribir o memorizar información.
- Comunica con claridad los errores y los mensajes de estadoIdentifica y explica los errores de entrada en texto, asócialos a sus campos y anuncia los mensajes que aparecen sin mover el foco.
- Etiqueta y agrupa todos los controles del formulario
- Añade ARIA solo donde HTML no ofrezca una solución nativa, mantén sus estados sincronizados y comprueba las páginas con herramientas automáticas y manualmente con teclado, zoom y lector de pantalla.
- Aplica las reglas de uso de ARIAExplica qué cambia ARIA y qué no, prefiere el HTML nativo, evita el uso perjudicial de ARIA y conoce cómo se elige el nombre accesible de un elemento.
- Comunica los cambios de estado con ARIAUsa
aria-expanded,aria-current,aria-pressedyaria-hiddencorrectamente y mantén cada estado sincronizado con lo que muestra la página. - Ejecuta comprobaciones automáticas de accesibilidad e interpreta los resultadosUsa herramientas automáticas para encontrar problemas detectables por máquinas, comprende lo que no pueden evaluar y convierte sus informes en correcciones priorizadas.
- Realiza pruebas manuales con teclado, zoom y lector de pantallaRecorre una página solo con el teclado, comprueba el zoom y la redistribución del contenido, prueba las funciones básicas de un lector de pantalla, inspecciona el árbol de accesibilidad y registra lo que encuentres.
- Aplica las reglas de uso de ARIA
Guía de estudio de Páginas web accesibles
1Estructura páginas con HTML semántico
El HTML de una página proporciona a los navegadores y a las tecnologías de apoyo la información que necesitan para describirla y usarla. Empieza por comprender el árbol de accesibilidad y después crea un esquema de página que se pueda recorrer mediante puntos de referencia, encabezados y listas. Elige los enlaces, botones y elementos de tabla según su finalidad y deja que CSS se ocupe de su aspecto. Estas decisiones proporcionan una estructura fiable a todas las funciones posteriores.
1.1 Explica cómo leen una página web las tecnologías de apoyo
Una página accesible permite obtener información y completar tareas con las herramientas que cada persona usa. Estas herramientas pueden incluir un teclado, un lector de pantalla, una lupa o control por voz. Una página puede parecer terminada mientras su código sigue impidiendo que estas personas la usen.
Qué reciben las tecnologías de apoyo
El navegador lee el HTML y construye el DOM, su modelo del documento. A partir de él deriva un árbol de accesibilidad que describe los objetos significativos a las tecnologías de apoyo. Un control necesita un rol, un nombre y los estados o propiedades pertinentes. Por ejemplo, una casilla de verificación puede tener el rol «casilla de verificación», el nombre «Ofertas por correo» y el estado «marcada».
Un lector de pantalla lee el contenido en voz alta o lo envía a una línea braille. NVDA y JAWS funcionan en Windows; Narrator está integrado en Windows, VoiceOver en macOS e iOS y TalkBack en Android. Los lectores de pantalla pueden navegar por encabezados, enlaces y controles sin leer cada línea. Algunos también pueden comunicar los ajustes de fuente o color. Las lupas muestran la página visual ampliada, por lo que la claridad visual también importa.
El control por voz permite decir el nombre de un control, por ejemplo, «haz clic en Buscar». Los dispositivos de pulsadores pueden enviar comandos similares a los del teclado. Por tanto, la compatibilidad con teclado y los nombres precisos ayudan a varios grupos de usuarios, no solo a quienes escuchan la lectura.
Empieza con el elemento adecuado
Compara estas dos formas de crear un control para guardar:
<button type="button">Save</button>
<div class="btn" onclick="save()">Save</div>
El botón ya expone su rol y su nombre. Recibe el foco con Tab y responde a Intro y Espacio. CSS puede hacer que la segunda línea parezca idéntica, pero un div no tiene ninguno de esos comportamientos de botón. Un lector de pantalla puede activar su controlador de clic en modo de lectura, pero no anuncia el elemento como botón. Una persona que navega con Tab no puede llegar a él.
El HTML semántico consiste en elegir un elemento por lo que significa el contenido o el control. Usa CSS para controlar su aspecto. Esto proporciona al navegador un punto de partida sólido y evita tener que reconstruir el comportamiento nativo con scripts.
Conoce el objetivo
El W3C publica las Pautas de Accesibilidad para el Contenido Web, o WCAG. Sus criterios de conformidad son requisitos comprobables, cada uno identificado por un número, un nombre y un nivel. Por ejemplo, 1.4.3 Contraste (mínimo) es de nivel AA. WCAG 2.2 se convirtió en recomendación en octubre de 2023 y se actualizó en diciembre de 2024.
La conformidad con el nivel AA exige todos los criterios de nivel A y de nivel AA. No basta con superar unas pocas comprobaciones de nivel AA. El nivel AAA añade más requisitos. WCAG 2.2 añade nueve criterios a la versión 2.1, seis de nivel A o AA, y elimina el criterio obsoleto 4.1.1 Procesamiento.
La accesibilidad también incluye texto ampliado legible, subtítulos para personas sordas o con dificultades auditivas, instrucciones claras y mensajes de error útiles. Incorporar estas funciones a la página desde el principio evita tener que sustituir HTML inadecuado una vez terminada la disposición.
Puntos clave
- Elige los elementos HTML por su significado y después aplícales estilos con CSS.
- El árbol de accesibilidad expone roles, nombres, estados y propiedades.
- Los botones nativos proporcionan un comportamiento con teclado del que carece un
divcon estilos. - El nivel AA de las WCAG 2.2 exige todos los criterios de conformidad de nivel A y AA.
1.2 Da a cada página una estructura clara y fácil de recorrer
Una estructura de página útil ofrece varias formas de orientarse. Un título descriptivo identifica la página, los puntos de referencia identifican sus regiones y los encabezados revelan el esquema. Estas funciones necesitan significado HTML real, incluso cuando el diseño visual ya parece claro.
Identifica la página y su idioma
Define el idioma principal en el elemento raíz, por ejemplo, <html lang="en-US">. Los lectores de pantalla lo usan para elegir las reglas de pronunciación. Marca un cambio dentro de la página en el elemento correspondiente: <span lang="fr">bon appétit</span>. Esto ayuda a cumplir 3.1.1 Idioma de la página (A) y 3.1.2 Idioma de las partes (AA).
Da a cada página un <title> único y descriptivo. «Pedir una tarta de cumpleaños – Panadería Green Leaf» es más útil en pestañas, marcadores y anuncios de lectores de pantalla que «Panadería Green Leaf – Página 4». Pon primero el tema específico para que los usuarios puedan distinguir rápidamente pestañas similares.
Divide la página en regiones
Usa <main> para el contenido principal, <nav> para la navegación y <aside> para el contenido complementario. Un <header> de página proporciona el punto de referencia banner y un <footer> de página proporciona información sobre el contenido. Los elementos de cabecera y pie anidados dentro de regiones de sección no se convierten en esos puntos de referencia de página.
Usa un solo <main> visible. Si hay dos regiones de navegación, distínguelas con nombres como <nav aria-label="Main"> y <nav aria-label="Breadcrumb">. El rol ya indica «navegación», por lo que la etiqueta puede ser breve. Un <section> o <form> solo se convierte en punto de referencia cuando tiene un nombre accesible.
Crea un esquema antes de elegir tamaños de fuente
Para la página de pedidos de la panadería, un esquema claro podría ser:
<h1>Order a birthday cake</h1>
<h2>Choose a size</h2>
<h2>Choose a flavor</h2>
<h3>Chocolate</h3>
<h3>Lemon</h3>
<h2>Pickup or delivery</h2>
Usa un h1 para el tema principal, h2 para las secciones principales y h3 para sus partes. Evita saltar niveles al descender. Elige los niveles de encabezado según la estructura y ajusta su tamaño con CSS. Un párrafo en negrita no entra en la lista de encabezados del lector de pantalla. A la inversa, envolver una introducción corriente en h2 añade una sección que el contenido no tiene.
Conserva la agrupación y el orden de lectura
Usa <ul> para elementos no ordenados, <ol> para pasos ordenados y <dl> para pares de término y descripción. Los lectores de pantalla pueden anunciar el tamaño de una lista, lo que ayuda a calcular cuánto contenido sigue. Los enlaces de navegación pueden estar en un ul dentro de nav. En Safari, quitar las viñetas con list-style: none puede impedir que VoiceOver anuncie las listas; role="list" en esa lista restablece el anuncio.
Escribe el HTML en un orden de lectura lógico. La propiedad flex order, la dirección flex invertida, la colocación en cuadrícula y el posicionamiento absoluto cambian lo que se ve sin cambiar el orden del DOM. Una fila que visualmente empieza por «Iniciar sesión», pero a la que Tab llega al final, es más difícil de seguir. Corrige el orden del código fuente antes de organizar la disposición.
Trabaja con la estructura básica de una página
El sitio de una panadería tiene un menú principal y un segundo conjunto de enlaces de migas de pan. Da nombres distintos a las regiones y mantén disponibles ambos conjuntos de enlaces:
<nav aria-label="Main">
<ul><li><a href="/bread">Bread</a></li></ul>
</nav>
<nav aria-label="Breadcrumb">
<ol><li><a href="/">Home</a></li></ol>
</nav>
<main>
<h1>Order a loaf</h1>
<h2>Choose your bread</h2>
</main>
Inspecciona la lista de puntos de referencia: Main y Breadcrumb identifican distintas finalidades de navegación, seguidas del contenido principal. Después inspecciona la lista de encabezados: debe mostrar el tema de la página y su primera sección. Estas dos listas ofrecen distintas rutas por el mismo documento; ninguna depende de los colores del menú ni del tamaño de fuente de los encabezados.
Puntos clave
- Define el idioma de la página y marca los pasajes en otro idioma.
- Da a cada página un título específico y una región principal visible.
- Usa niveles de encabezado reales para expresar el esquema.
- Usa elementos de lista para grupos de elementos y pasos ordenados.
- Mantén alineados el orden visual y un orden lógico del código fuente.
1.3 Elige elementos nativos para enlaces, botones, controles y tablas
El elemento de un control indica a los usuarios qué pueden esperar. Un enlace promete un destino; un botón promete una acción. Los controles nativos y los elementos de tabla también proporcionan relaciones que serían difíciles de recrear a partir de cajas genéricas con estilos.
Elige entre navegación y acción
| Finalidad | HTML | Activación estándar |
|---|---|---|
| Ir a otra página, a un archivo o a un lugar de la página | <a href="/classes">Baking classes</a> | Intro |
| Realizar una acción en la página actual | <button type="button">Show filters</button> | Intro o Espacio |
Un elemento de anclaje sin href no es un enlace normal que pueda recibir el foco del teclado. Un elemento de anclaje con href="#" y un controlador de clic que abre un menú anuncia navegación aunque realice una acción. Usa un botón para ese menú. Dentro de un formulario, asigna type="button" a los botones que no deban enviarlo; de lo contrario, su comportamiento predeterminado puede enviar el formulario.
Deja claros los destinos
Un lector de pantalla puede reunir los enlaces de la página en una lista. En ella es difícil distinguir enlaces repetidos que dicen «Leer más». «Más información sobre los cursos de masa madre» nombra directamente el destino. WCAG 2.4.4 Propósito de los enlaces (en contexto) (A) permite que el contexto cercano explique un enlace, pero un texto de enlace significativo también funciona cuando se escucha por sí solo.
Informa en el texto del enlace de si se descarga un archivo o se abre una pestaña nueva: «Lista de precios (PDF, 2 MB)» o «Formulario de reserva (se abre en una pestaña nueva)». Una pestaña nueva cambia el funcionamiento del botón Atrás. Usa una descripción en lugar de una URL larga sin descripción cuando sea posible.
Todos los enlaces y botones necesitan un nombre accesible. Un enlace al carrito que solo contiene una imagen necesita texto que indique su destino; una imagen sin alternativa puede dejar un enlace sin nombre o identificado por un nombre de archivo. Darle un nombre es tan necesario como elegir el rol correcto.
Conserva el comportamiento integrado
Usa casillas de verificación, botones de opción y controles select nativos. Incorporan uso con teclado y estados que se anuncian. Un control sencillo para mostrar y ocultar contenido puede usar solo HTML:
<details>
<summary>Delivery options</summary>
<p>We deliver within 10 km.</p>
</details>
El resumen recibe el foco del teclado y el control expone su estado abierto o cerrado. Una fila personalizada con un icono triangular necesitaría implementar esas funciones por separado.
Asocia los datos de la tabla a sus encabezados
Usa tablas para datos con relaciones entre filas y columnas. Un título da nombre al conjunto de datos; th identifica los encabezados; scope indica al navegador qué celdas describe un encabezado.
<table>
<caption>Shop opening hours</caption>
<tr><th scope="col">Day</th><th scope="col">Opens</th></tr>
<tr><th scope="row">Saturday</th><td>08:00</td></tr>
</table>
Una persona que llegue a la celda de la hora puede oír el día y el encabezado de columna asociados. Una cuadrícula CSS de elementos div pierde esas relaciones integradas. Para maquetar la página, usa flexbox o cuadrículas; una tabla de maquetación puede crear una navegación por tabla engañosa donde no existe una relación real entre datos.
Puntos clave
- Usa enlaces para destinos y botones para acciones.
- Da nombres claros a los enlaces e indica las descargas o las pestañas nuevas.
- Prefiere los controles nativos y los elementos para mostrar y ocultar contenido por su comportamiento integrado.
- Usa títulos, celdas de encabezado y scope en las tablas de datos.
- Usa CSS para organizar la disposición de la página.
2Proporciona alternativas textuales para el contenido no textual
Las imágenes, los iconos y el contenido multimedia pueden transmitir información que falta en el texto ordinario de la página. Elige cada alternativa según su finalidad: una foto de producto necesita palabras distintas de las de un icono de búsqueda, y un vídeo necesita más que una descripción de imagen. Aprende dónde poner alternativas breves, cuándo se necesita una explicación más larga y cómo los subtítulos para personas sordas, las transcripciones y la audiodescripción permiten distintas formas de usar el contenido multimedia.
2.1 Escribe texto alternativo adecuado para la finalidad de cada imagen
El texto alternativo proporciona la información útil o la función de una imagen a quien no puede verla. Decide qué aporta la imagen en esa página concreta antes de describir su aspecto. Una misma fotografía puede necesitar textos distintos en contextos diferentes.
Elige según la finalidad
Para una fotografía informativa de un producto, alt="Round sourdough loaf with a dark, cracked crust" describe lo que necesita saber un comprador. En una página sobre fallos de horneado, la característica importante podría ser una corteza quemada. Imagina que lees la página por teléfono: incluye la información que de otro modo quien escucha se perdería.
Para una imagen que solo aporta decoración, usa alt="". Una alternativa vacía indica a los lectores de pantalla que omitan la imagen. Omitir el atributo es distinto: un lector de pantalla puede anunciar un nombre de archivo como «IMG guion bajo 4032 punto jpg». Un fondo puramente decorativo también puede ponerse en CSS.
Nombra una función, no una forma
Cuando una imagen es el único contenido de un enlace o botón, su alternativa proporciona el nombre del control. Un enlace al inicio puede ser:
<a href="/">
<img src="logo.svg" alt="Green Leaf Bakery home">
</a>
Para un botón de búsqueda, usa «Buscar», no «Lupa». El usuario necesita saber qué hará el control al pulsarlo. Si un enlace de producto ya contiene las palabras visibles «Pan de centeno», una foto en ese mismo enlace puede usar alt="" para que el nombre del enlace no se repita.
Trata el texto y los gráficos complejos
Una imagen de texto necesita las mismas palabras en su alternativa. Una imagen promocional que dice «Rebajas de verano: 20 % de descuento en todo el pan» necesita esas palabras, no «Imagen de rebajas». Prefiere texto HTML real con estilos CSS cuando sea posible. Puede cambiar de tamaño, traducirse y redistribuirse; WCAG 1.4.5 Imágenes de texto (AA) exige texto real cuando la tecnología lo permite, con excepciones como los logotipos.
Un gráfico, diagrama o mapa suele contener demasiada información para una alternativa breve. Dale una identificación breve y después proporciona una descripción más completa cerca. Por ejemplo, alt="Bar chart of monthly website visitors, January to June" identifica el gráfico. El texto cercano puede explicar que las visitas aumentaron de 1200 a 3000, mientras que una tabla de datos proporciona los valores individuales cuando se necesitan. Un <figure> con <figcaption> puede agrupar el gráfico y su explicación.
Revisa los detalles útiles
Mantén el texto alternativo habitual en una frase u oración concisa. Los lectores de pantalla ya identifican una imagen, por lo que empezar con «Imagen de» normalmente no añade contenido útil. Elimina las palabras repetidas del texto adyacente y las palabras clave de búsqueda que no ayudan a comprender la página.
WCAG 1.1.1 Contenido no textual (A) exige una finalidad equivalente, no una descripción de cada detalle visible. El atributo title no es un sustituto fiable: no siempre se anuncia ni está disponible al usar teclado o interacción táctil. Pon la alternativa de una imagen en alt y mantén cualquier explicación más larga en la propia página.
Puntos clave
- Escribe el texto alternativo según la finalidad de la imagen en el contexto de su página.
- Usa
alt=""para la decoración; no omitas el atributo. - Las imágenes funcionales nombran la acción o el destino.
- Usa texto o datos cercanos para las imágenes complejas.
- Prefiere texto HTML real a imágenes de texto.
2.2 Asigna nombres a los iconos y gráficos SVG y proporciona alternativas textuales al contenido multimedia
Un icono, un diagrama y un vídeo necesitan distintos tipos de alternativas. Empieza por identificar la información o la acción que aporta cada uno. Después coloca el equivalente donde tanto el navegador como la persona que usa la página puedan encontrarlo.
Da nombre al control que contiene el icono
El texto visible junto a un icono suele ser lo más claro. Si un botón debe contener solo un icono, proporciona texto oculto visualmente o una etiqueta en el botón:
<button type="button" aria-label="Close">✕</button>
Cuando un icono esté junto al texto visible de un botón, oculta el icono decorativo con aria-hidden="true". No ocultes todo el botón. Un span o div simple tiene un rol genérico al que está prohibido asignar un nombre; poner ahí aria-label no es una forma fiable de dar nombre a un icono.
El texto oculto visualmente sigue estando disponible para los lectores de pantalla. Una clase CSS reutilizable puede usar posicionamiento absoluto, un ancho y alto de 1 px, desbordamiento oculto, clip-path: inset(50%) y white-space: nowrap. A diferencia de display: none o visibility: hidden, mantiene el texto en el árbol de accesibilidad.
Para un SVG en línea que transmite significado, usa role="img" y un nombre, por ejemplo, aria-labelledby="rating-title", que hace referencia a <title id="rating-title">Rated 4 out of 5 stars</title> dentro de él. Un SVG decorativo usa aria-hidden="true". Un SVG cargado mediante img obtiene su alternativa de alt, como otras imágenes. Mantén las advertencias significativas en HTML; los fondos CSS y el contenido generado no son lugares fiables para información esencial.
Elige la alternativa adecuada para el contenido multimedia
| Contenido | Alternativa necesaria |
|---|---|
| Grabación solo de audio | Transcripción |
| Vídeo pregrabado con sonido | Subtítulos para personas sordas; audiodescripción para información visual importante que no se menciona en el audio, en el nivel AA |
| Vídeo en directo con sonido | Subtítulos para personas sordas en directo, en el nivel AA |
Los subtítulos para personas sordas sincronizan con el vídeo el habla, los sonidos importantes y la identificación de los hablantes. Los subtítulos transcriben o traducen el diálogo para personas que pueden oír pero necesitan ayuda para entender el idioma. Una transcripción es un relato textual independiente; no sigue el tiempo de reproducción.
<video controls src="bread.mp4">
<track kind="captions" src="bread-en.vtt"
srclang="en" label="English">
</video>
El archivo WebVTT contiene señales de texto temporizadas, como 00:00:01.000 --> 00:00:04.000, seguidas del texto del subtítulo. Comprueba los nombres, las palabras técnicas y la puntuación de los subtítulos automáticos antes de publicar.
Si una demostración muestra en silencio un ajuste del horno, los subtítulos del habla no lo transmiten. La audiodescripción narra la información visual importante en las pausas o en una versión audiodescrita. Una alternativa textual completa que incluya la información visual es una opción en el nivel A; el vídeo pregrabado necesita audiodescripción en el nivel AA según 1.2.5.
Mantén utilizable la reproducción
Usa controls nativo en audio y vídeo, y da a los marcos insertados un title descriptivo, como «Mapa de la ubicación de nuestra tienda». Evita el sonido que se reproduce automáticamente. El audio que empieza automáticamente y dura más de 3 segundos necesita controles para pausarlo, detenerlo o ajustar su volumen independientemente del volumen general del sistema.
Asocia el nombre oculto y el texto temporizado
Para un botón compacto de eliminación, mantén sus palabras en el documento:
<button type="button">
<img src="trash.svg" alt="">
<span class="visually-hidden">Delete item</span>
</button>
La imagen se omite porque el texto ya indica la acción. Aplica la clase de ocultación sin eliminar ese texto del árbol de accesibilidad:
.visually-hidden {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip-path: inset(50%);
white-space: nowrap;
}
En cambio, un archivo de subtítulos asocia las palabras al tiempo de reproducción. Un breve ejemplo de WebVTT es:
WEBVTT
00:00:01.000 --> 00:00:03.000
[Mixer whirring]
00:00:03.000 --> 00:00:06.000
Today we bake rye bread.
La primera señal transmite un sonido relevante sin diálogo. La segunda transmite el habla durante su propio intervalo. Mira el vídeo con la pista activada y comprueba que cada señal aparece cuando se produce su sonido.
Puntos clave
- Da nombre a los controles con iconos en el propio control.
- El texto oculto visualmente sigue disponible para las tecnologías de apoyo.
- Da un rol y un nombre a los gráficos SVG que transmiten significado.
- Los subtítulos para personas sordas incluyen el habla y los sonidos importantes; las transcripciones permiten acceder a las grabaciones solo de audio.
- La audiodescripción proporciona información visual importante que falta en la pista de audio de un vídeo.
- Mantén disponibles los controles del reproductor y da nombre a los marcos insertados.
3Haz que todas las funciones se puedan usar con el teclado
El uso con teclado depende de un recorrido claro por la página y de una posición actual visible. Trabaja con controles nativos, mantén un orden lógico e impide que el foco llegue a contenido invisible. Añade accesos para saltar la navegación repetida y conserva el lugar del usuario cuando se abra un cuadro de diálogo o desaparezca un elemento. Comprueba el tamaño de los controles y la visibilidad del foco para que la misma interfaz sea más fácil de usar de varias formas.
3.1 Usa una página con el teclado siguiendo un orden de foco lógico
Quienes usan el teclado necesitan un recorrido para toda la tarea: llegar a un control, reconocerlo, usarlo y continuar. Los controles HTML estándar ya permiten este recorrido. Los problemas suelen aparecer cuando los estilos o los controles personalizados interfieren con el comportamiento del navegador.
Usa las teclas esperadas
Tab avanza por los elementos interactivos; Mayús+Tab retrocede. Intro sigue enlaces y activa botones. Espacio activa botones y cambia el estado de las casillas de verificación. En un grupo de botones de opción, Tab entra o sale del grupo y las teclas de flecha se mueven entre las opciones. Las teclas de flecha también funcionan en los controles de selección nativos. Escape cierra cuadros de diálogo y muchos menús.
Los enlaces con href, los botones, los campos de entrada, los controles de selección, las áreas de texto, los resúmenes y los elementos multimedia con controles pueden recibir el foco de forma predeterminada. Los párrafos, encabezados, imágenes, contenedores genéricos y elementos de anclaje sin href no son paradas normales de Tab. Un lector de pantalla tiene comandos de lectura independientes para el texto, por lo que añadir cada encabezado a la secuencia de Tab ralentiza la navegación con teclado.
En macOS, activa la navegación con teclado para hacer pruebas. La opción «Pulsar Tab para resaltar cada elemento de una página web» de Safari controla si la navegación normal con Tab llega a los enlaces; Opción+Tab puede llegar a ellos cuando esa opción está desactivada.
Mantén sencillos los valores de tabindex
| Valor | Efecto |
|---|---|
tabindex="0" | Añade una parada de Tab según el orden del código fuente |
tabindex="-1" | Permite recibir el foco mediante un script o como destino de un enlace; Tab lo omite |
| Un valor positivo | Mueve una parada antes de los controles normales según el número |
Los valores positivos son difíciles de mantener porque crean un segundo sistema de ordenación. Escribe el HTML en un orden lógico y evítalos. Un encabezado que deba recibir el foco después de una actualización puede usar -1 sin convertirse en una parada cada vez que se recorre la página.
Comprueba juntos el significado y el comportamiento
<div role="button" tabindex="0">Save</div>
Esto expone un rol de botón y recibe el foco, pero sigue necesitando un script para Intro y Espacio, una acción y un estilo de foco visible. Sustituirlo por <button type="button">Save</button> proporciona activación nativa con teclado sin tener que reconstruirla. ARIA por sí solo no puede crear la interacción.
CSS también puede alterar la navegación. Si el orden del código fuente es logotipo, menú, búsqueda y enlace de inicio de sesión, order: -1 de CSS puede mostrar el inicio de sesión primero mientras Tab sigue llegando a él al final. Mueve el contenido en el HTML cuando sea necesario cambiar el orden de lectura. WCAG 2.4.3 Orden del foco (A) exige un orden que preserve el significado y la capacidad de uso.
Elimina las trampas y las paradas ocultas
Comprueba si el foco puede salir de todos los componentes mediante el teclado. Un mapa o reproductor que acepta el foco pero no ofrece una salida con teclado crea una trampa de teclado, prohibida por 2.1.2 Sin trampas de teclado (A).
Un menú cerrado desplazado fuera de la pantalla o al que se ha aplicado opacity: 0 puede seguir conteniendo enlaces que reciben el foco. Usa hidden, display: none o inert para el contenido que no debe estar disponible mientras está cerrado. Sin embargo, permite que un enlace de salto fuera de la pantalla reciba el foco: tiene una regla intencionada que lo hace visible al recibirlo.
Puntos clave
- Usa el comportamiento estándar del teclado para enlaces y controles nativos.
- Reserva las paradas de Tab para el contenido interactivo.
- Usa cero para paradas según el orden del código fuente y menos uno para gestionar el foco de forma intencionada.
- Evita los valores positivos de tabindex y los cambios de orden visual que confundan la navegación.
- Comprueba que no haya trampas de teclado ni que el foco llegue a contenido oculto.
3.2 Muestra el foco con claridad y facilita la activación de los controles
El foco es la posición actual de quien usa el teclado. Un anillo visible indica qué control activará Intro o Espacio. El anillo debe seguir siendo visible frente a la página y el control con foco debe permanecer a la vista.
Mantén un indicador claro
Los navegadores proporcionan un contorno de foco predeterminado. Eliminarlo con outline: none hace perder una indicación esencial, salvo que se proporcione un sustituto adecuado. Usa :focus-visible para mostrar un anillo cuando el navegador considere que es útil, incluida la navegación con teclado y los campos de texto:
:focus-visible {
outline: 3px solid #1A73E8;
outline-offset: 2px;
}
El azul tiene un contraste de 4,51:1 frente al blanco. Comprueba los colores adyacentes reales del diseño; un anillo que funciona sobre blanco puede confundirse con un panel azul. WCAG 2.4.7 Foco visible (AA) exige un foco de teclado visible, mientras que 1.4.11 Contraste no textual (AA) se aplica a la información visual que identifica un estado personalizado, incluido un indicador de foco personalizado, con una relación de 3:1.
Un contorno es una opción útil para los temas de contraste de Windows. Los colores forzados pueden sustituir los fondos y eliminar las sombras de caja, mientras que los contornos siguen disponibles. Por tanto, una sombra por sí sola puede desaparecer en un modo del que depende una persona.
Mantén a la vista el control con foco
Las cabeceras adhesivas, los avisos y los controles de chat pueden cubrir el foco. Según 2.4.11 Foco no oculto (mínimo) (AA), el contenido creado por el autor no debe ocultar completamente el componente con foco. Mantener visible todo el componente facilita su uso; el requisito de que ninguna parte quede oculta pertenece al nivel AAA.
Para una cabecera adhesiva de 5 rem de alto, deja espacio de desplazamiento:
html { scroll-padding-top: 5rem; }
Después recorre la página real con Tab. Comprueba ambas direcciones y prueba cuando haya un aviso de cookies. La regla CSS es un punto de partida; debe funcionar con la cabecera y los tamaños del área de visualización reales de la página.
Da también espacio a quienes usan el puntero
Tamaño del área de activación (mínimo), 2.5.8 (AA), exige áreas de activación del puntero de al menos 24 por 24 px CSS, con excepciones. Un área menor puede cumplir si un círculo de 24 px de diámetro centrado en ella no se cruza con otra área de activación ni con el círculo de otra área pequeña. También están exentos los enlaces dentro de una frase, los controles cuyo tamaño predeterminado del navegador no se ha modificado y las áreas que tienen un control equivalente que cumple el criterio en la página. Una presentación esencial o exigida por ley también puede estar exenta.
En el caso de tres botones con iconos de 16 por 16 px separados por espacios de 4 px, los círculos se solaparían. Añadir 4 px de relleno en todos los lados hace que cada área de activación mida 24 por 24 px. Mide toda el área sobre la que se puede hacer clic, no solo el icono dibujado dentro de ella.
El área de activación de 44 por 44 px CSS del criterio 2.5.5 y el requisito de tamaño del área de foco del criterio 2.4.13 son requisitos AAA. Son mejoras útiles, pero mantén su nivel separado del mínimo AA al comunicar un hallazgo.
Puntos clave
- Mantén un indicador de foco visible en cada elemento que se pueda usar con el teclado.
- Comprueba el contraste de los indicadores personalizados frente a los colores adyacentes.
- Evita que el contenido adhesivo oculte completamente el componente con foco.
- Mide toda el área de activación del puntero; el nivel AA normalmente exige 24 por 24 px CSS o una excepción aplicable.
3.3 Añade enlaces de salto y gestiona el foco cuando cambie el contenido
Los menús repetidos no deberían obligar a las personas a repetir el mismo recorrido en cada página. Un enlace de salto proporciona una ruta corta al contenido principal. Cuando una interacción cambia la página, gestionar el foco de forma intencionada también ayuda a mantener el lugar.
Crea y prueba un enlace de salto
Coloca el enlace de salto antes de los controles repetidos de la cabecera:
<a class="skip-link" href="#main">Skip to main content</a>
<main id="main" tabindex="-1">
<h1>Order a birthday cake</h1>
</main>
El enlace apunta a la región principal, y tabindex="-1" ayuda a que esa región reciba el foco sin añadir una parada normal de Tab. La navegación por puntos de referencia ayuda a quienes usan lectores de pantalla; el enlace de salto también ayuda a quienes usan el teclado y ven la pantalla a evitar bloques repetidos, según 2.4.1 Evitar bloques (A).
Mantén el enlace disponible para el teclado cuando esté oculto visualmente:
.skip-link { position: absolute; left: -9999px; }
.skip-link:focus { left: 1rem; top: 1rem; }
No uses display: none ni visibility: hidden, que impiden que reciba el foco. Vuelve a cargar la página, pulsa Tab una vez y comprueba que aparece el enlace. Pulsa Intro y luego Tab de nuevo: la navegación debe continuar en el primer enlace o control del contenido principal, no en el menú de la cabecera.
Elige una posición siguiente lógica cuando cambie el contenido
Si una fila del carrito y su botón Eliminar con foco desaparecen juntos, el foco puede volver al principio de la página. Muévelo de forma intencionada al botón Eliminar del siguiente artículo o a un encabezado del carrito que tenga tabindex="-1". Elige un lugar que permita continuar la tarea. Desplazarse hasta una región no garantiza por sí solo que el foco del teclado se haya movido allí.
Usa un cuadro de diálogo modal nativo
Un cuadro de diálogo abierto con showModal() mueve el foco a su interior y vuelve inerte el resto de la página. Tab permanece dentro mientras el cuadro está abierto; Escape lo cierra. Al cerrarse, el foco normalmente vuelve al elemento que lo abrió, si este sigue existiendo.
<button type="button"
onclick="document.getElementById('hours').showModal()">Opening hours</button>
<dialog id="hours" aria-labelledby="hours-title">
<h2 id="hours-title">Opening hours</h2>
<p>Tuesday to Saturday, 08:00–17:00.</p>
<form method="dialog"><button>Close</button></form>
</dialog>
El script de una línea encuentra el cuadro de diálogo por su ID y lo abre de forma modal. El formulario del cuadro lo cierra sin otro script. Su encabezado proporciona su nombre. Una capa superpuesta hecha a mano necesita que se recreen todas estas reglas de interacción; oscurecer el fondo no impide que el foco del teclado llegue a él.
Espera una acción intencionada
Recibir el foco no debe abrir una página nueva ni cambiar el contexto de otro modo. Cambiar una selección tampoco debe hacerlo de forma inesperada; se debe avisar a los usuarios de antemano si ocurre ese comportamiento. Un botón «Ir» después de un selector de destino da tiempo para revisar y cambiar la selección antes de navegar. Estos comportamientos ayudan a cumplir 3.2.1 Al recibir el foco (A) y 3.2.2 Al recibir entradas (A).
Puntos clave
- Haz que el enlace de salto sea el primer elemento que pueda recibir el foco y muéstralo al recibirlo.
- Comprueba adónde va la siguiente pulsación de Tab después de usar el enlace de salto.
- Mueve el foco de forma intencionada cuando se elimine un elemento que lo tiene.
- Usa
dialogconshowModal()para obtener el comportamiento modal nativo. - Evita cambios de contexto inesperados al recibir el foco o cambiar una selección.
4Mantén legibles el texto y los elementos visuales
Las personas necesitan leer y usar una página en distintas condiciones de visualización. Mide los colores de primer plano y de fondo, combina el color con otra indicación y crea disposiciones que se amplíen cuando crezca el texto. Una vista legible en escritorio es solo el punto de partida: el texto ampliado, la redistribución en espacios estrechos y el espaciado del usuario pueden revelar problemas ocultos. Las comprobaciones de esta sección relacionan requisitos visuales concretos con cambios prácticos en CSS.
4.1 Mide el contraste de color y cumple los requisitos
El contraste mide con qué claridad destaca la información de primer plano frente a su fondo. Un color que parece legible en una pantalla puede resultar difícil de ver para una persona con baja visión o bajo una luz intensa. Mide la pareja de colores en lugar de evaluarla a simple vista.
Aplica el mínimo correcto
| Qué se comprueba | Mínimo AA de las WCAG |
|---|---|
| Texto normal | 4,5:1 |
| Texto grande | 3:1 |
| Información visual que identifica un control, su estado o un gráfico significativo | 3:1 frente a los colores adyacentes |
El texto grande tiene al menos 18 puntos, equivalentes a 24 px CSS, o al menos 14 puntos en negrita, unos 18,7 px CSS en negrita. Un encabezado de 20 px con grosor normal sigue necesitando 4,5:1. El texto de marcador de posición, del pie de página y de los estados de puntero encima y de foco no está exento del contraste de texto. Hay excepciones para logotipos, controles inactivos y texto incidental o puramente decorativo.
Comprende la relación
La luminancia relativa expresa la luminosidad en una escala de 0 para el negro a 1 para el blanco. Con la luminancia más clara como L1 y la más oscura como L2, la relación es:
Los extremos son 1:1 para colores idénticos y 21:1 para negro frente a blanco. Una herramienta de comprobación de contraste calcula la luminancia a partir de los canales de color y compara la relación con el umbral correspondiente.
Para el gris #767676, cada canal es el valor hexadecimal 76, o 118. Divide entre 255 para obtener aproximadamente 0,4627. Como está por encima de 0,04045, conviértelo a luz lineal:
Los tres canales son iguales, por lo que su luminancia ponderada también es aproximadamente 0,1812. El blanco tiene una luminancia de 1. Mantener toda la precisión durante el cálculo da 4,54:1, que cumple el requisito para texto normal. Usa una herramienta para las parejas de colores reales, de modo que los valores intermedios redondeados no afecten a un resultado cercano al umbral.
Nunca redondees un fallo hasta convertirlo en un resultado conforme
El gris #777777 sobre blanco da 4,48:1. Mostrarlo con un decimal como 4,5 no hace que cumpla el requisito. Del mismo modo, #949494 sobre blanco da 3,03:1 y cumple para texto grande; #959595 da 2,99:1 y no cumple para texto grande.
El blanco sobre #0066CC da 5,57:1. Sobre el ámbar #FFC107, el texto blanco solo da 1,63:1, mientras que el negro da 12,88:1. Elegir un fondo de botón brillante no indica si su texto debe ser claro u oscuro.
Comprueba los límites y todos los fondos
Un borde de campo necesario para identificarlo debe cumplir el contraste no textual. #CCCCCC frente al blanco da 1,61:1 y no cumple; #949494 da 3,03:1 y sí cumple. La misma regla de 3:1 se aplica a iconos significativos, líneas de gráficos e indicadores de foco personalizados. Hay excepciones para controles inactivos y controles predeterminados del navegador sin modificar.
El texto sobre una fotografía o un degradado debe cumplir el requisito en el punto más débil de su fondo. Añade un panel sólido o suficientemente opaco, o mueve el texto. Comprueba los colores resultantes con las herramientas de desarrollo o una herramienta de comprobación de contraste. WCAG 1.4.3 cubre el texto y 1.4.11 cubre la información no textual; los umbrales AAA para texto son más altos: 7:1 para texto normal y 4,5:1 para texto grande.
Comprueba por separado las partes de un botón
Supongamos que un botón tiene texto blanco de tamaño normal sobre #0066CC, está en una página blanca y usa un anillo de foco personalizado #CCCCCC. Comprueba cada relación:
- La etiqueta frente al botón azul da 5,57:1, por encima del mínimo de 4,5:1 para texto.
- El botón azul frente a la página blanca también da 5,57:1, por lo que su límite se distingue.
- El anillo de foco gris claro frente a la página blanca solo da 1,61:1. Ese indicador de estado no cumple el requisito aunque la etiqueta sí lo cumpla.
Sustituye el anillo por un color que alcance 3:1 frente a su fondo adyacente y vuelve a medir. Una medición de la etiqueta del botón no mide también todos los límites o estados de interacción. Comprueba el texto, el componente y el estado personalizado como parejas de colores separadas.
Puntos clave
- En el nivel AA, el texto normal necesita 4,5:1 y el texto grande 3:1.
- El texto grande se define por su tamaño y grosor, no por su rol de encabezado.
- Nunca redondees un resultado al alza para alcanzar un umbral de conformidad.
- Los límites y estados importantes de los controles y los gráficos necesitan 3:1 frente a los colores adyacentes.
- Comprueba el texto sobre imágenes en el punto más débil del fondo.
- Usa una herramienta de comprobación de contraste para medir la pareja de colores real.
4.2 Usa el color junto con otras indicaciones
El color puede llamar la atención, pero no puede ser la única pista visible de significado. Las personas pueden tener una deficiencia de la visión del color, usar escala de grises o ajustes de contraste, o escuchar el contenido mediante un lector de pantalla que no anuncia los colores. Combina el color con texto, formas, patrones u otra indicación clara.
Separa dos comprobaciones
El contraste pregunta si un primer plano se distingue de su fondo. El uso del color, WCAG 1.4.1 (A), pregunta si la información sigue siendo comprensible sin reconocer el color. Una etiqueta de color rojo oscuro sobre blanco podría cumplir el contraste y aun así no explicar qué campo tiene un error.
Empieza por el mensaje. Si la página dice «Elige una opción verde», da también a cada opción un nombre útil. Si un punto rojo significa que una tienda está cerrada, añade «Cerrado ahora» a su lado. El texto transmite el estado, mientras que el color ayuda a que se vea.
Mantén reconocibles los enlaces
La forma más sencilla de identificar un enlace en un párrafo es el subrayado. Ofrece una indicación incluso cuando el enlace y el texto que lo rodea se ven en escala de grises.
Una diferencia basada solo en el color respecto al texto circundante necesita al menos 3:1 de contraste entre los dos colores de texto y una indicación adicional, como un subrayado, al situar el puntero encima y al recibir el foco. El texto del enlace también debe cumplir el contraste de texto frente a su fondo. Son comparaciones distintas; un azul que cumple frente al blanco puede ser demasiado parecido al texto oscuro del párrafo que lo rodea.
Explica los errores y los campos obligatorios
Para un error de correo electrónico, muestra «Error: introduce una dirección de correo electrónico con el formato nombre@ejemplo.com» junto al campo. Un contorno rojo puede permanecer como indicación adicional. El texto identifica el problema e indica al usuario cómo corregirlo, mientras que el código lo asocia al campo.
Para los campos obligatorios, usa una etiqueta como «Dirección de correo electrónico (obligatorio)». Un asterisco también funciona cuando al principio del formulario se explica que «* significa obligatorio». Añade el atributo nativo required para que el requisito esté disponible para las tecnologías de apoyo y la validación del navegador. El texto rojo de una etiqueta por sí solo no proporciona una explicación visual adecuada ni un requisito expresado en el código.
Da a los gráficos una segunda forma de comunicar
Un gráfico de ventas con dos series necesita algo más que una línea roja y una verde. Las etiquetas directas, los distintos estilos de línea o los patrones permiten seguir cada serie sin identificar su color. Usa estas indicaciones tanto en el gráfico como en su leyenda para que coincidan.
Comprueba la página con la emulación de escala de grises o de visión del color en las herramientas de desarrollo. Inspecciona los enlaces dentro del texto, los errores, los campos obligatorios, los gráficos y los indicadores de disponibilidad. Pregúntate qué pista visible queda para cada distinción. Si una distinción desaparece, añade una indicación que exprese o represente su significado; aumentar solo la saturación no proporcionará la información que falta.
Puntos clave
- Combina las diferencias de color significativas con otra indicación visible.
- Comprueba por separado el contraste y el uso del color.
- Subraya los enlaces o cumple tanto las condiciones de diferencia de color como las de indicación al interactuar.
- Usa texto para los errores, los campos obligatorios y los indicadores de estado.
4.3 Mantén las páginas utilizables al aplicar zoom o ampliar el texto
Ampliar una página debería facilitar su uso sin ocultar controles ni cortar frases. Las personas pueden aplicar zoom a toda la página, ampliar solo el texto o aplicar su propio espaciado. Las disposiciones flexibles permiten que estas opciones funcionen juntas.
Prueba el tamaño del texto y la redistribución
WCAG 1.4.4 Cambio de tamaño del texto (AA) exige que el texto se amplíe hasta el 200 % sin pérdida de contenido ni funcionalidad. El zoom del navegador usa Ctrl y más en Windows o Cmd y más en macOS. Prueba también un tamaño de fuente predeterminado mayor, que cambia el texto sin ampliar todo lo demás de la misma forma.
WCAG 1.4.10 Redistribución del contenido (AA) exige que el contenido ordinario funcione con un ancho de 320 px CSS sin desplazamiento en dos direcciones. Una ventana de 1280 px CSS de ancho con un zoom del 400 % proporciona ese ancho efectivo. Los párrafos deben ajustarse en una columna estrecha, con todas las funciones disponibles. Hay excepciones para tablas de datos, mapas y otros contenidos cuyo significado necesita dos dimensiones.
Deja que la disposición crezca con el texto
Usa unidades de fuente relativas como rem y em para que el texto siga el ajuste de fuente predeterminado del usuario. El texto en píxeles CSS sigue respondiendo al zoom del navegador, pero no sigue ese ajuste predeterminado de la misma manera. Los contenedores flexibles y max-width permiten que las líneas se ajusten; los puntos de ruptura en em pueden adaptarse a medida que crece el texto.
Una altura fija puede cortar contenido sin que sea evidente:
/* Problem when larger text needs more space */
.card { height: 200px; overflow: hidden; }
/* Content can grow beyond the minimum */
.card { min-height: 200px; }
Deja que el contenido determine su altura. Con anchos reducidos, apila la navegación u ofrece un control accesible para mostrarla y ocultarla en lugar de eliminar enlaces. Deja que una cabecera adhesiva demasiado grande se desplace fuera de la pantalla si consume demasiado espacio de la vista utilizable.
Mantén disponible el zoom en móviles
Usa una declaración del área de visualización que siga el ancho del dispositivo:
<meta name="viewport" content="width=device-width, initial-scale=1">
No añadas maximum-scale=1 ni user-scalable=no. Intentan bloquear el zoom mediante el gesto de pellizco, que las personas con baja visión pueden necesitar. Algunos navegadores ignoran esas restricciones, pero los usuarios no deberían tener que depender de ese comportamiento.
Aplica el espaciado del usuario
WCAG 1.4.12 Espaciado del texto (AA) exige que no haya pérdida de contenido ni solapamientos cuando los usuarios establecen la altura de línea en 1,5 veces el tamaño de fuente, el espaciado entre párrafos en 2 veces, el espaciado entre letras en 0,12 veces y el espaciado entre palabras en 0,16 veces. Son ajustes de prueba, no valores de diseño predeterminados obligatorios. Usa una herramienta de espaciado del texto y comprueba etiquetas, tarjetas, menús y botones, además de los párrafos.
Una comprobación práctica combina una prueba de texto al 200 %, una prueba de redistribución a 320 px CSS y la modificación del espaciado. Busca líneas cortadas, etiquetas solapadas, desplazamiento horizontal de párrafos y funciones que hayan desaparecido. Corrige el contenedor o la disposición que causa el problema; reducir el texto que el usuario ha ampliado elimina el beneficio que buscaba.
Puntos clave
- Mantén disponibles el texto y las funciones con una ampliación del 200 %.
- Comprueba la redistribución del contenido ordinario con un ancho de 320 px CSS.
- Usa tamaños de fuente relativos y contenedores que puedan crecer.
- Permite el zoom mediante el gesto de pellizco y conserva las funciones en disposiciones estrechas.
- Comprueba que las modificaciones del espaciado del texto por el usuario no causen cortes ni solapamientos.
5Crea formularios accesibles
Un formulario accesible explica qué introducir, facilita la identificación de cada control y ayuda a recuperarse de los errores. Asocia etiquetas e instrucciones visibles en HTML, usa las funciones de entrada y rellenado automático del navegador y conserva las respuestas durante todo el proceso. Cuando aparezca un mensaje, decide si el foco debe desplazarse a él o si un anuncio puede permitir que el usuario siga trabajando donde estaba.
5.1 Etiqueta y agrupa todos los controles del formulario
Una etiqueta visible indica qué debe introducir una persona y da al campo un nombre accesible. Las etiquetas de grupo añaden la pregunta a la que responden varias opciones. Las asociaciones deben existir en el HTML, incluso cuando las etiquetas y los campos ya aparecen cerca unos de otros.
Asocia una etiqueta a un control
Una etiqueta explícita usa for para hacer referencia al id único del control:
<label for="email">Email address</label>
<input id="email" name="email" type="email">
El navegador puede anunciar «Email address» cuando el campo recibe el foco. Hacer clic en el texto también da el foco al campo, lo que proporciona a los usuarios un área de activación mayor. El atributo name identifica los datos enviados; no sustituye al id que usa la etiqueta.
Una etiqueta implícita envuelve su campo de entrada: <label>Email address <input type="email" name="email"></label>. Esto funciona cuando ambos caben dentro del mismo elemento de etiqueta. Con contenedores de disposición separados, la asociación explícita es más fácil de mantener.
Un texto de marcador de posición desaparece al escribir y suele tener poco contraste. Mantén visible la etiqueta y coloca cerca los ejemplos o las indicaciones de formato. «Campo 1» es técnicamente un nombre, pero no describe la finalidad. WCAG 2.4.6 Encabezados y etiquetas (AA) exige una redacción descriptiva.
Conserva las palabras visibles en el nombre
Una persona que usa control por voz puede decir «haz clic en Enviar» después de ver un botón Enviar. Si aria-label="Submit form" prevalece sobre el texto de ese botón, su nombre accesible deja de contener las palabras visibles. WCAG 2.5.3 Etiqueta en el nombre (A) exige que se incluyan esas palabras, preferiblemente al principio. Usa el propio texto visible cuando sea posible: <button type="submit">Send message</button>.
Un campo de búsqueda aislado puede tener una etiqueta oculta visualmente si un botón Buscar cercano deja clara su finalidad visualmente. Las etiquetas ocultas no son un sustituto general de las instrucciones visibles en todo un formulario.
Agrupa las opciones bajo su pregunta
<fieldset>
<legend>Delivery method</legend>
<input type="radio" id="pickup" name="delivery" value="pickup">
<label for="pickup">Pick up in store</label>
<input type="radio" id="courier" name="delivery" value="courier">
<label for="courier">Courier delivery</label>
</fieldset>
La leyenda proporciona la pregunta del grupo; cada botón de opción sigue necesitando su propia etiqueta. Los lectores de pantalla pueden anunciar el contexto del grupo junto con una opción. Usa el mismo name para opciones excluyentes y leyendas breves que sigan siendo útiles cuando se repitan. Las casillas de verificación relacionadas también pueden usar un fieldset y una legend.
Elige los tipos y comprueba las asociaciones
Usa email, tel, url y date para los datos correspondientes. Los tipos de correo electrónico y URL proporcionan una comprobación de formato; los campos de teléfono pueden ofrecer un teclado móvil adecuado, pero no validan los formatos de número de teléfono. Usa number para cantidades como el número de invitados, no para identificadores como números de teléfono o de tarjeta.
Haz clic en cada etiqueta para comprobar su asociación. Si el campo equivocado recibe el foco, busca ID duplicados o un for que no coincida. Inspecciona también el nombre calculado en las herramientas de desarrollo; la proximidad visual por sí sola no puede asociar una etiqueta.
Puntos clave
- Asocia cada etiqueta al ID único de un campo o haz que envuelva su único control.
- Mantén visibles las etiquetas; usa los textos de marcador de posición solo como contenido complementario.
- Mantén el texto visible de la etiqueta dentro del nombre accesible.
- Usa fieldset y legend para un grupo de opciones relacionadas.
- Elige los tipos de entrada según el tipo de datos y comprueba las asociaciones de las etiquetas.
5.2 Proporciona instrucciones, señala los campos obligatorios y permite el rellenado automático
Las instrucciones ayudan más cuando llegan antes de que se produzca un error. Un buen formulario explica qué datos se esperan, muestra qué campos son obligatorios y admite las herramientas del navegador para introducir información personal. También evita que los usuarios repitan trabajo innecesariamente.
Asocia un texto de ayuda sin sustituir la etiqueta
<label for="pw">Password (required)</label>
<input id="pw" type="password" required
autocomplete="new-password" aria-describedby="pw-hint">
<p id="pw-hint">At least 12 characters.</p>
La etiqueta da nombre al campo. El párrafo visible explica su requisito y aria-describedby añade ese texto como descripción. Los lectores de pantalla pueden anunciarlo después del nombre. Para varias descripciones, enumera sus ID separados por espacios, como en aria-describedby="pw-hint pw-error".
Marca los campos obligatorios visualmente y con required. Puedes escribir «(obligatorio)» o explicar un asterisco al principio del formulario. El atributo nativo required permite la validación del navegador e informa a las tecnologías de apoyo; no necesita un aria-required="true" adicional.
Identifica la finalidad de los datos personales
Según 1.3.5 Identificar el propósito de la entrada (AA), los campos que recogen información del usuario necesitan identificadores de autocomplete adecuados. Algunos ejemplos son name, given-name, family-name, email, tel, street-address, postal-code, country-name y bday. Los campos de inicio de sesión pueden usar username y current-password; una contraseña nueva usa new-password y un código de verificación puede usar one-time-code.
Estos identificadores permiten que los navegadores, los gestores de contraseñas y las herramientas de apoyo reconozcan la finalidad de un campo. Usa el identificador correspondiente a la persona cuyos datos se están introduciendo. Marcar la dirección de contacto de un amigo como el correo propio del usuario para el rellenado automático puede introducir datos equivocados.
Reduce la necesidad de memorizar y volver a introducir datos
Permite pegar en los campos de contraseña y código de verificación y admite gestores de contraseñas. WCAG 3.3.8 Autenticación accesible (mínimo) (AA) permite pruebas cognitivas durante el inicio de sesión solo si se ofrece una alternativa o ayuda que cumpla el criterio, o si se aplican las excepciones especificadas de reconocimiento de objetos o contenido personal. Bloquear el pegado crea una barrera cuando obliga a recordar o transcribir datos y no existe otro método de inicio de sesión que cumpla el criterio.
En un pedido de varios pasos, conserva la información ya introducida. Una opción «La dirección de facturación es la misma que la de entrega» evita volver a escribirla. WCAG 3.3.7 Entrada redundante (A) permite excepciones cuando la repetición es esencial, necesaria por seguridad o la información anterior ya no es válida.
Proporciona una salvaguarda para envíos con consecuencias
Un pedido puede crear un compromiso financiero. Antes de completarlo, ofrece un paso de revisión que permita corregir los datos. Según 3.3.4 Prevención de errores (legales, financieros, de datos) (AA), los envíos pertinentes deben poder revertirse, comprobarse y corregirse, o revisarse y confirmarse con la posibilidad de corregirlos. El alcance también incluye cambiar o eliminar datos almacenados que controla el usuario y enviar respuestas de pruebas.
Mantén la disposición del formulario fácil de seguir cuando se amplíe: las etiquetas directamente encima de los campos y una sola columna principal reducen la distancia entre una instrucción y el lugar donde se aplica.
Distingue el formato de la finalidad de los datos personales
El tipo de entrada y el identificador de autocompletado responden a preguntas distintas. El tipo identifica la clase de valor y puede proporcionar una comprobación de formato. El identificador identifica la información personal del usuario para el rellenado automático:
<label for="your-email">Your email address (required)</label>
<input id="your-email" name="email" type="email"
required autocomplete="email">
<label for="guest-email">Guest's email address</label>
<input id="guest-email" name="guest-email" type="email">
Ambos campos aceptan direcciones de correo electrónico, pero solo el primero pide el correo del usuario actual. El segundo no debe marcarse como el correo de ese usuario para el rellenado automático. Las etiquetas visibles mantienen la distinción para quienes introducen los valores por sí mismos. Cambiar un identificador no cambia lo que comprueba el tipo de correo electrónico.
Puntos clave
- Proporciona instrucciones visibles antes de introducir datos y asocia los textos de ayuda con
aria-describedby. - Marca los campos obligatorios tanto visualmente como con el atributo nativo
required. - Usa identificadores de autocompletado adecuados para la información del usuario.
- Admite gestores de contraseñas y el pegado para reducir las barreras de inicio de sesión.
- Reutiliza respuestas anteriores en procesos de varios pasos, salvo que se aplique una excepción.
- Proporciona una salvaguarda adecuada de prevención de errores para los envíos con consecuencias.
5.3 Comunica con claridad los errores y los mensajes de estado
Un mensaje de error debe ayudar a recuperarse sin perder el trabajo ya realizado. Un mensaje de estado debe comunicar un cambio sin hacer que la persona pierda su lugar. Ambos necesitan una redacción visible y la asociación correcta en el código.
Indica el problema y una corrección útil
«Entrada no válida» ayuda poco. «Error: introduce una dirección de correo electrónico con el formato nombre@ejemplo.com» identifica lo que necesita atención y sugiere una solución. WCAG 3.3.1 Identificación de errores (A) exige que los errores detectados se describan en texto; 3.3.3 Sugerencia de corrección de errores (AA) exige ofrecer las correcciones conocidas cuando no comprometan la seguridad ni la finalidad del formulario.
<label for="email">Email address</label>
<input id="email" type="email" aria-invalid="true"
aria-describedby="email-error">
<p id="email-error">Error: Enter an email address in the format name@example.com</p>
Establece aria-invalid="true" solo después de comprobar el campo y encontrar un error. El atributo comunica el estado no válido; la descripción explica el motivo. Un borde rojo por sí solo no proporciona ni la explicación textual ni la asociación.
Ayuda a encontrar varios errores
Después del envío, un formulario largo puede mostrar un resumen de errores en la parte superior. Dale un encabezado como «Hay 2 problemas con tu pedido» y añade enlaces a los campos afectados. Permite que el resumen reciba el foco con tabindex="-1" y haz que el script se lo dé. Añadir «Error: » al principio del título de la página también ayuda a identificar el cambio de estado de la página.
Mantén también los mensajes de cada campo junto a sus entradas y conserva todo lo que ya se haya introducido. Un enlace del resumen lleva a la persona al campo; la explicación junto a él ayuda mientras lo corrige. Vaciar todos los campos obliga a repetir el trabajo ya realizado correctamente.
Los atributos de validación nativos, como required, type="email" y minlength, pueden proporcionar mensajes del navegador. Un sistema personalizado puede usar novalidate y mostrar los suyos. En ambos casos, los errores necesitan texto que los usuarios puedan localizar y asociar al campo correspondiente.
Anuncia un cambio sin mover el foco
Una actualización del carrito suele producirse mientras el foco debe permanecer en el botón Añadir. Usa una región viva que ya esté presente en el documento:
<p role="status" id="cart-status"></p>
Cuando se añade un artículo, un script cambia su texto a «Se ha añadido 1 pan de masa madre a tu carrito». role="status" es cortés: permite que el lector de pantalla termine lo que está diciendo antes de anunciar la actualización. Esto ayuda a cumplir 4.1.3 Mensajes de estado (AA).
Reserva role="alert", un anuncio asertivo, para los mensajes urgentes. Las interrupciones continuas dificultan las compras habituales. Inserta la región vacía antes de actualizar su contenido; crear la región y su mensaje a la vez no se anuncia de forma fiable en muchas combinaciones. Mantén el foco en la tarea para las actualizaciones habituales y muévelo de forma intencionada en situaciones como un resumen de errores que el usuario necesita revisar.
Puntos clave
- Identifica los errores en texto y sugiere una corrección cuando se conozca.
- Usa
aria-invalidcuando una comprobación detecte un error y asocia su descripción. - Conserva los datos introducidos y proporciona un resumen de errores en formularios largos.
- Actualiza una región de estado existente para anunciar cambios habituales sin mover el foco.
- Reserva las alertas para los mensajes urgentes.
6Usa ARIA con moderación y prueba tus páginas
ARIA puede describir información que el HTML nativo no expresa por sí solo, pero sus promesas deben coincidir con el comportamiento de la interfaz. Aprende a elegir nombres y estados con cuidado y después inspecciona lo que comunica el navegador. Combina los análisis automáticos con pruebas de teclado, zoom y lector de pantalla para encontrar tanto errores de código como barreras que necesitan juicio humano. Un hallazgo útil incluye una forma clara de reproducirlo y volver a probarlo.
6.1 Aplica las reglas de uso de ARIA
ARIA añade información al árbol de accesibilidad cuando HTML necesita ayuda para expresar un nombre, una relación o un estado. No crea la interacción en sí. Antes de añadir un atributo, comprueba qué proporciona ya el elemento nativo y qué falta realmente.
Trata un rol como una promesa
WAI-ARIA significa Aplicaciones de Internet Enriquecidas Accesibles. La versión 1.2 se convirtió en recomendación del W3C en junio de 2023. Sus roles, estados y propiedades influyen en lo que se comunica a las tecnologías de apoyo. Un rol como button promete un comportamiento de botón, pero no crea la capacidad de recibir el foco, la activación con teclado ni los estilos.
Un div con role="button" sigue necesitando gestión del teclado y capacidad de recibir el foco. Un button real ya las proporciona. El principio de la guía ARIA Authoring Practices Guide «es mejor no usar ARIA que usarlo mal» advierte de que la información incorrecta puede confundir a los usuarios sobre lo que hace un control.
Conserva el significado nativo
Usa primero elementos y atributos nativos: nav, button, un campo de casilla de verificación y el atributo nativo required. Evita repetir roles implícitos como role="main" en main o role="button" en button. Una excepción útil es role="list" en una lista cuyas viñetas eliminadas afectan a los anuncios de VoiceOver.
No sustituyas el significado de un encabezado por un rol de botón. Anida un botón dentro de él:
<h2>
<button type="button" aria-expanded="false">Shipping</button>
</h2>
El encabezado sigue apareciendo en la navegación por encabezados y su botón expone la acción. El script debe hacer que el contenido mostrado y el estado expandido coincidan.
Nunca pongas aria-hidden="true" en un control que pueda recibir el foco ni en un antecesor que lo contenga. El foco podría llegar a algo eliminado del árbol de accesibilidad. role="presentation" y role="none" funcionan de otra forma: eliminan la semántica, no el contenido. Los navegadores ignoran esos roles en elementos que pueden recibir el foco, por lo que no pueden usarse para convertir un enlace activo en texto simple.
Encuentra la fuente de un nombre
Para los controles habituales de esta sección, comprueba las fuentes del nombre en este orden de prioridad:
aria-labelledby, que hace referencia a texto mediante un ID.aria-label, que proporciona una cadena de texto.- La fuente nativa, como una etiqueta, el texto de un botón o el texto alternativo de una imagen.
title, como último recurso cuando corresponda.
aria-describedby añade una descripción después del nombre; no establece el nombre. Una sustitución puede ocultar accidentalmente palabras visibles útiles. <button aria-label="Close dialog">Cancel</button> se anuncia como «Close dialog», aunque la persona ve «Cancel». Prefiere el texto visible o inclúyelo al principio de un nombre ampliado que sea necesario.
Los sitios básicos suelen necesitar ARIA para nombres de puntos de referencia repetidos, botones con iconos, textos de ayuda y errores de campos, controles para mostrar y ocultar contenido, enlaces a la página actual y actualizaciones en vivo. Una gran cantidad de atributos ARIA no es una medida de calidad. Inspecciona el rol y el nombre calculados y usa el teclado para verificar el comportamiento que promete el rol.
Sigue las fuentes de nombre que compiten
Considera un botón con varios atributos que proporcionan un nombre:
<h2 id="options-title">Delivery options</h2>
<button type="button" aria-labelledby="options-title"
aria-label="Choose delivery">Show pickup options</button>
Sigue primero aria-labelledby: el texto al que hace referencia proporciona «Delivery options». El aria-label de menor prioridad y el texto visible del botón no prevalecen. Por tanto, eliminar solo aria-label deja el mismo nombre calculado.
Para que «Show pickup options» dé nombre a este botón, elimina ambas sustituciones innecesarias. El rol de botón permanece igual en todo momento; solo cambia la fuente de su nombre. Inspecciona el nombre calculado después de cada edición para saber qué atributo causó la discrepancia. Añadir una descripción no corregiría el nombre equivocado, porque una descripción es una información independiente.
Puntos clave
- Prefiere el significado y el comportamiento del HTML nativo antes de añadir ARIA.
- ARIA cambia el árbol de accesibilidad, no la gestión del teclado ni los estilos.
- Conserva la semántica nativa al añadir contenido interactivo.
- Nunca ocultes con
aria-hiddenun elemento que pueda recibir el foco ni uno de sus antecesores. - Comprueba las sustituciones de nombres; las descripciones no sustituyen a los nombres.
6.2 Comunica los cambios de estado con ARIA
Una interfaz que cambia debe comunicar lo mismo visualmente y mediante el código. Si un panel está abierto pero su botón sigue indicando «contraído», quien usa un lector de pantalla recibe información falsa. Actualiza el estado cada vez que cambie la interfaz.
Mantén sincronizado un control para mostrar y ocultar contenido
<button type="button" aria-expanded="false"
aria-controls="main-menu">Menu</button>
<ul id="main-menu" hidden>
<li><a href="/bread">Bread</a></li>
</ul>
Cuando se abre el menú, el script elimina hidden y establece aria-expanded del botón en true. Cuando se cierra, el script restablece hidden y establece el estado en false. El estado pertenece al botón que realiza el cambio. aria-controls identifica el elemento afectado; su compatibilidad varía, por lo que no puede sustituir al estado expandido ni al comportamiento real de ocultación.
Elige el estado adecuado para el control
| Situación | Atributo |
|---|---|
| Un control abre o cierra contenido | aria-expanded |
| Un enlace de navegación identifica la página actual | aria-current="page" |
| Un botón permanece activado o desactivado | aria-pressed |
Para el enlace de la página actual, aplica estilos al mismo atributo en CSS, como una fuente en negrita y un borde inferior en a[aria-current="page"]. Esto mantiene el resaltado visual vinculado al estado anunciado. aria-selected corresponde a componentes como pestañas y opciones de cuadros de lista, no a enlaces normales de navegación entre páginas.
Un botón de alternancia puede mantener la etiqueta «Silenciar» y cambiar aria-pressed entre false y true. Otro diseño válido cambia la etiqueta de un botón de acción normal entre «Silenciar» y «Activar sonido» sin un estado pulsado. No combines una etiqueta de acción cambiante con el patrón de estado de alternancia, que puede producir anuncios confusos como «Activar sonido, pulsado».
Distingue entre ocultar y deshabilitar
aria-hidden="true" elimina un elemento y sus descendientes del árbol de accesibilidad, pero los deja visibles. Úsalo para iconos decorativos o contenido visual redundante. No impide el acceso con teclado. Usa hidden o display: none cuando una región deba estar indisponible para todo el mundo.
El atributo nativo disabled impide la interacción normal con un control nativo. aria-disabled="true" comunica un estado no disponible, pero no bloquea los clics ni la activación con teclado. Si ese atributo se usa para que un control deshabilitado pueda recibir el foco y ofrecer una explicación, el script debe impedir su acción. Prefiere también los atributos nativos checked y required en campos de entrada nativos.
Prueba ambas direcciones
Abre y cierra el control con el teclado mientras observas los atributos en las herramientas de desarrollo. Inspecciona el estado calculado y escucha su anuncio. Un cambio visual correcto por sí solo no demuestra que se haya actualizado el estado, y un atributo cambiado por sí solo no demuestra que el panel se haya vuelto visible o utilizable.
Puntos clave
- Actualiza los estados ARIA cada vez que cambie el estado correspondiente de la interfaz.
- Pon
aria-expandeden el control que muestra y oculta el contenido. - Usa
aria-current="page"para los enlaces a la página actual. - Mantén estable la etiqueta de un botón de alternancia con estado pulsado.
- La ocultación y la deshabilitación mediante ARIA no proporcionan comportamiento de teclado ni de clic.
6.3 Ejecuta comprobaciones automáticas de accesibilidad e interpreta los resultados
Las comprobaciones automáticas encuentran rápidamente muchos problemas de código en una página renderizada. Usa sus resultados para localizar barreras y verificar las correcciones. Sus reglas pueden inspeccionar algunas relaciones y valores, pero decidir si el contenido tiene sentido sigue requiriendo una persona.
Elige una herramienta e inspecciona sus hallazgos
Axe DevTools usa el motor axe-core. WAVE coloca marcadores en la página para que los hallazgos puedan verse en contexto. Lighthouse, en las herramientas de desarrollo de Chrome, da una puntuación de accesibilidad mediante una selección de comprobaciones de axe-core. Accessibility Insights proporciona otro proceso de pruebas. El servicio de validación de marcado del W3C comprueba problemas de HTML como ID duplicados y elementos sin cerrar.
Según sus reglas y el contexto, las herramientas pueden detectar atributos alt ausentes, controles sin nombre, campos sin etiqueta, bajo contraste de texto sobre fondos lisos, ausencia del idioma de la página y ARIA no válido. Algunos problemas de niveles de encabezado aparecen como advertencias. Lee la explicación del hallazgo e inspecciona el elemento que identifica.
Una alerta o un resultado de «necesita revisión» requiere juicio. Un texto en negrita señalado como posible encabezado podría ser un título de sección real escrito como párrafo o simplemente dar énfasis a una frase. Examina su finalidad antes de cambiar su marcado.
Comprende lo que el análisis no puede decidir
Una herramienta puede ver alt="photo" sin saber que la alternativa es inútil. No puede juzgar de forma fiable si el texto de un enlace es claro, los subtítulos son precisos, el orden de foco es lógico o un mensaje de error ayuda a recuperarse. Una capa visual superpuesta puede atrapar el teclado de una forma que el análisis actual no detecte. El texto sobre una fotografía también necesita una comprobación manual del contraste.
Una puntuación de 100 significa que las reglas probadas no encontraron fallos. No es un veredicto de conformidad con las WCAG. Sigue probando las tareas y los significados que esas reglas no pueden evaluar.
Prueba los estados que usan las personas
Un análisis examina el estado renderizado en ese momento. Ejecuta las comprobaciones en cada plantilla de página y repítelas con menús y cuadros de diálogo abiertos, después de errores de formulario y con anchos reducidos. Un componente cerrado puede ocultar problemas que solo aparecen durante su uso.
Supongamos que un informe de una panadería encuentra una imagen principal destacada sin alt, un campo del boletín sin etiqueta y texto de pie de página #999999 sobre blanco. Decide primero si la imagen informa o decora. Añade una alternativa útil o alt="" según corresponda. Asocia el campo de correo a una etiqueta visible. La pareja de colores del pie de página tiene un contraste de 2,85:1; sustituir el color del texto por #595959 da 7,00:1 sobre blanco.
Corrige las causas y verifica los resultados
Prioriza las barreras según su efecto en la tarea. Una trampa de teclado o un control obligatorio sin nombre pueden impedir por completo un pedido. Corrige un campo o componente de pie de página compartido en su origen para que mejoren todas las páginas que lo usan. Después vuelve a ejecutar el análisis en el mismo estado y repite la prueba manual pertinente. Una menor cantidad de errores es una prueba útil, pero la corrección también debe permitir que la persona complete la tarea.
Puntos clave
- Usa herramientas automáticas para localizar problemas detectables por máquinas.
- Inspecciona las alertas y los elementos pendientes de revisión antes de decidir una corrección.
- Un informe sin errores solo abarca las comprobaciones que la herramienta puede realizar.
- Analiza las plantillas de página y los estados interactivos, no solo las páginas iniciales.
- Prioriza las barreras que impiden completar tareas, corrige las causas compartidas y vuelve a probar.
6.4 Realiza pruebas manuales con teclado, zoom y lector de pantalla
Las pruebas manuales muestran cómo se comporta una página durante una tarea real. Combina el uso del teclado, las vistas ampliadas, las comprobaciones con lector de pantalla y la inspección directa del árbol. Registra suficiente detalle para que otra persona pueda reproducir un problema y confirmar su corrección.
Sigue una tarea con teclado de principio a fin
Deja el ratón a un lado. Empieza en la barra de direcciones y recorre la página con Tab. Llega a todos los enlaces y controles, usa Intro y Espacio cuando corresponda y retrocede con Mayús+Tab. Comprueba que el foco siga visible y no quede cubierto por una región adhesiva.
Usa el enlace de salto, abre y cierra menús, cierra un cuadro de diálogo con Escape y verifica adónde vuelve el foco. Busca paradas invisibles en componentes cerrados y trampas en reproductores o mapas insertados. En un Mac, activa la navegación con teclado y la navegación completa con Tab de Safari antes de considerar que los controles omitidos son un defecto de la página.
Amplía y redistribuye la página
Prueba con una ampliación del 200 % sin perder texto ni funcionalidad. Después usa una ventana de 1280 px CSS de ancho con un zoom del 400 %, equivalente a 320 px CSS de ancho disponible. Comprueba que los párrafos no tengan desplazamiento horizontal, solapamientos ni cortes. Mantén todas las funciones disponibles en la disposición estrecha. Aplica los valores de espaciado del texto con una herramienta e inspecciona los controles además del texto principal.
Escucha la estructura y los nombres
NVDA en Windows usa Insert como tecla NVDA predeterminada; Bloq Mayús es una alternativa opcional. En modo de lectura, H recorre los encabezados, D los puntos de referencia, K los enlaces, F los campos, T las tablas y B los botones. NVDA+F7 abre la lista de elementos. Tab sigue recorriendo los controles interactivos.
En macOS, Cmd+F5 activa o desactiva VoiceOver. Su modificador VO es Control+Opción; VO+Flecha derecha lee el siguiente elemento y VO+U abre el rotor. En iPhone, deslizar a la derecha lleva al siguiente elemento de VoiceOver. TalkBack ofrece una lectura táctil similar en Android.
Escucha si hay un título y un esquema útiles, nombres claros para los controles, roles correctos, alternativas útiles para las imágenes y etiquetas de campo comprensibles. Los estados obligatorios, los textos de ayuda y los errores deben estar disponibles en los campos correspondientes. Abre un control para mostrar y ocultar contenido y escucha el cambio de estado. Añade un artículo y escucha si se anuncia una actualización de estado sin que salte el foco.
Inspecciona, registra y vuelve a probar
El panel Accesibilidad de Chrome y el Inspector de accesibilidad de Firefox muestran los roles, nombres y estados calculados. Ayudan a averiguar por qué una etiqueta es incorrecta incluso antes de ejecutar un lector de pantalla.
Un informe útil indica la ubicación, los pasos, el comportamiento observado, los usuarios afectados, el criterio relacionado y la corrección sugerida. Por ejemplo: «Campo del boletín en el pie de página: usa Tab para llegar al campo; se anuncia sin etiqueta. Quienes usan lectores de pantalla y control por voz no pueden identificar su finalidad. Añade una etiqueta asociada de dirección de correo electrónico; comprueba 1.3.1, 3.3.2 y 4.1.2».
Vuelve a probar con el método que detectó el problema. Las combinaciones habituales incluyen NVDA con Firefox o Chrome, JAWS con Chrome y VoiceOver con Safari. Las pruebas con personas que usan tecnologías de apoyo a diario pueden revelar barreras que un desarrollador que las usa ocasionalmente pasa por alto.
Haz reproducible un fallo de estado
Un informe sobre un control para mostrar y ocultar contenido puede registrar una prueba breve y completa:
- En la página del pan, usa NVDA con Firefox y llega con Tab a «Opciones de entrega».
- Pulsa Intro una vez. El panel se vuelve visible, pero el botón sigue anunciándose como contraído.
- Inspecciona el botón:
aria-expandedsigue siendofalse.
Se informa al usuario afectado de que el panel visible sigue cerrado. Registra 4.1.2 Nombre, función, valor (A) y sugiere actualizar el estado del botón cuando cambie el panel. Tras la corrección, repite la apertura y el cierre con las mismas teclas y la misma combinación. Comprueba que la visibilidad del panel y el estado expandido anunciado coincidan en ambas direcciones; inspeccionar solo el estado inicial contraído no detectaría este fallo.
Puntos clave
- Prueba una tarea completa usando el teclado en ambas direcciones.
- Comprueba la ampliación, la redistribución y el espaciado del usuario.
- Escucha la estructura, los nombres, los estados, los errores y las actualizaciones en vivo.
- Usa el árbol de accesibilidad para rastrear la información calculada.
- Registra hallazgos reproducibles y vuelve a probar la corrección con el mismo método.
- Incluye a personas que usan tecnologías de apoyo a diario cuando sea posible hacer pruebas.
Ejemplos de Páginas web accesibles
1Crea una página que se explique por sí sola
12 pasos
- 1IntroducciónLee la página a través de su código
La página de una panadería parece clara: un título grande, un menú, algunos nombres de sección en negrita y un control Guardar. Ahora comprueba si el código expresa esos mismos significados, porque los lectores de pantalla usan el árbol de accesibilidad que el navegador construye a partir de él, no la apariencia. Seguirás la interpretación del navegador, crearás un esquema de encabezados y elegirás controles nativos que funcionen sin ratón.
- 2ExplicaciónEncuentra el rol, el nombre y el estado
El navegador deriva un árbol de accesibilidad del documento HTML. El rol de un control indica qué es, su nombre lo identifica y su estado indica en qué condición se encuentra.
Una casilla marcada «Ofertas por correo» necesita los tres. Los lectores de pantalla usan esta información para leerla en voz alta o enviarla a braille; los estilos visuales por sí solos no pueden proporcionarla de forma fiable.
- 3EjemploCorrige un control Guardar
La página usa un
diven el que se puede hacer clic. Parece un botón, pero no tiene rol de botón nativo, parada de Tab ni activación con Intro o Espacio.Sustitúyelo por:
<button type="button">Save</button>El texto proporciona el nombre y el elemento proporciona el comportamiento de botón. Usa Tab para llegar a él y después Intro y Espacio para comprobar la activación. Aplica estilos al botón con CSS para mantener el aspecto deseado; no es necesario reconstruirlo como un contenedor genérico.
- 4DesafíoElige la siguiente comprobación
El botón Guardar funciona con ratón. Un desarrollador dice que eso también demuestra que se puede usar con teclado. ¿Qué debes hacer?
---reveal---
Llega a él con Tab y actívalo con Intro y Espacio. La activación con ratón solo prueba una vía. Un botón nativo proporciona estos comportamientos con teclado, mientras que un elemento genérico en el que se puede hacer clic aún puede bloquearlos.
- 5EjemploDa una identidad a la página
Empieza por identificar el idioma y el tema de la página:
<html lang="en-US"> <head> <title>Choose a cake – Green Leaf Bakery</title> </head>El idioma permite una pronunciación adecuada. El título distingue esta página de otras pestañas de la panadería y está disponible en los anuncios de los lectores de pantalla.
Coloca el contenido principal en una sola región
mainvisible. El idioma, el título y la región principal responden a preguntas distintas: cómo leer, qué página es y dónde empieza su contenido. - 6EjemploConvierte los nombres de sección en encabezados
La página contiene un tema, dos secciones y un sabor dentro de una sección. Expresa esas relaciones en el código:
<h1>Choose a cake</h1> <h2>Sizes</h2> <h2>Flavors</h2> <h3>Lemon</h3>Ahora quien escucha puede usar la navegación por encabezados para llegar al nivel correcto. Lee solo estos nombres de encabezado en orden: deben seguir describiendo el esquema de la página. Define los tamaños de fuente visuales con CSS después de elegir los niveles, para que una sección principal que se vea más pequeña pueda seguir siendo un
h2. - 7DesafíoMantén un esquema con sentido
«Detalles de recogida» es una sección principal, pero
h4tiene el tamaño de fuente deseado. ¿Qué marcado debes usar?---reveal---
Usa
h2para esa sección principal y aplica estilos a su tamaño de fuente. Los niveles de encabezado expresan relaciones entre secciones. Elegirh4por su aspecto haría que el esquema sugiriera que faltan secciones intermedias. - 8ConsejoComprueba el recorrido del código fuente
Lee los encabezados como una lista e inspecciona el orden del HTML. El orden de flex puede mover visualmente un enlace de inicio de sesión al principio mientras lo deja al final en el DOM.
Muévelo en el HTML si esa es su posición lógica. Usa elementos de lista reales para los enlaces agrupados, de modo que el navegador pueda exponer tanto la agrupación como su tamaño.
- 9ExplicaciónElige qué promete el control
«Ver cursos» lleva a otra página, así que usa un elemento de anclaje con
href. «Mostrar filtros» cambia la página actual, así que usa un botón.Un enlace se activa con Intro; un botón se activa con Intro o Espacio. Dentro de un formulario, establece
type="button"en Mostrar filtros para que no envíe el formulario accidentalmente. - 10EjemploAsocia los horarios de apertura a los encabezados
Los horarios de apertura tienen relaciones entre filas y columnas. Expresa una tabla pequeña en el código:
<table> <caption>Opening hours</caption> <tr><th scope="col">Day</th><th scope="col">Opens</th></tr> <tr><th scope="row">Friday</th><td>08:00</td></tr> </table>El título da nombre a la tabla. Una persona que llegue a 08:00 puede oír la fila Friday y la columna Opens. Las celdas de encabezado y sus ámbitos proporcionan ese contexto; organizar cajas normales en filas no lo expresaría en el código.
- 11DesafíoRevisa un pequeño cambio en la página
Un enlace nuevo «Pedir ahora» lleva a
/order. La tabla de horarios de apertura se reconstruye con cajasdivy su título sigue siendo un párrafo en negrita. ¿Qué debe seguir siendo HTML nativo?---reveal---
Mantén el destino como un elemento de anclaje con
hrefy los horarios de apertura como una tabla real con título y encabezados con ámbito definido. Los estilos de negrita no pueden proporcionar un título de tabla ni relaciones entre encabezados y celdas. - 12RepasoInspecciona el significado antes que el aspecto
Comprueba la información de roles y nombres, el idioma, el título, los puntos de referencia, los encabezados y el orden del código fuente de la página. Después verifica los enlaces, botones, controles nativos y relaciones de la tabla. Un esquema del lector de pantalla y un breve recorrido con teclado ofrecen dos formas prácticas de ver si la estructura funciona.
2Elige la alternativa adecuada
10 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónPregúntate qué faltaría
- 2ExplicaciónDecide si la foto informa
- 3EjemploDa nombre a un enlace de imagen según su destino
- 4EjemploHaz que un gráfico esté disponible en texto
- 5DesafíoDescribe la función de un botón
- 6EjemploMantén un único nombre útil para el botón
- 7ExplicaciónSincroniza el habla y los sonidos con la reproducción
- 8ExplicaciónProporciona la información visual que falta
- 9DesafíoCompleta las alternativas multimedia
- 10RepasoElige según la finalidad y el medio
3Sigue el foco durante una tarea de compra
13 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónSigue la posición del usuario
- 2ExplicaciónUsa el recorrido nativo del teclado
- 3EjemploElimina las paradas invisibles
- 4DesafíoCorrige el recorrido
- 5EjemploRestablece un anillo claro
- 6EjemploMira debajo de la cabecera adhesiva
- 7DesafíoMide un área de activación pequeña
- 8EjemploAñade la ruta de salto
- 9DesafíoPrueba el propio enlace de salto
- 10EjemploAbre el cuadro de diálogo nativo
- 11ConsejoConserva un lugar útil después de eliminar un elemento
- 12DesafíoRelaciona el foco y la visibilidad
- 13RepasoRepite la interacción completa
4Comprueba la legibilidad de una página de panadería
12 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónPrueba tres aspectos de la legibilidad
- 2ExplicaciónElige el umbral antes de medir
- 3EjemploCompara un color cercano al umbral
- 4DesafíoComprueba dos usos de un mismo color
- 5ExplicaciónAñade significado más allá del color
- 6DesafíoComprueba las series de un gráfico
- 7EjemploEncuentra el contenedor que corta el contenido
- 8EjemploReduce el ancho efectivo de la vista
- 9ConsejoAplica el espaciado como lo haría un usuario
- 10DesafíoCorrige la disposición estrecha
- 11ConexiónCombina las comprobaciones
- 12RepasoMantén disponible la misma información
5Ayuda a un cliente a completar un pedido
13 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónSigue toda la tarea del formulario
- 2EjemploAsocia la etiqueta del correo electrónico
- 3EjemploProporciona la pregunta compartida
- 4DesafíoCorrige una discrepancia con el nombre visible
- 5ExplicaciónAñade el texto de ayuda antes del error
- 6EjemploAdmite herramientas de entrada de datos
- 7DesafíoConserva una respuesta para el siguiente paso
- 8EjemploIdentifica un campo que no supera la validación
- 9EjemploDa un punto de entrada a varios errores
- 10DesafíoAnuncia el resultado en el carrito
- 11ConexiónComprueba antes de confirmar
- 12DesafíoRelaciona la recuperación con el esfuerzo de entrada
- 13RepasoComprueba las etiquetas, las indicaciones y los mensajes
6Verifica la interfaz visible y la anunciada
16 pasos
Guarda esta unidad para seguir cada Lección Interactiva paso a paso.
- 1IntroducciónCompara lo que comunica la página
- 2ExplicaciónComprueba qué puede cambiar ARIA
- 3EjemploRastrea un nombre inesperado
- 4DesafíoConserva dos significados
- 5EjemploHaz que un estado coincida con su panel
- 6Idea claveMantén estable la etiqueta de un botón de alternancia
- 7DesafíoElige el estado de página
- 8ExplicaciónInterpreta el análisis como evidencia
- 9EjemploCorrige el origen compartido
- 10DesafíoInterpreta un resultado sin errores
- 11EjemploRecorre la ruta manualmente
- 12EjemploEscucha los nombres y la estructura
- 13EjemploRedacta un hallazgo reproducible
- 14DesafíoElige la nueva prueba
- 15DesafíoTermina la revisión combinada
- 16RepasoVerifica cada tipo de promesa
Ejercicios de Páginas web accesibles
Set 1: Elige una estructura clara y controles nativos10 Preguntas de Práctica
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Pregunta 2 de 10
h1 llamado «Cursos de panadería» y un h2 llamado «Cursos de fin de semana». ¿Qué nivel de encabezado corresponde a «Principiantes del domingo», una parte de Cursos de fin de semana?Mostrar respuestaOcultar respuesta
h2 corresponde al nivel h3. El nivel de encabezado expresa su lugar en el esquema, mientras que CSS controla su tamaño. Elegir h4 solo porque se ve más pequeño introduce un salto de nivel en lugar de describir la estructura de la página.Pregunta 3 de 10
/delivery de la panadería?Mostrar respuestaOcultar respuesta
href representa la navegación a un destino y permite la activación normal de un enlace. Un botón representa una acción, por lo que usarlo aquí daría un rol distinto del comportamiento de ir a un destino. Un elemento de anclaje sin href no proporciona un enlace normal que pueda recibir el foco del teclado.Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Pregunta 6 de 10
opacity: 0. ¿Qué debe cambiar mientras el menú está cerrado?Mostrar respuestaOcultar respuesta
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Pregunta 8 de 10
<label for="buyer-email">Email address</label><input id="email" name="buyer-email" type="email">. ¿Qué corrige directamente la asociación de la etiqueta?Mostrar respuestaOcultar respuesta
Pregunta 9 de 10
role="button", tabindex="0" y aria-label="Expand". Los clics del ratón expanden el contenido, pero Espacio no hace nada y la navegación por encabezados lo omite. ¿Qué estructura corrige la navegación por encabezados, las teclas del botón y la discrepancia con el nombre visible?Mostrar respuestaOcultar respuesta
aria-label="Expand" corrige la estructura y las teclas, pero sigue comunicando a quienes usan control por voz un nombre que no contiene las palabras que ven.Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Set 2: Mantén claros el foco, las indicaciones y el estado10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
display: none. Su destino es una región main sin ID. ¿Qué corrección proporciona un recorrido utilizable sin añadir main a cada secuencia de Tab?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
id="pw-help". ¿Qué atributo asocia ese texto como descripción?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
aria-invalid="false" y su aria-describedby apunta solo a un texto de ayuda antiguo, aunque existe un párrafo de error nuevo. ¿Qué corrección proporciona una vía completa de corrección?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 3: Aplica las reglas en estados reales de la página10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
aria-label="Return" y aria-labelledby="previous-title". El encabezado al que se hace referencia dice «Previous step». ¿Qué nombre debe esperar encontrar el desarrollador al inspeccionarlo?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 4: Diagnostica barreras durante una interacción10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
autocomplete="email" del cliente. ¿Qué plan aborda los tres problemas?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
aria-disabled="true", pero al hacer clic en él sigue realizando un pedido. ¿Qué comportamiento falta si el control debe seguir pudiendo recibir el foco?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Set 5: Revisa una página mediante varias vías de acceso10 Preguntas de Práctica
Guarda esta unidad para ver todas las respuestas y practicar cada set.
Pregunta 1 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 2 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 3 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 4 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 5 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 6 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 7 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 8 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 9 de 10
aria-hidden="true". El foco del teclado sigue entrando en esos enlaces. ¿Qué corrección hace que el panel cerrado no esté disponible por ninguna de las dos vías?Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
Pregunta 10 de 10
Mostrar respuestaOcultar respuesta
Guarda esta unidad para ver esta respuesta.
¿Te atascas con una pregunta tuya? Ayuda con Tareas
Términos Clave
A
Accesibilidad web
Atributo aria-current
aria-current="page" para que el mismo marcado controle el resaltado visible de navegación.Atributo aria-disabled
Atributo tabindex
tabindex="-1" para que un script pueda darle el foco después de eliminar el último artículo.Audiodescripción
Aviso de revisión
axe-core
Á
Ámbito del encabezado
scope="row" para que su nombre se asocie a las horas de apertura y cierre de esa fila.Árbol de accesibilidad
Área de activación del puntero
B
Barrera que impide completar una tarea
Botón
Botón de alternancia
C
Cambio de contexto
Campo obligatorio
required para las comprobaciones del navegador.Colores forzados
Comprobación automática de accesibilidad
Contraste no textual
Control de mostrar y ocultar contenido
aria-expanded, mientras un script también añade o elimina hidden en su lista.Control nativo
Criterio de conformidad de las WCAG
Cuadro de diálogo modal
D
Declaración del área de visualización
user-scalable=no a sus metadatos del área de visualización.Deficiencia de la visión del color
Descripción accesible
aria-describedby, mientras que la etiqueta sigue proporcionando el nombre «Contraseña».E
Enlace
Enlace de salto
Entrada redundante
Estado ARIA
Etiqueta de control de formulario
Etiqueta en el nombre
F
Foco del teclado
G
Gestión del foco
Gráficos vectoriales escalables (SVG)
role="img" y un título que dice «Valoración de 4 de 5 estrellas».Grupo de campos
H
HTML semántico
I
Identificación de errores
Identificador de autocompletado
autocomplete="current-password" para que un gestor de contraseñas pueda reconocerlo.Idioma de la página
lang="en-US", mientras que un pasaje breve en francés en ella tiene su propio atributo de idioma.Imagen compleja
Imagen de texto
Imagen decorativa
alt="" para no interrumpir la receta cuando se lee en voz alta.Imagen funcional
Indicación basada únicamente en el color
Indicación independiente del color
Indicador de foco
Inspección de accesibilidad
J
Jerarquía de encabezados
h2, con «Chocolate» y «Limón» como subsecciones h3 dentro de esa sección.L
Leyenda del grupo de campos
Lista de descripciones
Luminancia relativa
M
Mensaje de estado
Modificación del espaciado del texto por el usuario
N
Nombre accesible
O
Ocultación del elemento con foco
Orden de tabulación
Orden del código fuente
P
Prevención de errores
Prueba manual de accesibilidad
Pseudoclase :focus-visible
:focus-visible para mostrar un anillo destacado con teclado, mientras que los clics normales del ratón en botones pueden no mostrar ninguno.Punto de referencia
R
Redistribución del contenido
Región inerte
showModal() vuelve inerte la página del fondo mientras está activo.Región viva
Relación de contraste
Repetición de las pruebas
Resumen de errores
Rol
Rol de presentación
role="presentation" no puede convertir de forma fiable un enlace activo en texto simple ni ocultar su contenido.Rotor
S
Subtítulos
Subtítulos para personas sordas
Sugerencia de corrección de errores
T
Tecnología de apoyo
Texto alternativo
Texto de marcador de posición
Texto grande
Texto oculto visualmente
Título de la página
Título de la tabla
Trampa de teclado
Transcripción
U
Umbral de contraste
Unidad rem
1rem del body crece cuando el usuario aumenta el tamaño de fuente predeterminado del navegador.W
WAI-ARIA
WebVTT
Z
Zoom del navegador
Sobre esta unidad
Crea tus propios Materiales de Estudio
Convierte tus notas, diapositivas y documentos en Guías de Estudio, Preguntas de Práctica, Flashcards y 6 herramientas más.