Product Craft Bible
Conditional Visibility
Inicio Formularios e Inputs Conditional Visibility
Formularios e Inputs

Conditional Visibility

8 reglas GOV.UK Design System · Radios "Conditionally revealing a related question" · GOV.UK Accessibility Blog (2021)GOV.UK Design System · Radios · Coolfields Consulting "Accessible Forms, Selects or Dropdowns"WCAG 2.1 SC 4.1.2 Name, Role, Value · GOV.UK Design System · Radios · GOV.UK Accessibility Blog (2021)GOV.UK Design System · Radios · WAI-ARIA Authoring Practices Guide · MDN focus management
49

Conditional Visibility

8 reglas
451

Revela el campo junto al control que lo dispara, no al final del form

Cuando un radio o checkbox revela campos adicionales, esos campos deben aparecer directamente debajo de la opción que los activa, no al final del formulario ni en un panel lateral. El patrón GOV.UK "conditional reveal" posiciona cada bloque revelado como hijo visual inmediato de su disparador (dentro de .govuk-radios__conditional), preservando la relación semántica y espacial entre la pregunta original y la derivada. Esa proximidad reduce la carga cognitiva: el usuario nunca pierde el contexto de por que apareció ese campo.

GOV.UK Design System · Radios "Conditionally revealing a related question" · GOV.UK Accessibility Blog (2021)
Preferir
Tienes empresa?
Si
Nombre de empresa
No
Evitar
Tienes empresa?
Si
No
Nombre de empresa
Revelado al final, lejos del disparador
452

Usa radios o checkboxes como disparadores, nunca selects

Los <select> ocultan sus opciones hasta desplegarse, lo que impide rastrear cual opción activo un campo revelado. Los radios mantienen todas las opciones visibles y dejan ver el disparador sin abrir ningun control adicional. Además, los selects personalizados son notoriamente difíciles de hacer accesibles: su semántica nativa varia entre plataformas y su comportamiento en móvil difiere del de desktop. GOV.UK usa exclusivamente radios y checkboxes (nunca selects) para su patrón de conditional reveal.

GOV.UK Design System · Radios · Coolfields Consulting "Accessible Forms, Selects or Dropdowns"
Preferir
Tipo de envio
Nacional
Internacional
Recoger en tienda
El disparador es visible en todo momento
Evitar
Tipo de envio
Internacional
Opciones ocultas: no se ve que disparo el reveal
453

Anuncia el cambio con aria-expanded y aria-controls

Los lectores de pantalla no perciben cambios visuales de visibilidad sin señales programaticas. El control disparador debe llevar aria-expanded="true/false" y aria-controls apuntando al id del bloque revelado, para que el lector anuncie "expandido" o "contraido" al cambiar de estado. GOV.UK documenta que sin estos atributos su patrón "fails WCAG 2.2 success criterion 4.1.2 Name, role, value", porque el usuario podría completar el form sin haber llenado el campo revelado que nunca le fue anunciado.

WCAG 2.1 SC 4.1.2 Name, Role, Value · GOV.UK Design System · Radios · GOV.UK Accessibility Blog (2021)
Preferir
Estado comunicado
<input type="radio"
  aria-expanded="true"
  aria-controls="company-block">

<div id="company-block">
  <input name="company">
</div>
Evitar
Solo CSS, sin ARIA
<input type="radio">
  /* sin aria-expanded */
  /* sin aria-controls */

<div style="display:none">
  <input name="company">
</div>
454

No robes el foco al revelar inline; dejalo en el disparador

En un reveal inline (misma página, no un nuevo paso), mover el foco programaticamente al primer campo revelado interrumpe el flujo natural del teclado: el usuario salta abruptamente hacia abajo en el DOM y pierde el contexto de donde estaba. El comportamiento correcto es que el foco permanezca en el radio/checkbox y el usuario navegue al campo revelado con Tab. Robar el foco con focus() es especialmente confuso para usuarios de lectores de pantalla que exploran el contexto circundante con flechas; ese método se reserva para resultados de acciones explicitas (dialogos, errores).

GOV.UK Design System · Radios · WAI-ARIA Authoring Practices Guide · MDN focus management
Preferir
1
Selecciona "Si" con Space foco aquí
2
Presiona Tab control del usuario
3
Llega al campo revelado
Evitar
1
Selecciona "Si"
2
focus() salta al input foco robado
3
Usuario desorientado pierde contexto
455

Reveal inline solo un campo simple; lo complejo va a un nuevo paso

Revelar multiples campos o un sub-formulario completo desde un radio aumenta la carga cognitiva y confunde a los usuarios de lectores de pantalla, que no perciben visualmente la estructura emergente. GOV.UK define como umbral máximo "a single input field" para el reveal inline: "If the related question is complicated or has more than one part, show it on the next page in the process instead." Cuando la pregunta derivada tiene varias partes, es más claro y accesible dirigir al usuario a una pantalla dedicada con esa pregunta en contexto propio.

GOV.UK Design System · Radios "Keep it simple" · GOV.UK Accessibility Blog (2021) · Fuzzy Logic, Conditionally revealed questions
Preferir
Tienes RUC?, Si
Número de RUC
Un solo campo simple
Evitar
Quieres factura?, Si
RFC Razón Social Regimen Fiscal Uso CFDI
4 campos: debe ir a un paso dedicado
456

No escondas campos requeridos criticos detras de una condición fragil

Si un campo es obligatorio para completar la tarea (el email de notificación, el RFC para factura), ocultarlo detras de un reveal aumenta el riesgo de que el usuario intente enviar sin haberlo llenado. El error de validación que aparece sobre un campo invisible, o que el usuario no supo que existia, viola el espiritu de WCAG 3.3.1 Error Identification: el item en error debe identificarse y describirse en texto. Los campos verdaderamente criticos deben estar visibles por defecto o en pasos dedicados con indicación clara de que son necesarios.

WCAG 2.1 SC 3.3.1 Error Identification · Drupal Form API, Conditional Form Fields · Venture Harbour form design best practices
Preferir
Quiero recibir confirmación por email Opcional
Email de confirmación (opcional)
Campo opcional detras de pregunta opcional
Evitar
Recibir notificaciones por email? Opcional?
El email es tu único canal de confirmación, pero esta oculto detras de una pregunta que parece opcional.
Campo critico escondido tras condición ignorable
457

Preserva los valores al colapsar y reabrir un campo revelado

Cuando un usuario llena un campo revelado, cambia de opción (colapsando ese campo) y luego regresa a la opción original, el valor debe restaurarse automáticamente. Borrarlo al colapsar obliga a reingresarlo, lo que es especialmente penoso en campos de texto largo. La lógica correcta es ocultar el campo del DOM pero conservar su valor en estado (JavaScript o atributo hidden), y eliminarlo solo al enviar si la condición no esta activa. La validación de campos relacionados también depende de esto.

DEV Community "5 UX Patterns That Reduce Form Abandonment" · Aaron Gustafson, Web component for conditionally displaying fields
Preferir
Escribe
ACME Corp
Colapsa
guardado
Reabre
ACME Corp
El valor se restaura sin reescribir
Evitar
Escribe
ACME Corp
Colapsa
borrado
Reabre
vacio
El usuario debe reescribir todo
458

El reveal no debe causar auto-submit ni salto de contexto (WCAG 3.2.2)

WCAG 3.2.2 On Input prohibe que cambiar el valor de un control cause automáticamente un cambio de contexto: navegar a otra página, enviar el form o abrir una ventana sin aviso previo. Revelar campos en la misma página al seleccionar un radio NO viola este criterio, siempre que el layout general permanezca estable y el usuario no sea redirigido. W3C cita como ejemplo valido un form que muestra campos distintos según el tipo de evento. Lo que si lo viola es un <select> que recarga la página o un fetch que reemplaza secciones mayores del form.

WCAG 2.0 SC 3.2.2 On Input · W3C Understanding 3.2.2 · Equally.ai developer guide 3.2.2
Preferir
app.com/evento
Tipo: Reunion
Tipo: Recordatorio
Participantes aparecen en la misma página, sin recarga.
Misma URL, estructura estable
Evitar
app.com/buscar?pais=mx&reload
Pais: Mexico
Al cambiar el select, el form se auto-submite y navega a una nueva URL.
Cambio de contexto sin aviso: falla 3.2.2