Responsive Tables
Viable table patterns for responsive design
Making tables work on small screens is hard. Tables need a fixed layout. Users often compare values across columns and rows. They also need to scan for information quickly. But phone screens don't have much space.
Responsive tables require trade-offs between readability, comparison, interactivity, and technical feasibility. Different audiences will likely warrant different solutions.
This article will show the six most common responsive table patterns that balance readability, comparison, interactivity, and technical feasibility. It focuses on UX trade-offs and helps you pick the right approach for your data and users.
Core Principles
Permalink to "Core Principles"Before choosing a pattern:
-
Keep tables semantic. Use proper table markup for content that is truly tabular, even if you later transform it. This ensures screen readers work correctly.
-
Progressively enhance. Start from a plain, readable table. Add responsive behaviors via CSS and JavaScript as enhancements, not requirements.
-
Honor the task. Choose patterns based on whether users primarily compare across rows and columns, or read one row at a time in detail.
-
Standardize, don't hack. Solve responsive tables with a small set of documented patterns instead of custom fixes for each product or table.
The Six Patterns
Permalink to "The Six Patterns"1. Fluid Table
Permalink to "1. Fluid Table"A traditional table that shrinks with the viewport using percentage-based columns, with no structural changes at different breakpoints. (Out of the box, Bolt tables follow this structure.)
Best for:
- Very short tables (2–3 narrow columns)
- Users who scan or sort the whole table and are not comparing data
- Content short enough to avoid unreadable text wrapping on phones
Strengths:
- Easiest to implement—purely presentational changes
- Preserves column comparison, sorting, and keyboard navigation
- Works well in dashboards and simple reports
Trade-offs:
- Stops working well with wide or numerous columns
- Can create dense, wrapped text on very narrow screens
- May require horizontal scrolling for some datasets
Implementation: Low effort | Accessibility: Minimal impact
2. Columns → Rows (Exposed)
Permalink to "2. Columns → Rows (Exposed)"On narrow screens, each table row becomes a stacked block. The first column becomes a row header, with remaining columns displayed as label–value pairs underneath.
Best for:
- Users who primarily consume details row-by-row, not by comparing across rows
- Tables under ~50 rows
- Data with meaningful column headers that work as inline labels
Strengths:
- Very readable on phones with generous vertical spacing
- No interaction required—everything stays exposed
- Works well for account views, recent transactions, and other per-row narratives
Trade-offs:
- Makes comparison between rows and columns more difficult
- Long lists become very tall
- Requires clear, concise labels
Implementation: Low–medium effort | Accessibility: Good - if headers are preserved properly
3. Columns → Rows (Collapsed / Accordion)
Permalink to "3. Columns → Rows (Collapsed / Accordion)"Keep 2–3 key columns visible for quick scanning, with additional columns hidden in a per-row disclosure area. Expanding a row reveals the hidden data stacked below.
Best for:
- Users who need to scan many rows quickly but occasionally dig into details
- Tables with more columns than comfortably fit on a mobile device (~4+)
- Scenarios where a small set of primary columns (name, status, amount) suffices for most decisions
Strengths:
- Balances density and readability on small screens
- Preserves basic comparison on visible columns
- Avoids sending users to separate detail pages
Trade-offs:
- Requires custom interaction and careful accessibility (toggle buttons, focus order, ARIA)
- Sorting or filtering based on hidden columns can confuse users
- Needs thoughtful content design for summary versus detailed views
Implementation: Medium effort | Accessibility: Requires focus management and proper disclosure patterns
4. Key Column (Frozen) + Horizontal Scroll
Permalink to "4. Key Column (Frozen) + Horizontal Scroll"Keep the first column fixed (usually the row label) and allow horizontal scrolling or swiping for remaining columns on narrow screens.
Best for:
- Users who must compare values across many columns (pricing matrices, feature grids)
- Data with short, meaningful row identifiers in the first column
- Expert or internal users comfortable with data-heavy tasks
Strengths:
- Preserves true tabular comparison — no data is hidden or moved around
- Keeps the most important label in view at all times
Trade-offs:
- Horizontal scroll can be missed without clear visual signals
- More complex implementation (frozen column behavior, scroll management)
- Can feel heavy or awkward for casual consumer use on phones
- Must provide guidance cues for keyboard and assistive technology users
Implementation: Medium–high effort | Accessibility: Needs scroll affordances and navigation support
5. Rebuild at Breakpoints (Alternate Component)
Permalink to "5. Rebuild at Breakpoints (Alternate Component)"At narrow sizes, render a completely different component—cards, lists, or a simplified summary—instead of adapting the table structure.
Best for:
- Tables that act as indexes into items, not true matrices
- Mobile users with different primary tasks than desktop users
- Situations where you can invest in tailored small-screen and large-screen views
Strengths:
- Lets you design exactly what mobile users need, free from table constraints
- Often improves task completion and comprehension
- Can feel more like a native app or custom experience
Trade-offs:
- Highest design and build effort
- Risk of feature drift between views
- Requires strong documentation to keep both views aligned for analytics, accessibility, and compliance
Implementation: High effort | Accessibility: Good if both modes use semantic structures
6. Design Pattern Change (Interactive Widget)
Permalink to "6. Design Pattern Change (Interactive Widget)"Replace the table with a completely different interactive widget—comparator, calculator, configurator, visualization—when tabular layout is no longer the best mental model.
Best for:
- Users who need answers or recommendations, not rows and columns
- Existing tables used mainly out of habit or to dump data
- Situations where you can invest in a custom experience that simplifies decision-making
Strengths:
- Can dramatically improve clarity and time-to-decision
- Enables mobile-first interactions that feel designed, not retrofitted
- Encourages teams to rethink information architecture
Trade-offs:
- Highest UX and engineering cost
- Harder to reuse across products—often domain-specific
- May still require a backing table for exports or compliance views
Implementation: Very high effort | Accessibility: Must adhere to widget-level semantics and keyboard support
Decision Guide
Permalink to "Decision Guide"Ask these three questions to select the right pattern:
1. Do users primarily compare across many rows or columns?
- Yes → Start with Pattern 1 (Fluid)
- If too many columns → Pattern 4 (Frozen + scroll)
2. Do users primarily read one row at a time?
- Yes → Pattern 2 (Columns → rows, exposed)
- Need scan + on-demand detail → Pattern 3 (Accordion)
3. Are mobile tasks fundamentally different from desktop tasks?
- Yes → Consider Pattern 5 (Alternate component) or Pattern 6 (Widget)
Also consider:
- Dataset width: Few columns versus many drastically changes feasibility
- Importance of comparison: If column comparison is critical, avoid patterns that hide or stack data
- Engineering capacity: Patterns range from CSS-only to full custom components
Summary
Permalink to "Summary"Responsive tables aren't solved with a single pattern—they're solved with a toolkit. By adopting this library of six patterns, product teams can choose the right structural response based on the data, the user's intent, and platform constraints. This framework brings clarity, consistency, and accessibility to one of the most complex UI components in responsive design.