Tables

A table block is a record set laid out in rows and columns so it can be scanned before any of it is read: a sortable header, one leading cell per row that the record is known by, and a single action column at the end. Hovering washes the whole row rather than the cell under the pointer, because the row is what the reader is aiming at, and selection is a checkbox with the count said out loud above the header.

The thing that decides whether a table holds up is the empty cell. A blank and an em dash are two different facts (nobody has filled this in, against this was recorded as none) and a table that draws them identically loses the distinction without telling anyone. Column width is the other one. It belongs to the kind of content in the column, not to the header text, so a status column is the same width in every table you build and a row of them lines up down the page.

Contact directory

Best for

A record per company or person: a logo, who to talk to, and where the relationship stands

Anatomy

Tabs, search and Sort By · sortable header on a 4% tint · logo, person, file and status cells · one action column

5 rows

LinearIssue tracking
Noah Raednoah@orvain.dev
Co-founderAug 2022 – 2024
Master terms1.8 MB
Active
NotionDocs and wiki
Amelia Lawsonamelia@orvain.dev
Head of DesignJan 2021 – 2024
Service order820 KB
Active
SlackTeam messaging
Tom Reyestom@orvain.dev
EngineeringMar 2023 – 2025
Renewal412 KB
Pending
AsanaProject planning
Mia Chenmia@orvain.dev
OperationsSep 2020 – 2024
NDA96 KB
Inactive
AirbnbTravel booking
Ravi Patelravi@orvain.dev
PartnershipsFeb 2024 – 2026
Co-brand kit2.4 MB
Active

Project tracker

Best for

Work in flight: who is on it, when it is due and how far along it is

Anatomy

Description at passive weight · avatar group collapsed past four · progress bar carrying its own figure · row menu

5 rows

Description
Team members
Spotify redesignProduct
Mobile app UX enhancements and rebranding project.
+9
29 Sep 2023
80%
Docs migrationInternal
Moving four years of handbooks onto one searchable tree.
+3
14 Oct 2023
45%
Support inboxCustomer
One queue for email, chat and the in-product reports.
+5
2 Nov 2023
20%
Quarterly planningOperations
Roadmap, staffing and the budget that has to carry both.
+2
19 Dec 2023
96%
Billing rebuildFinance
Invoices, dunning and a ledger anyone can reconcile.
+7
8 Jan 2024
62%

File manager

Best for

Documents with an owner and a switch: sharing that takes effect the moment it is flipped

Anatomy

File-type mark per row · uploader with their avatar · dates at passive weight · toggle column · delete and share

6 rows

Q3 financial report1.8 MB
Amelia LawsonFinance
12 Mar 2024
18 Mar 2024
Brand guidelines820 KB
Noah RaedDesign
4 Mar 2024
11 Mar 2024
Launch artwork24.1 MB
Mia ChenDesign
27 Feb 2024
2 Mar 2024
Release notes12 KB
Tom ReyesEngineering
21 Feb 2024
21 Feb 2024
Product walkthrough412 MB
Ravi PatelMarketing
14 Feb 2024
19 Feb 2024
Press kit88 MB
Ava SilvaComms
2 Feb 2024
9 Feb 2024

Media library

Best for

Assets carrying tags and a score: the row types that cost a column the most

Anatomy

Badge group, three then a +n · read-only rating · publish toggle · delete and share · initials where there is no photo

5 rows

Tags
Welcome voiceover8.2 MB
Maya PriceMarketing
ProductTutorial+4
Trailer soundtrack14.6 MB
Amelia LawsonDesign
LaunchSocial+2
Support hold music3.1 MB
Tom ReyesSupport
Internal
Podcast episode 1262 MB
Ravi PatelComms
EditorialSeries+3
Field recording21 MB
Mia ChenResearch
Raw+1

Compact rows

Best for

A table that gets scanned rather than read: one line per cell, at the 48px density

Anatomy

48px rows · one leading cell · an em dash where a value is recorded as none · blank where nobody has filled it in

6 rows

Description
Team members
Spotify redesign
App UX and rebrand
9 people
29 Sep 2023
Amelia Lawson
Docs migration
Handbooks in one tree
3 people
14 Oct 2023
Noah Raed
Support inbox
One queue for support
5 people
2 Nov 2023
—
Quarterly planning
Roadmap and budget
2 people
19 Dec 2023
Billing rebuild
Invoices and ledger
7 people
8 Jan 2024
Ravi Patel
Design tokens
One palette and scale
4 people
22 Jan 2024
Mia Chen

Holdings table

Best for

Finance and lab tables where each column holds a different kind of value

Anatomy

Sortable header · text cell with a ticker tile · number cell · value cell with a unit price · change pill · sparkline · progress cell · rows turn into cards when narrow

HoldingsFive positions · priced at today's close
$30,903.001.4%
Shares7 days
NWDNorthwind Goods120$10,104.00$84.20 each2.4%32%
CNTContoso Energy260$8,073.00$31.05 each1.1%25%
FBKFabrikam Labs45$6,426.00$142.80 each0.6%20%
LTSLitware Systems300$5,520.00$18.40 each4.9%17%
ADVAdventure Works80$780.00$9.75 each3.2%6%

Cohort retention

Best for

Retention and any triangle of a cohort against time

Anatomy

One row per signup month · one column per month since · the share as the cell's tint · percent or people switch · scale key

Retention by signup monthShare of each cohort still active, by month since signup
CohortMonth 0Month 1Month 2Month 3Month 4Month 5
May1,240 people100%64%52%46%41%38%
June1,385 people100%61%49%44%40%
July1,502 people100%66%55%48%
August1,610 people100%69%57%
September1,734 people100%71%
October1,820 people100%
0%100%
01

Using Tables

Reach for it when

  • Records get compared against each other across the same handful of fields: owner, status, date.
  • Someone needs to sort by a column and act on a row without opening the record first.
  • Rows are selected in bulk and one action is applied to all of them at once.
  • A cell holds one piece of interactive content (a switch, a rating, a menu) that belongs to that record alone.

Reach for something else when

  • Items people recognise by a photograph or an opening line: a card grid or a list gives that content the room a cell never will.
  • One or two attributes per record: a list with a title and a description carries it without paying for a header row at all.
  • Data with parents and children that fold open: a tree view shows the nesting that a flat row of cells flattens away.
02

Where it shows up

01

Customer directories

A record per company or person, with a mark, the contact to talk to and where the relationship currently stands. Status lives in a badge, so a column of them can be taken in without reading a word of it.

02

Project trackers

Work in flight: an owner, a deadline and a progress bar carrying its own figure. The avatar group collapses past a few faces, which keeps the column the same width however large the team grows.

03

File managers

Documents with a type mark, an uploader and a sharing switch that applies the moment it is flipped. Delete and share sit together in one column at the end rather than following each value around.

04

Media libraries

Assets carrying tags and a score. Both are expensive column types: a badge group has to truncate to a count, and a rating is read-only here, since five clickable stars inside a scanning surface invite mis-clicks.

03

Questions

How should a data table behave on a narrow screen?

Avoid sideways scrolling. A table cut off at the edge ends mid-column, and nothing on screen says the rest exists. Drop the columns that are present but not what anyone came for first. Below that, turn each row into a card with the column name printed beside every value, and keep the leading cell looking the same the whole way down so rows stay recognisable.

Where do sorting controls belong in a table?

In the header cell, beside the label, sorting that column and nothing else. Mark the sorted header with aria-sort so assistive technology reports the direction, and make the whole header cell the target rather than a small glyph beside it. Not every column earns one: sorting a free-text description achieves nothing, and a header that looks sortable but is not is worse than a plainly inert one.

All blocks
The Orvain Dispatch

Premium components, free in your inbox.

Join the Orvain Dispatch and get production-ready components, free to keep: React and Vue code plus the Figma frame, yours to ship.

Just components, never spam. You can unsubscribe anytime.