HTML5: estructura, semántica y accesibilidad
Aquí se comprueba si sabes construir documentos HTML5 válidos, con estructura semántica y accesibles para teclado y lectores de pantalla. El examen suele presentar un fragmento de marcado y pedir el error, o describir un formulario y preguntar qué atributo falta.
Estructura y semántica
- El documento parte de
<!DOCTYPE html>,htmlconlang,headconmeta charsetymeta name=viewport, ybody. - Los landmarks nativos son
header,nav,main,footer,aside,sectionyarticle.maindebe ser único y contener el contenido principal. - Los encabezados
h1ah6forman una jerarquía; no se elige el nivel por el tamaño visual. Unarticlepuede tener su propioh1. sectionagrupa contenido con un tema y normalmente lleva encabezado;divqueda para agrupación sin significado.
Accesibilidad
- Toda imagen informativa necesita
altdescriptivo; una decorativa usaalt=""para que el lector la ignore. Nunca se omitealten imágenes con contenido. - Los campos de formulario necesitan
labelasociado porforeid. Elplaceholderno sustituye a la etiqueta. fieldsetylegendagrupan radios o casillas relacionadas.buttondebe declarartype=submitotype=button.- En tablas de datos,
thconscope=coloscope=row; las tablas de maquetación están desaconsejadas. - ARIA se usa cuando no existe un elemento nativo adecuado;
aria-labelnombra un control sin texto visible. Los enlaces deben tener texto comprensible, no solo “clic aquí”.
Ejemplo trabajado
Un formulario de acceso correcto sería: <form action=/login method=post>, <label for=email>Correo</label>, <input id=email name=email type=email autocomplete=email required>, <label for=pass>Contraseña</label>, <input id=pass name=password type=password autocomplete=current-password required> y <button type=submit>Entrar</button>. El razonamiento: label y id coinciden, los tipos activan teclados y validación, autocomplete ayuda a gestores de contraseñas, required da validación nativa y el botón declara su comportamiento. La validación del servidor sigue siendo obligatoria.
Errores que cuestan puntos
Usar placeholder como etiqueta; poner alt vacío en una foto informativa; construir botones con div y onclick; anidar main dentro de section; repetir nav sin aria-label; romper la jerarquía de encabezados por estética.