Técnica HTML WCAG 2.2
H71Proporcionar una descripción para los grupos de controles de formulario con los elementos fieldset y legend
En resumen
Esta técnica agrupa los controles de formulario relacionados (sobre todo botones de opción y casillas de verificación de una misma pregunta) dentro de un fieldset cuyo primer hijo es un legend con la descripción del grupo. Los lectores de pantalla anuncian ese legend junto a cada opción, así la persona sabe a qué responde aunque la etiqueta individual sea escueta. Úsela cuando las etiquetas de cada control no basten por sí solas.
Ejemplo práctico
Es necesaria en formularios con varias preguntas de respuesta «Sí / No» o con grupos de casillas, como un formulario de cita previa o una encuesta, donde la etiqueta de cada opción por sí sola no dice a qué pregunta pertenece.
Así no: Preguntas en párrafos sueltos
Cada pregunta es un p y los grupos son div. Visualmente se entiende, pero con el tabulador o el lector de pantalla solo se oye «Sí, botón de opción» o «No, botón de opción», sin saber a qué pregunta corresponde.
<style>
.grupo { border: 1px solid #767676; padding: 4px 12px 8px; margin: 0 0 12px; }
.pregunta { font-weight: bold; margin: 4px 0; }
</style>
<form action="#">
<div class="grupo">
<p class="pregunta">¿Es su primera visita a la oficina?</p>
<input type="radio" name="primera" id="primera-si" value="si">
<label for="primera-si">Sí</label>
<input type="radio" name="primera" id="primera-no" value="no">
<label for="primera-no">No</label>
</div>
<div class="grupo">
<p class="pregunta">¿Desea recibir un recordatorio por SMS?</p>
<input type="radio" name="sms" id="sms-si" value="si">
<label for="sms-si">Sí</label>
<input type="radio" name="sms" id="sms-no" value="no">
<label for="sms-no">No</label>
</div>
<button type="submit">Confirmar cita</button>
</form>

La demostración contiene, a propósito, el error de accesibilidad que se explica.
Así sí: fieldset y legend en cada pregunta
Se cambia cada div por fieldset y cada pregunta por legend, primer hijo del grupo. El aspecto se mantiene con CSS y los lectores de pantalla anuncian la pregunta al entrar en el grupo, de modo que «Sí» y «No» ya tienen contexto.
<style>
.grupo { border: 1px solid #767676; padding: 4px 12px 8px; margin: 0 0 12px; }
.pregunta { font-weight: bold; margin: 4px 0; padding: 0 4px; }
</style>
<form action="#">
<fieldset class="grupo">
<legend class="pregunta">¿Es su primera visita a la oficina?</legend>
<input type="radio" name="primera" id="primera-si" value="si">
<label for="primera-si">Sí</label>
<input type="radio" name="primera" id="primera-no" value="no">
<label for="primera-no">No</label>
</fieldset>
<fieldset class="grupo">
<legend class="pregunta">¿Desea recibir un recordatorio por SMS?</legend>
<input type="radio" name="sms" id="sms-si" value="si">
<label for="sms-si">Sí</label>
<input type="radio" name="sms" id="sms-no" value="no">
<label for="sms-no">No</label>
</fieldset>
<button type="submit">Confirmar cita</button>
</form>
Pruébelo aquí:
Cómo comprobarlo
Errores frecuentes en auditorías
- Preguntas tipo «Sí / No» o escalas de valoración maquetadas con div y p, sin fieldset ni legend.
- fieldset con la pregunta en un h3 o p dentro y sin legend, de modo que el grupo no tiene nombre.
- Quitar el fieldset para eliminar el borde del navegador en lugar de restilarlo con CSS.
- Anidar fieldset innecesariamente (un fieldset que envuelve todo el formulario y otro por cada campo), lo que alarga los anuncios.
Técnica completa: traducción al español del texto del W3C
Aplicabilidad
HTML
Descripción
El objetivo de esta técnica es proporcionar una agrupación semántica a los controles de formulario relacionados. Esto permite a los usuarios comprender la relación entre los controles e interactuar con el formulario con más rapidez y eficacia.
Los controles de formulario pueden agruparse encerrándolos dentro del elemento fieldset. Todos los controles dentro de un fieldset dado quedan así relacionados. El primer elemento dentro del fieldset debe ser un elemento legend, que proporciona una etiqueta o descripción para el grupo. Los autores deben evitar anidar elementos fieldset innecesariamente, ya que puede generar confusión.
Agrupar los controles es especialmente importante en el caso de los botones de opción y las casillas de verificación relacionados. Un conjunto de botones de opción o de casillas de verificación está relacionado cuando todos envían valores para un mismo campo con nombre. Funcionan de la misma manera que las listas de selección, permitiendo al usuario elegir entre un conjunto de opciones, con la diferencia de que las listas de selección son un único control, mientras que los botones de opción y las casillas de verificación son varios controles. La etiqueta individual asociada a cada botón de opción o casilla de verificación puede no transmitir por completo el contexto descriptivo del grupo. En esta situación es esencial agruparlos semánticamente para facilitar que se traten como un único control, así como para proporcionar una descripción adicional a nivel de grupo. A menudo, los agentes de usuario presentan el valor del legend antes de la etiqueta de cada control para ofrecer esta descripción y, además, para recordar a los usuarios que forman parte del mismo grupo.
También puede ser útil agrupar otros conjuntos de controles menos estrechamente relacionados que los botones de opción y las casillas de verificación. Por ejemplo, varios campos que recogen la dirección de un usuario podrían agruparse con un legend «Dirección», proporcionando así una descripción a nivel de grupo para esos controles. Como regla general, puede decirse que cuando un grupo de controles dentro de un formulario más amplio necesita un encabezado adicional que ofrezca una descripción específica de ese grupo concreto, el uso de los elementos fieldset y legend es apropiado.
Sin embargo, cuando un grupo de botones de opción o casillas de verificación relacionados (incluso con valores para un mismo campo con nombre) incluye instrucciones claras y opciones bien diferenciadas (es decir, cuando la etiqueta individual asociada a cada control concreto proporciona una descripción suficiente), no es necesario usar los elementos fieldset y legend. En este caso, H44 es suficiente.
A veces los autores evitan utilizar el elemento fieldset por su presentación predeterminada en el navegador, que dibuja un borde alrededor de los controles agrupados. Esta agrupación visual también es útil, y los autores deberían considerar seriamente conservarla (o alguna forma de agrupación visual). El efecto visual puede modificarse con CSS sobrescribiendo la propiedad border del fieldset y la propiedad position del legend.
Ejemplos
Un examen tipo test
Este ejemplo muestra una pregunta de examen con una cuestión y cinco respuestas posibles. Cada respuesta se representa con un botón de opción (input type="radio"). Los botones de opción están contenidos dentro de un fieldset. La pregunta del examen se marca con el elemento legend. Cada campo tiene el mismo atributo name, lo que indica que estos botones de opción están relacionados y deben agruparse como se muestra. Observe también que, aunque los atributos name tienen el mismo valor, los valores de los atributos id deben ser únicos.
<fieldset>
<legend>The play <cite>Hamlet</cite> was written by:</legend>
<div>
<input checked="checked" id="shakesp" name="hamlet" type="radio" value="a">
<label for="shakesp">William Shakespeare</label>
</div>
<div>
<input id="austen" name="hamlet" type="radio" value="b">
<label for="austen">Jane Austen</label>
</div>
<div>
<input id="gbshaw" name="hamlet" type="radio" value="c">
<label for="gbshaw">George Bernard Shaw</label>
</div>
<div>
<input id="woolf" name="hamlet" type="radio" value="d">
<label for="woolf">Virginia Woolf</label>
</div>
<div>
<input id="dickens" name="hamlet" type="radio" value="e">
<label for="dickens">Charles Dickens</label>
</div>
</fieldset>
Un conjunto de casillas de verificación
La página de perfil de usuario de un sitio web permite a los usuarios indicar sus intereses marcando varias casillas de verificación. Cada casilla de verificación (input type="checkbox") tiene un label. Las casillas de verificación están contenidas dentro de un fieldset, y el elemento legend contiene la indicación para todo el grupo de casillas.
<fieldset>
<legend>I am interested in the following (check all that apply):</legend>
<div>
<input id="photo" name="interests" type="checkbox" value="ph">
<label for="photo">Photography</label>
</div>
<div>
<input checked="checked" id="watercol" name="interests" type="checkbox" value="wa">
<label for="watercol">Watercolor</label>
</div>
<div>
<input checked="checked" id="acrylic" name="interests" type="checkbox" value="ac">
<label for="acrylic">Acrylic</label>
</div>
</fieldset>
Controles relacionados lógicamente
En este ejemplo, los campos de formulario de la dirección de residencia y de la dirección postal se distinguen por el valor del legend de cada agrupación fieldset.
<form action="/adduser" method="post">
<fieldset>
<legend>Your Residential Address</legend>
<div>
<label for="raddress">Address:</label>
<input autocomplete="street-address" id="raddress" name="raddress" type="text">
</div>
<div>
<label for="rzip">Postal/Zip Code:</label>
<input autocomplete="postal-code" id="rzip" name="rzip" type="text">
</div>
</fieldset>
<fieldset>
<legend>Your Postal Address</legend>
<div>
<label for="paddress">Address:</label>
<input autocomplete="street-address" id="paddress" name="paddress" type="text">
</div>
<div>
<label for="pzip">Postal/Zip Code:</label>
<input autocomplete="postal-code" id="pzip" name="pzip" type="text">
</div>
</fieldset>
</form>
Pruebas
Procedimiento
Para los grupos de controles relacionados en los que las etiquetas individuales de cada control no proporcionan una descripción suficiente y se necesita una descripción adicional a nivel de grupo:
- Comprobar que el grupo de elementos
inputoselectrelacionados lógicamente está contenido dentro de elementosfieldset. - Comprobar que cada
fieldsettiene un elementolegendque es el primer hijo delfieldsete incluye una descripción de ese grupo.
Resultados esperados
- Todas las comprobaciones son verdaderas.
Recursos
Cómo lo comprobamos en ADDAW
En las auditorías de accesibilidad de ADDAW revisamos cada criterio de conformidad siguiendo este catálogo de técnicas: comprobamos si la web aplica una técnica suficiente y documentamos cada fallo común con capturas y el código afectado, para que el equipo de desarrollo sepa exactamente qué corregir. Los informes siguen la metodología del Observatorio de Accesibilidad y la norma UNE-EN 301 549.
Fuente y licencia
Traducción al español, no oficial, realizada por ADDAW a partir de la técnica H71 del documento «Techniques for WCAG 2.2» del W3C (versión del repositorio público del W3C a 22/10/2026). Copyright © W3C® (MIT, ERCIM, Keio, Beihang). Se publica conforme a la licencia de documentos del W3C. El texto normativo de referencia es el original en inglés; si detecta un error en la traducción, escríbanos.