Design Principle
Horizontal scroll must be an explicit content format: users can see the next item, operate it with keyboard and touch, reflow on narrow screens, and read core text without hunting on the horizontal axis.
Large Theory
Horizontal scrolling changes the user's default reading axis. It can turn portfolios, galleries, photography, project cards, and timeline sequences into cinematic comparison, but it can also break continuous reading, documentation browsing, form completion, and admin work. Horizontal scroll is therefore not a visual style; it is a content-structure decision that works only when the content is naturally a set of short panels, images, cases, or stages.
Small Points
- Use it for bounded sets: project cards, photo groups, project-detail thumbnails, brand case chapters, and timeline panels, not long articles or knowledge-base prose.
- Provide visible affordance: a partial next card, progress indicator, arrow buttons, drag hint, or scroll shadow. Users should not have to guess that horizontal movement exists.
- Keyboard and focus must work: arrow buttons, Tab order, focus-visible states, and automatic scrolling when focus enters an offscreen item.
- On touch devices, prefer native scrolling and scroll snap. Avoid global wheel hijacking or long page pinning that makes the page feel broken.
- Reading text should stay one-dimensional: each panel's prose can be read at around 320 CSS px width, and core explanation should not be split across multiple horizontal panels.
- Small screens can reflow into a vertical stack, short carousel, or card list. Horizontal scroll is a wide-screen enhancement, not the only entrance.
Design Judgment
Horizontal scroll is usable when people can discover the region, browse all projects, read the current panel, skip it, or continue downward without precision trackpad gestures. It is the wrong container when users must test left and right just to finish a sentence or find a CTA.
Implementation Notes
Use a local container for horizontal scroll: overflow-x: auto, scroll-snap-type: x proximity or mandatory for short card groups, scroll-padding-inline, stable card widths, and a visible next item. Provide real buttons that call scrollBy, add aria-label to the container, and sync button disabled states with scrollLeft. Disable smooth scroll under prefers-reduced-motion; at mobile breakpoints reflow to vertical flow or a touch carousel, and verify scrollLeft, Tab order, focus visibility, 320 CSS px reflow, and bottom-of-page reachability with Playwright.
Counterexamples/Risks
Turning an entire article into horizontal reading, hiding scrollbars without buttons, supporting only mouse-wheel-to-horizontal behavior, placing the CTA at the final panel without progress, forcing card body text to scroll horizontally, causing page-level horizontal overflow on mobile, and using overly strict scroll snap so users cannot rest where they need.
Case Study
Awwwards' Scrolling page separates vertical and horizontal scrolling: vertical scrolling is the common reading mode in browsers, while horizontal scrolling works better for portfolios and gallery sites and less well for text-driven sites. Nine To Five received Awwwards Site of the Day on 2026-04-08; its page lists Homepage Scroll and Project Detail and places the site in the Horizontal Layout Websites collection. Inkfish received Site of the Day on 2024-05-23; its Awwwards elements include Horizontal Scroll, Video Player, Work Hover, and Page Transition. The reusable lesson is that horizontal scroll should bind to project browsing, work previews, video/image rhythm, and short panels instead of converting all reading into a sideways document.
Source Links
Awwwards Scrolling: https://www.awwwards.com/websites/scrolling/ Awwwards Nine To Five: https://www.awwwards.com/sites/nine-to-five Awwwards Inkfish: https://www.awwwards.com/sites/inkfish W3C WCAG Reflow: https://www.w3.org/WAI/WCAG21/Understanding/reflow.html MDN CSS Scroll Snap: https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Scroll_snap
Agent Directive
Before designing horizontal scroll, explain why the content is a bounded horizontal set and output affordance, keyboard/touch paths, reflow fallback, reduced-motion behavior, and Playwright checks; do not turn prose reading into a fully horizontal document.