Skip to main content

Playbooks

The Enterprise Reflow Playbook

By Flora May dela Cruz

Take a dense enterprise app from 1440 to 375 in one pass — without horizontal scroll, without a separate mobile codebase, and without the breadcrumb eating the page.

responsive-designlayoutnavigationcss

Purpose

Most enterprise UIs are designed at 1440 and tested at 1440. They run on field laptops, on shared kiosks, on the auditor’s iPad, on the analyst’s phone during a Slack reply. Reflow isn’t a separate feature — it’s the part of design that decides whether the product is usable for half its actual sessions.

This playbook is the small set of moves that take a desktop-dense enterprise UI to mobile in one pass: the breakpoints that matter, the layout primitives that survive, the navigation that has to transform, and the breadcrumb trick that’s almost always missing.

When to use it

  • A dense enterprise app being adapted to mobile or tablet for the first time
  • A surface where the desktop layout already exists and you can’t start over
  • A prototype that needs to demo on a phone in a stakeholder review
  • Any product targeting WCAG 2.1 SC 1.4.10 (Reflow at 320 CSS pixels)
  • Apps with sidebars, breadcrumbs, dense data grids, or large hero titles — all of which break in characteristic ways at narrow widths

This is not a full responsive design system. It’s the minimum set of moves to get from “horizontal scrollbar on a phone” to “usable on a phone.”

Core framework

Five layout shifts and one breadcrumb trick. In order of how much pain they remove.

1. Kill horizontal page scroll at the shell

The single most common reflow bug: somewhere deep in a flex row, a fixed-width element pushes the layout wider than the viewport, and the entire page gains a horizontal scrollbar. Don’t hunt for it. Set overflow-x: hidden on the outer shell wrappers and on the main content container. This is one of the few places where a blanket clipping rule is the right answer — page-level horizontal scroll is almost never intentional.

2. Pick one breakpoint, not five

For enterprise apps the worst pattern is a different layout at 1200, 1024, 900, 768, and 480. You end up with five intermediate states, four of which nobody tests. Pick one structural breakpoint — usually around 900px — and treat it as the line between “desktop layout” and “mobile layout.” Within each side, use fluid sizing rather than more breakpoints. The 900px line is wide enough that tablets in portrait pick up the mobile layout (which is what you want — a sidebar collapsed at 768 is more usable than a sidebar squeezed).

3. Side nav becomes an overlay, not a thinner side nav

Below the breakpoint the side nav display: nones. In its place, a hamburger in the page content area opens an overlay panel that sits on top of the content (position: absolute, z-index: high, top: 0, left: 0, height: 100%). Reuse the same nav-item component inside the overlay so the user’s mental model doesn’t shift.

The reason this beats “make the side nav thinner”: a 48-px-wide icon rail still costs you real estate the page needs, and the icons-only state is less learnable than a hamburger-and-overlay. Pick one of the two states (full or hidden), not three.

4. Page header actions wrap, never clip

The title row almost always has a primary CTA and 2–4 secondary actions. At narrow widths they get cropped. The fix is two lines:

display: flex
flex-wrap: wrap
gap: 8px

On the row containing the title and the action group. The actions drop to a second row instead of clipping off the edge. The title stays where the eye expects it.

5. Card grids: auto-fill, then a 1fr fallback

grid-template-columns: repeat(auto-fill, minmax(260px, 1fr))

…handles 1440 down to about 600. Below 600, override to a single column:

@media (max-width: 600px) { grid-template-columns: 1fr; }

The two-rule version is more predictable than trying to make auto-fill resolve to one column on its own (which it sometimes does and sometimes doesn’t, depending on padding and gap math). Be explicit.

6. Large hero titles use clamp(), not breakpoints

Desktop hero titles at 40px collide with mobile hero titles that need to be 24px. Don’t define a font size at each breakpoint. Use one rule:

font-size: clamp(24px, 4.5vw, 40px)

24 is the floor (readable on phones), 40 is the ceiling (impressive on desktops), 4.5vw is the linear interpolation between them. One rule, no breakpoint, scales monotonically.

7. The breadcrumb trick

This is the part most teams skip and most users notice. On a narrow viewport, a breadcrumb of “Root › Category › Sub-category” becomes either truncated (ugly), wrapped to multiple lines (steals vertical space), or horizontally scrolling (genuinely bad). The right solution is overflow at the beginning, not at the end, with a ... menu that contains the collapsed ancestors.

Three rules underneath that:

  • The current page name is never in the breadcrumb. It’s the <h1> of the page. Duplicating it wastes the most valuable line of UI on the screen.
  • Priorities matter. Root collapses first; the most-recent ancestor collapses last. The breadcrumb’s job at narrow widths is “where am I in the hierarchy relative to my current branch” — the immediate parent is more valuable than the global root.
  • The ... always lives at the start. Putting it at the end (which is what naive overflow components do) hides the most useful information first.

The resulting behavior, in two columns:

ViewportWhat the user sees
WideRoot › Parent › (then the page h1 below)
Narrow... › Parent › (... is a menu containing “Root”)
Very narrow... (menu contains “Root” and “Parent”)

The chevron between items should also conditionally render — only show the divider when the item before it is still visible — otherwise you get orphan characters next to the ....

Reusable template

Drop this into the design doc for any page being reflowed.

# Reflow plan — <page name>

## Breakpoint
- Structural breakpoint: <px>
- Below: <describe layout>
- Above: <describe layout>

## Shell
- [ ] overflow-x: hidden on outermost wrapper
- [ ] overflow-x: hidden on main content container

## Nav
- [ ] Side nav display: none below breakpoint
- [ ] Hamburger in page content area below breakpoint
- [ ] Nav overlay component (position: absolute, z-index, full height)
- [ ] Overlay reuses the same nav-item component

## Page header
- [ ] Title row uses flex-wrap: wrap
- [ ] gap: 8px between title and actions
- [ ] Hero title font-size uses clamp(min, vw, max)

## Card grid
- [ ] grid-template-columns: repeat(auto-fill, minmax(<n>px, 1fr))
- [ ] @media (max-width: 600px) { grid-template-columns: 1fr }

## Breadcrumb
- [ ] Current page name NOT in breadcrumb (it's the h1)
- [ ] ... menu at the START, not the end
- [ ] Root has lowest priority (collapses first)
- [ ] Immediate parent has highest priority (collapses last)
- [ ] Dividers conditionally render based on visibility

## Tables
- [ ] Data tables allowed to horizontally scroll within their container
  (WCAG exception for tables; scrolling the table is fine, scrolling the
  page is not)

## Test viewports
- [ ] 1440 (laptop wide)
- [ ] 1024 (laptop narrow / tablet landscape)
- [ ] 768 (tablet portrait — should pick up mobile layout)
- [ ] 375 (phone)
- [ ] 320 (WCAG minimum)

The test-viewports list is the actual deliverable. Reflow is something you prove by looking, not by inference.

AI-assisted workflow

Prompt: surface reflow risk in an existing layout

Below is a description (or screenshot) of an enterprise page at desktop
width. Identify everything that will break or clip at a 375px viewport.
For each item, name:

1. What breaks (element + symptom)
2. Whether the fix is layout (flex/grid), structural (overlay swap),
   or sizing (clamp / responsive units)
3. The minimal change that resolves it

Do not invent generic responsive advice — point at specific elements
in the layout.

<paste description or attach screenshot>

Prompt: name the breakpoint

Given the following layout regions (sidebar, header with title + N
actions, card grid with min card width X, optional breadcrumb of depth
D), recommend a single structural breakpoint below which the sidebar
becomes a hamburger overlay. Justify with one sentence each:

- Why this breakpoint and not 100px lower
- Why this breakpoint and not 100px higher
- Which tablets / common viewports land on which side

<paste the layout>

The point of both prompts is to narrow decisions, not to scatter more advice into the document.

Collaboration considerations

  • For engineers: the overflow-x: hidden on shell wrappers feels like a hack but it’s the right call for product surfaces. Reserve “find the actual offender” debugging for cases where the clipping is hiding intended scroll.
  • For PMs: reflow is often dropped from scope under deadline pressure because it looks cosmetic. It’s not — WCAG 2.1 SC 1.4.10 makes it a compliance requirement at 320 CSS pixels, which is the spec target enterprise customers procure against.
  • For research / user testing: test on a real phone, not in a desktop browser’s responsive mode. Touch targets, thumb-zone reachability, and overlay-vs-content depth perception change on a real device.
  • For QA: automate visual regression at the four target viewports. One screenshot per viewport per route is enough to catch 80% of reflow bugs before they ship.
  • For design systems teams: the breadcrumb pattern in this playbook is the single most-reusable component. Centralize it once; every product team gets it for free.

Common failure patterns

  1. Five breakpoints, four of them broken. Pick one structural breakpoint. Use fluid sizing within each side.
  2. overflow-x: hidden missing. A single fixed-width element somewhere produces a page-wide horizontal scrollbar.
  3. Side nav gets thinner instead of disappearing. Icon-only side rails are the worst of both worlds — they cost width and lose learnability.
  4. Header actions clip. No flex-wrap. Fix is two CSS properties.
  5. Hero title sized per breakpoint. Use clamp() once.
  6. Breadcrumb shows the current page. It’s already the h1.
  7. ... overflow at the end of the breadcrumb. Hides the most useful ancestor first.
  8. Orphan dividers. The next to ... because the divider isn’t conditionally rendered.
  9. Page scrolls horizontally because the data table does. Tables get to scroll within their container. The page doesn’t.
  10. Testing only in browser devtools. A real phone exposes touch-target bugs that devtools hide.

Generalized example

A fictional factory floor analytics console. Desktop layout: 240px side nav, 1200px+ content area with a hero title, three primary action buttons, a card grid of machine status, a breadcrumb three deep (“Plants › North › Press Shop”).

Reflow plan applied:

  • Breakpoint: 900px
  • Below 900: side nav hidden, hamburger in content area opens an overlay panel reusing the same nav items
  • Page header: flex-wrap: wrap, gap 8px — actions drop below title when needed
  • Hero title: font-size: clamp(24px, 4.5vw, 40px)
  • Card grid: repeat(auto-fill, minmax(260px, 1fr)), with grid-template-columns: 1fr below 600px
  • Breadcrumb: current page (“Press Shop”) removed (it’s the h1); ... always at the start; “Plants” priority 1, “North” priority 3; conditional dividers
  • Data tables inside cards: allowed to scroll horizontally inside their container; the page does not

The dashboard then renders without horizontal page scroll from 1440 down to 320, the nav transforms cleanly, the breadcrumb still tells the user where they are without eating the title row, and the card grid collapses to a single column without any code branching by viewport width.


Public-safe review (verified before publish)

  • No employer or client product names, codenames, or org names
  • No customer names, segment sizes, or identifiable details
  • No internal metrics, thresholds, OKRs, or telemetry numbers
  • No roadmap, ship dates, or future plans
  • No architecture, service names, API shapes, or schema fields from real systems
  • No screenshots showing real chrome, real data, or recognizable surfaces
  • No internal-only workflows, tools, or terminology
  • Every example is fictional or abstracted; numbers are illustrative
  • A peer outside any employer could read this and learn nothing proprietary

Take this playbook with you

Drop your email to copy the markdown or download the file. One email unlocks every playbook in the Toybox.

No spam. Occasional notes on new playbooks. Unsubscribe in one click.