Product Craft Bible
Density / Compact Mode
Inicio Datos y Tablas Density / Compact Mode
Datos y Tablas

Density / Compact Mode

8 reglas AWS Cloudscape · Content Density · SAP Fiori · Cozy/CompactIBM Carbon Design System · Data Table row heights · Material Design · Applying DensityWCAG 1.4.12 Text Spacing (AA) · AWS Cloudscape · Content Density · Material Design · Applying DensityWCAG 2.5.8 Target Size Minimum (AA) · SAP Fiori · Cozy 44 / Compact 32 · IBM Carbon · Compact 24
81

Density / Compact Mode

8 reglas
696

Cómodo por defecto; el modo compacto es opt-in para power-users de datos

El modo compacto reduce ruido y aumenta la información visible por pantalla, un beneficio real solo para power-users que escanean filas en tablas, dashboards y paneles de recursos. En apps de consumo (correo, feeds, onboarding) la densidad reducida perjudica la legibilidad y abruma al usuario casual. La densidad predeterminada debe ser siempre la más cómoda; el modo compacto es una opción que el usuario activa deliberadamente, no el punto de partida. AWS Cloudscape lo afirma sin matices: el modo cómodo se fija como default en todas las aplicaciones porque el compacto puede dificultar la lectura y prolongar el consumo de contenido.

AWS Cloudscape · Content Density · SAP Fiori · Cozy/Compact
Preferir
El toggle alterna entre densidades: observa cómo solo se comprime el padding vertical de cada fila (de 13px a 3px), revelando más filas por pantalla sin tocar el tamaño de texto.
Recursos activos
api-gateway-produs-east-1Online
cache-redis-02eu-west-1Online
worker-pool-batchus-east-1Idle
db-replica-analyticseu-west-1Online
queue-consumer-04us-east-1Idle
Cómodo arranca por defecto; el power-user activa compacto cuando lo necesita
Evitar
Bienvenido · elige tus equipos
Marketing12 miembrosUnirse
Ingeniería34 miembrosUnirse
Diseño8 miembrosUnirse
Ventas21 miembrosUnirse
Filas de 24px en un flujo casual: abruma y prolonga la lectura del usuario nuevo
697

Define una escala nominal de alturas fijas, no un toggle binario improvisado

Los sistemas de diseño maduros definen una escala nominal con alturas de fila exactas en px: tener niveles nominados facilita la comunicación entre diseño, ingeniería y QA, y permite que distintos componentes de un mismo dashboard coexistan en el nivel correcto. IBM Carbon define Compact 24px · Short 32px · Default 48px · Tall 64px (v11 agrega Medium 40px). Material Design parte de densidad 0 (default) y baja a -1, -2, -3; cada incremento reduce la altura del componente en 4dp mediante la fórmula height = base + (interval × scale). Un checkbox "modo compacto" que cambia un padding arbitrario sin documentar la altura resultante conduce a implementaciones inconsistentes.

IBM Carbon Design System · Data Table row heights · Material Design · Applying Density
Preferir
Compact
Fila
24px
Short
Fila
32px
Medium
Fila
40px
Default
Fila
48px
Tall
Fila
64px
Evitar
Modo compacto
¿Cuántos px mide la fila ahora? Nadie lo sabe. Cada pantalla aplica un padding distinto y QA no puede validar nada reproducible.
698

La densidad reduce padding vertical, nunca el tamaño de fuente ni el line-height

La densidad se logra reduciendo el padding interno de la celda (arriba/abajo) y los márgenes entre componentes, no achicando la fuente ni el line-height. Reducir el tipo arruina la legibilidad; comprimir el interlineado por debajo de 1.5× hace que usuarios con dislexia o baja visión pierdan el hilo de lectura. WCAG 1.4.12 (AA) exige que el contenido no pierda funcionalidad cuando el usuario ajusta line-height hasta 1.5× el tamaño de fuente, letter-spacing a 0.12em y word-spacing a 0.16em: una tabla que ya comprimió el interlineado a 1.0 para "caber más filas" no sobrevive ese ajuste. El texto en compacto debe tener idéntico tamaño y espaciado de línea que en cómodo; solo cae el padding vertical, de 12px a 2px.

WCAG 1.4.12 Text Spacing (AA) · AWS Cloudscape · Content Density · Material Design · Applying Density
Preferir
FacturaMonto
INV-20418 · Acme Corp
INV-20419 · Globex SA
INV-20420 · Initech
INV-20421 · Umbrella
13px / 1.5 · padding vertical 12px → 2px
Fila ~24px, texto idéntico al modo cómodo
Evitar
FacturaMonto
INV-20418 · Acme Corp
INV-20419 · Globex SA
INV-20420 · Initech
INV-20421 · Umbrella
10px / line-height 1.0
Ilegible para baja visión · viola WCAG 1.4.12
699

No comprimas filas por debajo de 24px en touch: compacto es exclusivo de mouse

WCAG 2.5.8 (AA, WCAG 2.2) establece que todo target interactivo debe medir mínimo 24×24 CSS px, o tener 24px de separación edge-to-edge respecto a targets adyacentes. En touch, una fila de tabla de 24px viola el criterio si la acción de fila (selección, expansión) es el único target. SAP Fiori documenta explícitamente que cozy (táctil) usa 2.75rem = 44px y compact (ratón) usa 2rem = 32px; aplicar compact en touch no es solo mal UX, es un error de diseño. El nivel Compact 24px de Carbon nunca debe ser el default en táctil. La solución es detectar la capacidad de puntero: pointer: coarse fuerza cómodo (44px), pointer: fine habilita compacto.

WCAG 2.5.8 Target Size Minimum (AA) · SAP Fiori · Cozy 44 / Compact 32 · IBM Carbon · Compact 24
Preferir
Touch · coarse
Seleccionar fila
Seleccionar fila
44px · target cómodo
Mouse · fine
Seleccionar fila
Seleccionar fila
Seleccionar fila
Seleccionar fila
24px · puntero preciso
Evitar
iPad · coarse
Fila 24px
Fila 24px
Fila 24px
24px en touch · viola WCAG 2.5.8
700

Persiste la preferencia de densidad; nunca la resetees entre sesiones

La elección de densidad es una preferencia de trabajo personal: un analista que prefiere compacto no quiere reactivarlo cada vez que recarga la app. No persistir este estado es como olvidar el zoom favorito del usuario en cada sesión. La preferencia debe guardarse como mínimo en localStorage y, si la app tiene sesión autenticada, sincronizarse con el perfil del usuario en el backend para conservarse entre dispositivos. La inicialización debe ocurrir en el mount antes del primer render para evitar el flash de densidad incorrecta. Los usuarios reportan frustración activa cuando la densidad no persiste: el hilo "Density will not stay in comfortable" de Gmail acumula decenas de respuestas.

Google Support · Gmail density thread · AWS Cloudscape · user-controlled density
Preferir
Usuario elige Compacto
localStorage.density = 'compact' + perfil backend
Al recargar: compacto desde el primer paint
Evitar
Refresh → vuelve a Cómodo
El estado vivía solo en memoria. Cada recarga descarta la elección y el analista reactiva compacto una y otra vez.
701

Aplica la densidad uniformemente a toda la vista; no mezcles niveles en la misma jerarquía

Un dashboard en modo compacto debe tener compactos todos sus componentes relacionados: tabla, encabezado de columnas, toolbar, paginación, filtros y badges de conteo. Mezclar un header cómodo con filas compactas produce inconsistencia visual y confunde la jerarquía de información. SAP Fiori prohíbe explícitamente combinar cozy y compact en la misma página o jerarquía, y recomienda fijar el factor de densidad a nivel de aplicación. IBM Carbon es categórico: la fila del header de columnas siempre debe coincidir con la altura de fila de la tabla. La excepción son componentes que por naturaleza no se densifican (alerts, formularios, paneles de ayuda), no piezas de la misma tabla.

SAP Fiori · nunca combinar cozy/compact en la misma jerarquía · IBM Carbon · header row matches table row
Preferir
PedidosCompacto 32px
PedidoClienteEstado
#4021AcmePagado
#4022GlobexPendiente
#4023InitechPagado
1–3 de 240
Evitar
Pedidostoolbar 48px
PedidoClienteEstadoheader 48px
#4021AcmePagado
#4022GlobexPendiente
1–2 de 240pág. 40px
702

Toggle visible, etiquetado, con estado anunciado y operable por teclado

Un control que el usuario no encuentra no aporta valor: el toggle de densidad va en la toolbar de la tabla o en un panel de configuración accesible, no enterrado en settings globales. Como control interactivo requiere nombre accesible (label visible o aria-label), indicación del estado actual con aria-pressed, y operación con teclado (Enter/Space y flechas en un grupo de botones). WCAG 4.1.2 exige que nombre, rol y estado sean programáticamente determinables: un toggle sin aria-pressed es invisible para tecnologías de asistencia. WCAG 1.4.1 prohíbe comunicar el estado activo solo con color; el seleccionado necesita un indicador visual adicional como un checkmark, no únicamente un fondo distinto.

WCAG 4.1.2 Name, Role, Value (A) · WCAG 1.4.1 Use of Color (A) · WAI-ARIA · aria-pressed toggle pattern
Preferir
aria-pressed="true" en el activo
Estado por checkmark, no solo color
Operable con Enter
Evitar
Icono de ajuste sin nombre accesible. Abre un menú sin aria-pressed donde la densidad activa se marca solo con fondo distinto.
703

@media (pointer: coarse) fuerza cómodo; reserva compacto para desktop con puntero fino

La densidad y el dispositivo de entrada están íntimamente ligados: compacto tiene sentido con ratón (puntero preciso, hover disponible, sin riesgo de tap erróneo); en touch el margen de error táctil promedio supera los 10px, haciendo que filas de 24–32px sean propensas a errores de selección. Implementa detección de capacidad de puntero con CSS @media (pointer: coarse) o JS matchMedia para fuerza cómodo en táctil (min 44px, alineado con WCAG 2.5.5 AAA), deshabilitar o limitar el toggle de densidad en touch, y restaurar el toggle completo en desktop con pointer: fine. El piso absoluto de WCAG 2.5.8 (24px) no es el objetivo de diseño en touch, solo el mínimo legal.

CSS Media Queries · pointer coarse/fine · WCAG 2.5.5 Target Size Enhanced (AAA) · WCAG 2.5.8 Target Size Minimum (AA) · SAP Fiori · cozy en touch
Preferir
@media (pointer: coarse)
Fila cómoda 44px
Fila cómoda 44px
Toggle de densidad deshabilitado en táctil
@media (pointer: fine)
Fila compacta 24px
Fila compacta 24px
Fila compacta 24px
Fila compacta 24px
CompactoDefaultCómodo