Product Craft Bible
Progressive Disclosure
Inicio Componentes UI Progressive Disclosure
Componentes UI

Progressive Disclosure

8 reglas Larry Tesler "Progressive disclosure" 1984 · NNg progressive disclosure 2023 · Cooper "About Face" disclosure patterns · Apple HIG disclosure design · IBM Carbon design disclosureNNg truncation UX 2022 · CSS line-clamp specification · Stripe Dashboard description truncation · Linear issue body truncation · Notion page previewNNg "Show More" pattern 2022 · Baymard UX show more 2023 · GitHub comment collapse · Linear label overflow · Stripe activity feedNNg IA depth vs breadth 2022 · Miller's Law cognitive load · Material Design 3 navigation depth · Apple HIG hierarchy · Cooper "About Face" IA guidelines
13

Progressive Disclosure

8 reglas
138

Estrategia de información, no componente; jerárquica ≠ staged

Progressive disclosure es una estrategia de arquitectura de información, no un componente de UI. Los tres tipos tienen patrones de implementación completamente distintos: Jerárquica (el usuario navega de una lista hacia el detalle de un ítem, como un inbox), Staged (la información se revela en secuencia dependiente, como un wizard que muestra el selector de Estado solo cuando el País fue elegido), y Contextual (información adicional aparece en respuesta directa a una acción puntual del usuario, como un tooltip o popover en hover). Confundir los tipos produce implementaciones incorrectas: usar un staged wizard para datos que deberían ser jerárquicos crea fricción innecesaria y confunde al usuario sobre la relación entre los datos.

Larry Tesler "Progressive disclosure" 1984 · NNg progressive disclosure 2023 · Cooper "About Face" disclosure patterns · Apple HIG disclosure design · IBM Carbon design disclosure
Preferir
Crear cuenta de empresa
Paso 2 de 4
Ubicación fiscal
País
México
Estado
Seleccionar estado
Ciudad se habilita al elegir Estado
Evitar
Crear cuenta de empresa
Completa todos los campos para continuar
Nombre
Carlos Méndez
Email
carlos@acme.com
País
México
Estado
Seleccionar
RFC
Requerido
Este campo es obligatorio
Reg. patronal
Solo si aplica
Método de pago
Seleccionar
Facturación
Seleccionar
10 campos visibles a la vez, sin contexto de progreso ni dependencias
139

Truncar al final de oración completa; word-count > line-clamp

La propiedad CSS -webkit-line-clamp trunca el texto exactamente en el número de líneas indicado, sin ninguna consideración del significado: el corte puede ocurrir en medio de una palabra, entre sujeto y predicado, o incluso en la sílaba de un verbo. El usuario ve "El producto incluye acceso a todas las funciones incluyendo soporte prioritario, backup autom..." y no sabe si la parte omitida es relevante para su decisión. Truncar por conteo de palabras garantiza que el corte ocurra en un límite de oración natural: el pensamiento queda completo, y el enlace "Ver más" solo promete contenido adicional, no la continuación de una idea incompleta. Si se usa line-clamp por restricciones técnicas, la solución es calcular cuántas oraciones completas caben en el espacio antes de aplicar el corte.

NNg truncation UX 2022 · CSS line-clamp specification · Stripe Dashboard description truncation · Linear issue body truncation · Notion page preview
Preferir
Plan Pro
$299/mes
El plan incluye acceso a todas las funciones premium de la plataforma, incluyendo soporte prioritario 24/7, backup automático cada hora, integración con Slack y acceso a la API avanzada sin lím...
Ver más
Plan Pro
$299/mes
El plan incluye acceso a todas las funciones premium de la plataforma, incluyendo soporte prioritario 24/7 y backup automático cada hora.
Ver más
140

"Ver más" solo si oculta ≥2 items; con 1 item oculto mostrar todo

Un botón "Ver más" que revela un único ítem adicional genera fricción cognitiva desproporcionada al beneficio: el usuario hace click esperando ver contenido sustancial y encuentra apenas un elemento. Cuando el threshold de ocultado es de 0 o 1 ítem, la decisión correcta siempre es mostrar todo el contenido sin truncar. El número mínimo que justifica el affordance de "Ver más" depende del contexto (listas de comentarios: 3+, tags: 2+, filas de tabla: 5+), pero el principio universal es que el esfuerzo cognitivo del click debe ser proporcional al volumen de contenido revelado. Además, el botón debe siempre indicar el número exacto de ítems ocultos para que el usuario pueda decidir si vale el clic.

NNg "Show More" pattern 2022 · Baymard UX show more 2023 · GitHub comment collapse · Linear label overflow · Stripe activity feed
Preferir
Solo 1 oculto (mal)
Etiquetas del issue
bug frontend urgent
Ver 1 más clic inútil

El tag "review" está oculto pero podrías mostrarlo directamente sin ningún sacrificio visual.
Mostrar todo (correcto)
Etiquetas del issue
bug frontend urgent review

4 tags visibles, ningún clic necesario. Si fueran 10, "Ver 6 más" sí estaría justificado.
141

Máx 3 niveles de disclosure; 4+ → reestructurar

Cada nivel de anidamiento en un árbol de disclosure agrega carga cognitiva: el usuario debe mantener en memoria dónde está en la jerarquía, cómo llegó hasta ahí, y cómo volver. Con 3 niveles es posible la navegación Categoría → Subcategoría → Ítem, que cubre la amplia mayoría de casos de uso reales. A partir del cuarto nivel, la desorientación es casi universal: los estudios de eye-tracking muestran que los usuarios pierden el rastro de la ruta. La solución cuando el modelo de información requiere 4+ niveles no es añadir más acordeones, sino reestructurar: aplanar la jerarquía, mover el 4to nivel a filtros laterales, usar breadcrumbs con navegación dedicada, o paginar el árbol.

NNg IA depth vs breadth 2022 · Miller's Law cognitive load · Material Design 3 navigation depth · Apple HIG hierarchy · Cooper "About Face" IA guidelines
Preferir
3 niveles (correcto)
Productos N1
Electrónicos N2
Audífonos Pro N3 ✓
Cámaras 4K N3 ✓
Categoría → Subcategoría → Ítem. El usuario siempre sabe dónde está.
4+ niveles (reestructurar)
Productos N1
Electrónicos N2
Audio N3
Inalámbricos N4 ✗
Mover "Inalámbrico" a filtro lateral. El árbol no debe crecer en profundidad.
142

Animar con opacity+transform; nunca height; interpolate-size para auto

Animar height de 0 a auto no es posible en CSS estándar porque el navegador no puede interpolar un valor calculado con un valor de keyword. La alternativa clásica es usar opacity y transform: translateY: el panel aparece desde arriba mientras se vuelve opaco, sin que el layout cambie en absoluto. Chrome 129 introdujo interpolate-size: allow-keywords que habilita la transición real de height: auto, pero como progressive enhancement detrás de @supports. Nunca animar height con un valor fijo en píxeles: el contenido dinámico (texto que crece, imágenes cargadas) invalidará la animación. El contenedor del demo debe tener altura declarada para evitar layout shift durante la animación.

Chrome 129 interpolate-size announcement · MDN CSS interpolate-size · Bramus Van Damme blog 2024 · CSS Tricks height auto animation · Kevin Powell CSS animations guide
Preferir
opacity + grid-rows (suave)
/* grid-rows: 0fr→1fr (universal) */
.panel {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows .28s;
}
.panel.open { grid-template-rows: 1fr }
max-height fija (salto visual)
Procesador: Apple M4 · RAM: 16 GB unificada · Almacenamiento: SSD 512 GB · Pantalla: Liquid Retina 14" 120 Hz · Batería: hasta 18 horas de uso continuo.
/* max-height fija, evitar */
.panel {
  max-height: 0;
  transition: max-height .4s steps(1);
}
.panel.open { max-height: 200px }
143

aria-expanded en button; aria-controls obligatorio para JAWS

El patrón de disclosure accesible requiere dos atributos cooperantes en el elemento trigger: aria-expanded comunica al screen reader si el panel está expandido o colapsado en tiempo real, y aria-controls (apuntando al id del panel) permite que JAWS navegue directamente del trigger al contenido que controla. Sin aria-controls, JAWS lee el botón y anuncia el estado pero no puede vincular el anuncio al panel correspondiente, haciendo que el usuario pierda contexto. El panel controlado debe tener un id que coincida exactamente con el valor de aria-controls. El trigger debe ser siempre un elemento <button> nativo, nunca un <div> con role="button", para garantizar el comportamiento de teclado nativo.

ARIA APG Disclosure pattern · JAWS aria-controls support matrix 2023 · NVDA disclosure pattern testing · W3C WAI disclosure button example · Deque a11y disclosure audit
Preferir
disclosure.html
<!-- Trigger: siempre <button> nativo -->
<button
  aria-expanded="false"     ← estado actual
  aria-controls="spec-panel" ← vínculo al panel
>
  Ver especificaciones
</button>

<!-- Panel: id debe coincidir con aria-controls -->
<div id="spec-panel" hidden>
  ...contenido revelado...
</div>

// JS: actualizar aria-expanded al toggle
btn.addEventListener('click', () => {
  const open = btn.getAttribute('aria-expanded') === 'true'
  btn.setAttribute('aria-expanded', !open)
  panel.toggleAttribute('hidden', open)
})
aria-expanded Actualiza con cada toggle. NVDA y JAWS anuncian "expandido" / "colapsado" al usuario de AT.
aria-controls Permite a JAWS navegar directamente al panel sin que el usuario tenga que tabular hasta él.
144

Foco permanece en button al expandir inline; moverlo solo en modals

Cuando el contenido se expande inline (el panel aparece en el flujo de la misma pagina, debajo del trigger), el foco debe permanecer en el boton trigger despues del click. Mover el foco automaticamente al primer elemento del panel revelado sorprende al usuario de teclado: esperaba activar el toggle y en cambio se encuentra de golpe dentro del contenido. El foco en el trigger permite al usuario leer primero, y luego presionar Tab para navegar hacia el contenido revelado. La unica excepcion son modals y drawers: como reemplazan completamente el contexto visual del usuario y capturan el flujo de teclado, el foco debe moverse al primer elemento interactuable dentro del overlay inmediatamente al abrirse.

ARIA APG focus management · W3C disclosure button pattern · Radix UI focus management · NVDA focus testing 2023 · WebAIM keyboard focus guidelines
Preferir
Preguntas frecuentes
Encuentra respuestas a las dudas mas comunes
Como cancelo mi suscripcion?
Cual es la politica de reembolsos? Foco aqui (correcto)
Puedes solicitar un reembolso dentro de los primeros 30 dias. Visita Mi cuenta y selecciona "Solicitar reembolso". El proceso tarda 5-7 dias habiles.
Puedo cambiar de plan?
Como contacto a soporte?
Al expandir inline, el foco permanece en el trigger. El usuario presiona Tab cuando quiera explorar el contenido revelado.
Evitar
Preguntas frecuentes
Encuentra respuestas a las dudas mas comunes
Como cancelo mi suscripcion?
Cual es la politica de reembolsos?
Foco aqui (incorrecto) Puedes solicitar un reembolso dentro de los primeros 30 dias. Visita Mi cuenta y selecciona "Solicitar reembolso". El proceso tarda 5-7 dias habiles.
Puedo cambiar de plan?
Como contacto a soporte?
Al expandir inline, el foco salta al contenido del panel. El usuario de teclado pierde su posicion en la pagina.
145

Antipatrón: ocultar info necesaria para la decisión en disclosure

El test de si algo debe estar en un disclosure es simple: "¿Puede el usuario tomar la decisión principal sin expandir este contenido?" Si la respuesta es no, la información debe ser visible por defecto. Ocultar el precio total con impuestos, la política de cancelación, o las limitaciones del plan dentro de un accordion colapsado es un patrón oscuro: penaliza al usuario que toma decisiones informadas, perjudica la confianza, viola principios de transparencia GDPR/FTC, y aumenta las tasas de disputa post-compra. Los accordions son adecuados para especificaciones técnicas adicionales, preguntas frecuentes de soporte, o historial de eventos. Son inapropiados para cualquier información que cambie la naturaleza de la decisión que el usuario está a punto de tomar.

Baymard checkout disclosure antipatterns · NNg progressive disclosure 2023 · Nielsen "10 Usability Heuristics" · GDPR transparency requirements · FTC disclosure guidelines
Preferir
Info crítica oculta (mal)
Plan Empresarial
Para equipos de 10+
$499 /mes
Precio con IVA Ver detalles ↓
Ver términos, precio final y política de cancelación
Contratar ahora
Precio con IVA, cancelación y limitaciones de plan están ocultos. El usuario no puede decidir.
Solo specs opcionales ocultas
Plan Empresarial
Para equipos de 10+
$579 /mes con IVA
Cancelación Cualquier momento
Proyectos Hasta 50
Especificaciones técnicas adicionales
Contratar ahora
Precio, política y límites de plan visibles. Solo specs avanzadas dentro del accordion.