Use a table when aligned attributes help people compare records. Add a grid interaction model only when cell navigation or editing is part of the task. Sorting and a few row actions alone do not turn a table into a spreadsheet.
Does the task need comparison across columns or movement between editable cells?
A reviewer compares vendor payments by status, due date, and amount. Atlas Office is pending at $1,240, Blue Harbor is approved at $860, and Civic Print is pending at $2,140. The reviewer needs the largest pending payment and a clear action for that vendor.
Follow the review task rather than choosing a spreadsheet by appearance
Task step
Table behavior
Check the result
Compare payments
Keep each vendor in a row and each shared attribute in its column.
The caption and headers explain what each value represents.
Sort by amount
Reorder the full matching set, then display the current page.
The active sort and the visible row order agree.
Filter to pending
Recompute the matching set and the page count.
The filter, row count, and displayed payments describe the same set.
Open Civic Print
Use a row action labelled for that vendor.
The opened record matches the action's accessible name.
Why this choice
Aligned columns make the comparison explicit. A card layout may work better when imagery and uneven descriptions drive recognition. An editable budget worksheet is a different task and may justify a data grid with managed keyboard focus.
Where the decision changes
Choose a narrow-screen strategy for the actual task. A scrollable comparison table and a stacked record list preserve different scanning relationships. Keep labels available and test access to every column; wrapping values alone is not a responsive strategy.
Try these checks
In the lab, sort Amount and inspect the announced sort state.
Filter to Pending, move a page, and check that counts and order remain synchronized.
Follow a named row action and verify its record context.
Test headers, sort controls, and horizontal scrolling with keyboard and assistive technology.
What the sources support
APG treats tables as tabular structures rather than composite keyboard widgets. W3C APG: Table ↗
APG describes the additional focus-management responsibilities of interactive grids. W3C APG: Grid ↗
These source claims were checked on . The scenario and decision analysis are illustrative; the checks are a test plan, not reported results from a user study.
Decision first
Choose this pattern when the problem matches
Use when
Records share comparable attributes that users need to scan in aligned columns.
Users need to reconcile, audit, triage, sort, filter, or compare records.
Column headers and row identity can remain stable across responsive layouts.
Avoid when
The task depends on rich previews, imagery, or uneven metadata.
Users need spreadsheet-like editing or cell-by-cell keyboard navigation.
Problem it prevents
The items share a stable set of attributes such as name, status, owner, due date, amount, count, or last updated time.
Test the behavior
Try strong and weak versions of the interaction
Open the working example, try its controls, and compare the behavior against the decision guidance.
In the lab you can
switch between strong UI, weak UI, strong UX, and weak UX;
trigger required, empty, loading, error, and recovery states;
inspect keyboard and accessibility expectations beside the demo.
The items share a stable set of attributes such as name, status, owner, due date, amount, count, or last updated time.
Pattern promise
Present records in a semantic table with a caption, clear column and optional row headers, aligned values, declared sort and filter state, responsive header preservation, and a boundary between read-only comparison, row actions, and richer data-grid tasks.
Required state
Default table state with caption, visible headers, row values, and result count or context.
Failure to inspect
Mobile stacking removes headers and turns rows into unlabeled paragraphs.
Access contract
Use native table semantics for tabular data rather than div-only rows.
Quality bar
The difference between expert and weak execution
Strong implementation
Specific, visible, recoverable
A payment review table has the caption June vendor payments, headers Vendor, Status, Due date, Amount, and Action, right-aligned amounts, and row actions labelled by vendor.
A narrow layout stacks each payment row while repeating labels such as Status and Amount before values.
A user sorts by Amount descending, filters to Pending, moves to page 2, and the table keeps its caption, active sort, active filter, row count, and selected payment context.
A keyboard user activates the Due date header, hears the changed order, and focus remains on the header rather than jumping into the first row.
Weak implementation
Vague, hidden, hard to recover from
Mobile stacking removes headers and turns rows into unlabeled paragraphs.
Row actions run against the wrong record because labels only say Edit or Delete.
Pagination, sorting, or refresh loses selected rows, expanded rows, focus, or scroll position.
The interface calls itself a table even though users need editable grid behavior.
UI guidance
Render a table with a specific caption or heading, visible column headers, optional row headers, aligned values, consistent row actions, and enough spacing for scanability.
Show sort, filter, pagination, selection, and responsive states without breaking the visible relationship between each header and cell.
UX guidance
Use tables when aligned columns help users compare records, find exceptions, audit values, or triage work faster than opening each item.
Preserve row meaning, focus, selection, sort, filter, pagination, and header labels as users update or inspect the table.
Implementation contract
What the implementation must handle
States
Default table state with caption, visible headers, row values, and result count or context.
Sorted table state with current sorted column and direction exposed visually and programmatically.
Filtered table state with active criteria near the table and updated row count.
Selected-row state when the table supports row selection or bulk action.
Interaction
Column headers identify the values below them and remain associated with cells in desktop, stacked, and horizontally scrolled layouts.
Row headers identify each record when the first column is the record name or primary identifier.
Sortable headers update row order, active indicator, accessible sort state, and result summary together.
Filtering updates row membership while preserving current sort unless the design explicitly resets it.
Accessibility
Use native table semantics for tabular data rather than div-only rows.
Add a caption or programmatically associated label that identifies the dataset.
Use th for headers and td for data cells.
Use scope for straightforward row or column headers and id or headers for complex grouped headers.
Review
What does one row represent, and what does each column mean?
Is there a caption or heading that names the dataset and table purpose?
How are headers preserved in responsive, sorted, filtered, and paginated states?
Are row actions, selections, and expanded content tied to the correct record?