The Case for Thoughtful Scrollbar Design
Scrollbars are one of the most frequently used interface elements on the web, yet they're often overlooked in design discussions. When users navigate your site, they rely on scrollbars to explore content, understand page length, and control their browsing experience.
Styling scrollbars isn't just about aesthetics--it's about creating a cohesive experience that respects user expectations while maintaining accessibility standards. This guide explores how to customize scrollbar appearance effectively while keeping all users in mind. For developers implementing custom scrollbars as part of a broader web development strategy, understanding these CSS properties is essential for building polished, professional interfaces.
What You'll Learn
- Modern CSS properties for scrollbar styling
- WebKit-specific pseudo-elements for broader browser support
- Accessibility requirements and WCAG compliance
- Best practices for user-centered scrollbar design
- Common use cases with ready-to-use code examples
CSS Scrollbar Properties
The CSS Scrollbars Styling Module Level 1 introduces two key properties that provide standardized control over scrollbar appearance. These properties are supported in Firefox and have gained support across modern browsers, offering a cross-browser solution for scrollbar customization.
scrollbar-width
The scrollbar-width property allows you to control the thickness of the scrollbar. It accepts three values that determine how prominent the scrollbar will be in your interface.
| Value | Description |
|---|---|
auto | Browser default width |
thin | Thinner scrollbar variant where available |
none | Hides the scrollbar entirely |
Use scrollbar-width: thin only in space-constrained layouts where minimizing visual clutter takes priority. Avoid scrollbar-width: none as it prevents mouse users from scrolling--users lose the ability to grab and drag the scrollbar handle, which many rely on for precise navigation. According to the CSS Scrollbars Styling Module Level 1 specification, controlling scrollbar width should be approached cautiously to maintain usability. For a detailed breakdown of scrollbar-width usage, see our guide on scrollbar-width.
scrollbar-color
The scrollbar-color property controls the colors of the scrollbar's track and thumb. It takes two color values, providing flexibility to match your brand while maintaining visual hierarchy.
.custom-scrollbars {
scrollbar-color: #4a90d9 #f0f0f0;
/* thumb-color track-color */
}
Choose scrollbar colors that maintain sufficient contrast between the thumb and track--at least 3:1 ratio per WCAG guidelines--while complementing your overall design system. Consider using CSS custom properties to maintain consistency across your site and make theme adjustments straightforward.
1/* Simple scrollbar styling with standard properties */2.scrollable-element {3 scrollbar-width: thin;4 scrollbar-color: #666666 #f0f0f0;5}6 7/* Firefox-specific optimizations */8@-moz-document url-prefix() {9 .scrollable-element {10 /* Additional Firefox-specific scrollbar styles */11 }12}WebKit-Specific Scrollbar Styling
While standard CSS properties provide cross-browser solutions, WebKit-based browsers (Chrome, Safari, Edge) offer additional pseudo-elements for more granular control over scrollbar appearance. These prefixed pseudo-elements allow detailed customization of each scrollbar component.
Available WebKit Pseudo-Elements
| Pseudo-Element | Description |
|---|---|
::-webkit-scrollbar | The entire scrollbar container |
::-webkit-scrollbar-track | The track (background area) |
::-webkit-scrollbar-thumb | The draggable handle |
::-webkit-scrollbar-button | Arrow buttons at scrollbar ends |
::-webkit-scrollbar-corner | Corner where scrollbars meet |
::-webkit-scrollbar-track-piece | Track area not covered by thumb |
/* Comprehensive WebKit scrollbar styling */
.custom-scrollbars::-webkit-scrollbar {
width: 12px;
height: 12px;
}
.custom-scrollbars::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 6px;
}
.custom-scrollbars::-webkit-scrollbar-thumb {
background: #888;
border-radius: 6px;
border: 2px solid #f1f1f1;
}
.custom-scrollbars::-webkit-scrollbar-thumb:hover {
background: #555;
}
.custom-scrollbars::-webkit-scrollbar-button {
background: #f1f1f1;
height: 12px;
}
.custom-scrollbars::-webkit-scrollbar-corner {
background: #f1f1f1;
}
.custom-scrollbars::-webkit-scrollbar-track-piece {
background: #f1f1f1;
}
1/* WebKit scrollbar customization */2.custom-scrollbars::-webkit-scrollbar {3 width: 12px;4 height: 12px;5}6 7.custom-scrollbars::-webkit-scrollbar-track {8 background: #f1f1f1;9 border-radius: 6px;10}11 12.custom-scrollbars::-webkit-scrollbar-thumb {13 background: #888;14 border-radius: 6px;15 border: 2px solid #f1f1f1;16}17 18.custom-scrollbars::-webkit-scrollbar-thumb:hover {19 background: #555;20}21 22.custom-scrollbars::-webkit-scrollbar-button {23 background: #f1f1f1;24 height: 12px;25}Accessibility Requirements
When you modify scrollbar appearance, you assume responsibility for accessibility compliance. Native browser scrollbars are generally exempt from WCAG requirements, but custom scrollbars must meet accessibility standards.
Contrast Requirements
WCAG 2.1 Success Criterion 1.4.11 Non-text Contrast requires a minimum 3:1 contrast ratio between adjacent colors. For scrollbars, this means:
- Thumb to track: minimum 3:1 contrast ratio
- Track to page background: minimum 3:1 contrast ratio
- Enhanced accessibility: Consider 4.5:1 for better usability
Target Size Guidelines
WCAG 2.5.5 Target Size recommends a minimum 44x44 CSS pixel touch target. For scrollbars:
- Set minimum scrollbar width using scalable units
- Use
emunits so scrollbars scale with user zoom - Consider
calc(44px + .25em)as a starting point - WCAG 2.2 2.5.8 requires 24x24 pixels minimum
User Preferences
Respect user preferences and system settings:
- Don't override user's reduced motion preferences
- Support high contrast and inverted color modes
- Consider offering a toggle for custom scrollbars
- Support
prefers-color-schememedia query
For comprehensive accessibility guidance in your UI/UX design projects, understanding how scrollbar styling interacts with overall accessibility compliance is essential for creating inclusive digital experiences.
Maintain Contrast
Ensure 3:1 minimum contrast between thumb, track, and page background
Scale with Zoom
Use em units so scrollbars scale when users zoom the page
Support All Browsers
Combine standard properties with WebKit pseudo-elements for maximum compatibility
Respect Preferences
Support prefers-color-scheme and other user preference media queries
Common Use Cases
Minimalist Thin Scrollbars
For content areas where space is at a premium, thin scrollbars provide a subtle indicator without dominating the interface.
/* Clean, minimal scrollbar for content areas */
.content-scroll {
scrollbar-width: thin;
scrollbar-color: #666 transparent;
}
/* WebKit fallback */
.content-scroll::-webkit-scrollbar {
width: 6px;
}
.content-scroll::-webkit-scrollbar-track {
background: transparent;
}
.content-scroll::-webkit-scrollbar-thumb {
background-color: #666;
border-radius: 3px;
}
Branded Custom Scrollbars
Match scrollbar colors to your brand identity while maintaining usability using CSS custom properties.
/* Brand-colored scrollbar matching site theme */
.branded-scrollbars {
scrollbar-color: var(--brand-primary) var(--brand-light);
}
/* Complete WebKit styling */
.branded-scrollbars::-webkit-scrollbar {
width: 14px;
height: 14px;
}
.branded-scrollbars::-webkit-scrollbar-track {
background: var(--brand-light);
border-radius: 7px;
}
.branded-scrollbars::-webkit-scrollbar-thumb {
background: var(--brand-primary);
border-radius: 7px;
border: 3px solid var(--brand-light);
}
Dark Mode Scrollbars
Provide appropriate scrollbar colors for dark themes using media queries.
@media (prefers-color-scheme: dark) {
.theme-aware-scrollbars {
scrollbar-color: #555 #1a1a1a;
}
.theme-aware-scrollbars::-webkit-scrollbar-track {
background: #1a1a1a;
}
.theme-aware-scrollbars::-webkit-scrollbar-thumb {
background: #555;
}
}
1/* Maximum compatibility scrollbar styling */2.compatible-scrollbars {3 /* Standard properties for Firefox */4 scrollbar-width: thin;5 scrollbar-color: #666 #f0f0f0;6}7 8/* WebKit fallbacks for Chrome, Safari, Edge */9@supports selector(::-webkit-scrollbar) {10 .compatible-scrollbars::-webkit-scrollbar {11 width: 8px;12 height: 8px;13 }14 15 .compatible-scrollbars::-webkit-scrollbar-track {16 background: #f0f0f0;17 }18 19 .compatible-scrollbars::-webkit-scrollbar-thumb {20 background-color: #666;21 border-radius: 4px;22 }23}Scrollbar Gutter Property
The scrollbar-gutter property provides control over when and how the scrollbar gutter (reserved space for scrollbars) is displayed. This prevents content from jumping when scrollbars appear or disappear, ensuring a stable layout experience.
| Value | Description |
|---|---|
auto | Default behavior |
stable | Always reserve space for scrollbar |
stable both-edges | Reserve space on both sides |
/* Always reserve space for scrollbar */
.stable-layout {
overflow: auto;
scrollbar-gutter: stable;
}
Using scrollbar-gutter: stable is particularly valuable for layouts where content alignment is critical, such as dashboards, data tables, and side-by-side content panels. It ensures that when scrollbars appear, the content doesn't shift horizontally, maintaining visual consistency throughout the user experience. For more on scrollbar-gutter and related CSS properties, see our guide on scrollbar-gutter.
Implementation Checklist
Use this checklist when implementing custom scrollbars:
- Test scrollbar styling with keyboard navigation
- Verify contrast ratios meet WCAG 3:1 minimum
- Ensure touch targets meet minimum size requirements
- Support prefers-color-scheme for dark mode
- Provide graceful degradation for non-supporting browsers
- Test with actual content, not just empty containers
- Consider offering a user preference toggle
- Document any custom scrollbar behavior
Browser Compatibility Matrix
| Feature | Firefox | Chrome/Edge | Safari |
|---|---|---|---|
| scrollbar-width | Full | 121+ | Partial |
| scrollbar-color | Full | 121+ | Partial |
| WebKit pseudo-elements | No | Full | Full |
For maximum compatibility, combine standard CSS properties with WebKit pseudo-elements in your scrollbar styles. This approach ensures a consistent experience across Firefox, Chrome, Safari, and Edge browsers.
Frequently Asked Questions
Sources
- MDN Web Docs - CSS scrollbars styling - Core CSS scrollbar properties documentation
- CSS Scrollbars Styling Module Level 1 W3C Spec - Official W3C specification
- Chrome for Developers - Scrollbar styling - Chrome implementation details
- Adrian Roselli - Baseline Rules for Scrollbar Usability - Accessibility and usability guidelines
- DigitalOcean - How to Customize Scrollbars with CSS - Comprehensive tutorial