Scroll box
The scroll box component provides a scrollable container for long content that exceeds the available space. Use scroll box to display lists, order summaries, or other lengthy content while maintaining a constrained layout.
Scroll boxes support axis-specific scrolling, max sizes, and overflow modes that clip or reveal scrollbars. For grouped content with headings and landmarks, use section instead.
Scroll box doesn't support scroll snapping or programmatic scroll-to behavior. The scroll indicator styling is determined by the platform and can't be customized.
Supported targets
- purchase.
checkout. actions. render-before - purchase.
checkout. block. render - purchase.
checkout. cart-line-item. render-after - purchase.
checkout. cart-line-list. render-after - purchase.
checkout. contact. render-after - purchase.
checkout. delivery-address. render-after - purchase.
checkout. delivery-address. render-before - purchase.
checkout. footer. render-after - purchase.
checkout. header. render-after - purchase.
checkout. payment-method-list. render-after - purchase.
checkout. payment-method-list. render-before - purchase.
checkout. pickup-location-list. render-after - purchase.
checkout. pickup-location-list. render-before - purchase.
checkout. pickup-location-option-item. render-after - purchase.
checkout. pickup-point-list. render-after - purchase.
checkout. pickup-point-list. render-before - purchase.
checkout. reductions. render-after - purchase.
checkout. reductions. render-before - purchase.
checkout. shipping-option-item. details. render - purchase.
checkout. shipping-option-item. render-after - purchase.
checkout. shipping-option-list. render-after - purchase.
checkout. shipping-option-list. render-before - purchase.
thank-you. announcement. render - purchase.
thank-you. block. render - purchase.
thank-you. cart-line-item. render-after - purchase.
thank-you. cart-line-list. render-after - purchase.
thank-you. customer-information. render-after - purchase.
thank-you. footer. render-after - purchase.
thank-you. header. render-after
Supported targets
- purchase.
checkout. actions. render-before - purchase.
checkout. block. render - purchase.
checkout. cart-line-item. render-after - purchase.
checkout. cart-line-list. render-after - purchase.
checkout. contact. render-after - purchase.
checkout. delivery-address. render-after - purchase.
checkout. delivery-address. render-before - purchase.
checkout. footer. render-after - purchase.
checkout. header. render-after - purchase.
checkout. payment-method-list. render-after - purchase.
checkout. payment-method-list. render-before - purchase.
checkout. pickup-location-list. render-after - purchase.
checkout. pickup-location-list. render-before - purchase.
checkout. pickup-location-option-item. render-after - purchase.
checkout. pickup-point-list. render-after - purchase.
checkout. pickup-point-list. render-before - purchase.
checkout. reductions. render-after - purchase.
checkout. reductions. render-before - purchase.
checkout. shipping-option-item. details. render - purchase.
checkout. shipping-option-item. render-after - purchase.
checkout. shipping-option-list. render-after - purchase.
checkout. shipping-option-list. render-before - purchase.
thank-you. announcement. render - purchase.
thank-you. block. render - purchase.
thank-you. cart-line-item. render-after - purchase.
thank-you. cart-line-list. render-after - purchase.
thank-you. customer-information. render-after - purchase.
thank-you. footer. render-after - purchase.
thank-you. header. render-after
Anchor to PropertiesProperties
Configure the following properties on the scroll box component.
- Anchor to accessibilityLabelaccessibilityLabelaccessibilityLabelstringstring
A label announced by assistive technologies that describes the purpose or contents of the element. Only set this when the element's visible content doesn't provide enough context on its own.
- Anchor to accessibilityRoleaccessibilityRoleaccessibilityRoleAccessibilityRoleAccessibilityRoleDefault: 'generic'Default: 'generic'
The semantic meaning of the component's content. When set, assistive technologies use this role to help users navigate the page.
- Anchor to accessibilityVisibilityaccessibilityVisibilityaccessibilityVisibility'visible' | 'hidden' | 'exclusive''visible' | 'hidden' | 'exclusive'Default: 'visible'Default: 'visible'
Controls how the element is exposed to sighted users and to assistive technologies such as screen readers.
visible: The element is visible to all users (both sighted users and screen readers).hidden: The element is visually visible but hidden from screen readers. Use this for decorative elements that don't provide meaningful information.exclusive: The element is visually hidden but announced by screen readers. Use this for screen-reader-only content like skip links or additional context.
- Anchor to backgroundbackgroundbackground'base' | 'subdued' | 'transparent''base' | 'subdued' | 'transparent'Default: 'transparent'Default: 'transparent'
The background color of the scroll box.
base: The standard background color for general content areas.subdued: A muted background for secondary or supporting content.transparent: No background color (the default).
- Anchor to blockSizeblockSizeblockSizeMaybeResponsive<SizeUnitsOrAuto>MaybeResponsive<SizeUnitsOrAuto>Default: 'auto'Default: 'auto'
The block size of the element (height in horizontal writing modes). Learn more about the block-size property.
: Specific size values in pixels, percentages, or zero for precise control.auto: Automatically sizes based on content and layout constraints.
- Anchor to borderborderborderBorderShorthandBorderShorthandDefault: 'none'Default: 'none'
A shorthand for setting the border width, color, and style in a single property. Individual border properties (
,,) can override values set here.- Anchor to borderColorborderColorborderColor'' | 'base''' | 'base'Default: '' - meaning no overrideDefault: '' - meaning no override
The color of the border using the design system's color scale. Overrides the color value set by
border.- Anchor to borderRadiusborderRadiusborderRadiusMaybeAllValuesShorthandProperty<Extract<ScrollBoxProps$1['borderRadius'], 'none' | 'small-100' | 'small' | 'base' | 'large' | 'large-100' | 'max'>>MaybeAllValuesShorthandProperty<Extract<ScrollBoxProps$1['borderRadius'], 'none' | 'small-100' | 'small' | 'base' | 'large' | 'large-100' | 'max'>>Default: 'none'Default: 'none'
The roundedness of the scroll box's corners.
none: Sharp corners with no rounding.small-100/small: Subtle rounding for compact elements.base: Standard rounding for most use cases.large/large-100: More pronounced rounding for prominent containers.max: Maximum rounding, creating a pill or circular shape.
Supports 1-to-4-value shorthand syntax for specifying different radii per corner.
- Anchor to borderStyleborderStyleborderStyleMaybeAllValuesShorthandProperty<BorderStyleKeyword> | ""MaybeAllValuesShorthandProperty<BorderStyleKeyword> | ""Default: '' - meaning no overrideDefault: '' - meaning no override
Controls the visual style of the border on all sides, such as solid, dashed, or dotted.
When set, this overrides the style value specified in the
borderproperty.Supports 1-to-4-value syntax for specifying different styles per side:
- One value: applies to all sides
- Two values: applies to block sides (top/bottom) and inline sides (left/right) respectively
- Three values: applies to block-start (top), inline sides (left/right), and block-end (bottom) respectively
- Four values: applies to block-start (top), inline-end (right), block-end (bottom), and inline-start (left) respectively
- Anchor to borderWidthborderWidthborderWidthMaybeAllValuesShorthandProperty<ReducedBorderSizeKeyword> | ''MaybeAllValuesShorthandProperty<ReducedBorderSizeKeyword> | ''Default: '' - meaning no overrideDefault: '' - meaning no override
The thickness of the border on all sides. Supports 1-to-4-value shorthand syntax for specifying different widths per side. Overrides the width value set by
border.- Anchor to displaydisplaydisplayMaybeResponsive<"auto" | "none">MaybeResponsive<"auto" | "none">Default: 'auto'Default: 'auto'
Sets the outer display type of the component. The outer type sets a component’s participation in flow layout.
auto: The component’s initial value. The actual value depends on the component and context.none: Hides the component from display and removes it from the accessibility tree, making it invisible to screen readers.
Learn more about the display property.
- Anchor to idididstringstring
A unique identifier for the element. Use this to reference the element in JavaScript, link labels to form controls, or target specific elements for styling or scripting.
- Anchor to inlineSizeinlineSizeinlineSizeMaybeResponsive<SizeUnitsOrAuto>MaybeResponsive<SizeUnitsOrAuto>Default: 'auto'Default: 'auto'
The inline size of the element (width in horizontal writing modes). Learn more about the inline-size property.
: Specific size values in pixels, percentages, or zero for precise control.auto: Automatically sizes based on content and layout constraints.
- Anchor to maxBlockSizemaxBlockSizemaxBlockSizeMaybeResponsive<SizeUnitsOrNone>MaybeResponsive<SizeUnitsOrNone>Default: 'none'Default: 'none'
The maximum block size of the element (maximum height in horizontal writing modes). Learn more about the max-block-size property.
- Anchor to maxInlineSizemaxInlineSizemaxInlineSizeMaybeResponsive<SizeUnitsOrNone>MaybeResponsive<SizeUnitsOrNone>Default: 'none'Default: 'none'
The maximum inline size of the element (maximum width in horizontal writing modes). Learn more about the max-inline-size property.
- Anchor to minBlockSizeminBlockSizeminBlockSizeMaybeResponsive<SizeUnits>MaybeResponsive<SizeUnits>Default: '0'Default: '0'
The minimum block size of the element (minimum height in horizontal writing modes). Learn more about the min-block-size property.
- Anchor to minInlineSizeminInlineSizeminInlineSizeMaybeResponsive<SizeUnits>MaybeResponsive<SizeUnits>Default: '0'Default: '0'
The minimum inline size of the element (minimum width in horizontal writing modes). Learn more about the min-inline-size property.
- Anchor to overflowoverflowoverflowOverflowKeyword | `${OverflowKeyword} ${OverflowKeyword}`OverflowKeyword | `${OverflowKeyword} ${OverflowKeyword}`Default: 'auto'Default: 'auto'
The overflow behavior of the scroll box, controlling whether content that exceeds the container is scrollable or clipped. Learn more about
overflow.hidden: Content is clipped and the element is not scrollable in that axis.auto: Content is clipped and becomes scrollable in that axis.
Supports 1-to-2-value syntax using flow-relative axes. Two values are ordered as
block inline(for example,hidden autoclips vertically and scrolls horizontally).- Anchor to paddingpaddingpaddingMaybeResponsive<MaybeAllValuesShorthandProperty<PaddingKeyword>>MaybeResponsive<MaybeAllValuesShorthandProperty<PaddingKeyword>>Default: 'none'Default: 'none'
The padding applied to all edges of the component.
Supports 1-to-4-value syntax using flow-relative values:
- 1 value applies to all sides
- 2 values apply to block (top/bottom) and inline (left/right)
- 3 values apply to block-start (top), inline (left/right), and block-end (bottom)
- 4 values apply to block-start (top), inline-end (right), block-end (bottom), and inline-start (left)
Examples:
base,large none,base large-100 base smallUse
autoto inherit padding from the nearest container with removed padding.- Anchor to paddingBlockpaddingBlockpaddingBlockMaybeResponsive<MaybeTwoValuesShorthandProperty<PaddingKeyword> | "">MaybeResponsive<MaybeTwoValuesShorthandProperty<PaddingKeyword> | "">Default: '' - meaning no overrideDefault: '' - meaning no override
The block-direction padding (top and bottom in horizontal writing modes).
Accepts a single value for both sides or two space-separated values for block-start and block-end.
Example:
large noneapplieslargeto the top andnoneto the bottom.Overrides the block value from
padding.- Anchor to paddingBlockEndpaddingBlockEndpaddingBlockEndMaybeResponsive<PaddingKeyword | "">MaybeResponsive<PaddingKeyword | "">Default: '' - meaning no overrideDefault: '' - meaning no override
The block-end padding (bottom in horizontal writing modes).
Overrides the block-end value from
.- Anchor to paddingBlockStartpaddingBlockStartpaddingBlockStartMaybeResponsive<PaddingKeyword | "">MaybeResponsive<PaddingKeyword | "">Default: '' - meaning no overrideDefault: '' - meaning no override
The block-start padding (top in horizontal writing modes).
Overrides the block-start value from
.- Anchor to paddingInlinepaddingInlinepaddingInlineMaybeResponsive<MaybeTwoValuesShorthandProperty<PaddingKeyword> | "">MaybeResponsive<MaybeTwoValuesShorthandProperty<PaddingKeyword> | "">Default: '' - meaning no overrideDefault: '' - meaning no override
The inline-direction padding (left and right in horizontal writing modes).
Accepts a single value for both sides or two space-separated values for inline-start and inline-end.
Example:
large noneapplieslargeto the left andnoneto the right.Overrides the inline value from
padding.- Anchor to paddingInlineEndpaddingInlineEndpaddingInlineEndMaybeResponsive<PaddingKeyword | "">MaybeResponsive<PaddingKeyword | "">Default: '' - meaning no overrideDefault: '' - meaning no override
The inline-end padding (right in LTR writing modes, left in RTL).
Overrides the inline-end value from
.- Anchor to paddingInlineStartpaddingInlineStartpaddingInlineStartMaybeResponsive<PaddingKeyword | "">MaybeResponsive<PaddingKeyword | "">Default: '' - meaning no overrideDefault: '' - meaning no override
The inline-start padding (left in LTR writing modes, right in RTL).
Overrides the inline-start value from
.
AccessibilityRole
The semantic role of a component, used by assistive technologies to convey the element’s purpose to users. Each role maps to a specific HTML element or ARIA role. - `main`: The primary content of the page. - `header`: A page or section header. - `footer`: Information such as copyright, navigation links, and privacy statements. - `section`: A generic section that should have a heading or `accessibilityLabel`. - `aside`: Supporting content related to the main content. - `navigation`: A major group of navigation links. - `ordered-list`: A list of ordered items. - `list-item`: An item inside a list. - `list-item-separator`: A divider between list items. - `unordered-list`: A list of unordered items. - `separator`: A divider that separates sections of content. - `status`: A live region with advisory information that is not urgent. - `alert`: Important, usually time-sensitive information. - `generic`: A nameless container with no semantic meaning (renders a `<div>`). - `presentation`: Strips semantic meaning while keeping visual styling. Synonym for `none`. - `none`: Strips semantic meaning while keeping visual styling. Synonym for `presentation`.
"main" | "header" | "footer" | "section" | "aside" | "navigation" | "ordered-list" | "list-item" | "list-item-separator" | "unordered-list" | "separator" | "status" | "alert" | "generic" | "presentation" | "none"MaybeResponsive
Makes a property responsive by allowing it to be set conditionally based on container query conditions. The value can be either a base value or a container query string. - `T`: Base value that applies in all conditions. - `@container${string}`: Container query string for conditional responsive styling based on container size.
T | `@container${string}`SizeUnitsOrAuto
Represents size values that can also be set to `auto` for automatic sizing. - `SizeUnits`: Specific size values in pixels, percentages, or zero for precise control. - `auto`: Automatically sizes based on content and layout constraints. Learn more about the [auto value](https://developer.mozilla.org/en-US/docs/Web/CSS/width#auto).
SizeUnits | "auto"SizeUnits
Represents size values in pixels, percentages, or zero. - `` `${number}px` ``: Absolute size in pixels for fixed dimensions (such as `100px`, `24px`). - `` `${number}%` ``: Relative size as a percentage of the parent container (such as `50%`, `100%`). - `0`: Zero size, equivalent to no dimension.
`${number}px` | `${number}%` | `0`BorderShorthand
A shorthand string for specifying border properties. Accepts a size alone (`'base'`), size with color (`'base base'`), or size with color and style (`'base base dashed'`). Omitted values use their defaults.
ReducedBorderSizeKeyword | `${ReducedBorderSizeKeyword} ${ReducedColorKeyword}` | `${ReducedBorderSizeKeyword} ${ReducedColorKeyword} ${BorderStyleKeyword}`ReducedBorderSizeKeyword
The subset of border size values available for this component. - `base`: Standard border width. - `large`: Thick border for strong emphasis. - `large-100`: Extra thick border for maximum prominence. - `large-200`: The thickest available border. - `none`: No border.
'large' | 'base' | 'large-100' | 'large-200' | 'none'ReducedColorKeyword
The subset of border color values available for this component. - `base`: The standard border color for most contexts.
'base'BorderStyleKeyword
The visual style of a border. Learn more about [border-style](https://developer.mozilla.org/en-US/docs/Web/CSS/border-style). - `none`: No border is rendered. - `solid`: A single continuous line. - `dashed`: A series of short dashes. - `dotted`: A series of round dots. - `auto`: The border style is determined automatically based on the surface's design system.
"none" | "solid" | "dashed" | "dotted" | "auto"MaybeAllValuesShorthandProperty
Represents CSS shorthand properties that accept one to four values, following the [CSS shorthand syntax](https://developer.mozilla.org/en-US/docs/Web/CSS/Shorthand_properties#edges_of_a_box). Supports specifying values for all four sides: top, right, bottom, and left. - `T`: Single value that applies to all four sides. - `${T} ${T}`: Two values for block axis (top/bottom) and inline axis (left/right). - `${T} ${T} ${T}`: Three values for block-start (top), inline axis (left/right), and block-end (bottom). - `${T} ${T} ${T} ${T}`: Four values for block-start (top), inline-end (right), block-end (bottom), and inline-start (left).
T | `${T} ${T}` | `${T} ${T} ${T}` | `${T} ${T} ${T} ${T}`SizeUnitsOrNone
Represents size values that can also be set to `none` to remove the size constraint. - `SizeUnits`: Specific size values in pixels, percentages, or zero for precise control. - `none`: No size constraint, allowing unlimited growth. Learn more about the [none value](https://developer.mozilla.org/en-US/docs/Web/CSS/max-width#none).
SizeUnits | "none"OverflowKeyword
"auto" | "hidden"PaddingKeyword
Defines the padding size for elements, using the standard size scale or `none` for no padding. - `SizeKeyword`: Standard padding sizes from the size scale for consistent spacing. - `none`: No padding.
SizeKeyword | "none"SizeKeyword
The design system's size scale, used to control the dimensions of components like avatars, icons, and thumbnails. Values range from `"small-500"` (smallest) through `"base"` (standard) to `"large-500"` (largest). Not all components support every size — check the component's `size` property type for its available options.
"small-500" | "small-400" | "small-300" | "small-200" | "small-100" | "small" | "base" | "large" | "large-100" | "large-200" | "large-300" | "large-400" | "large-500"MaybeTwoValuesShorthandProperty
Represents CSS shorthand properties that accept one or two values. Supports specifying the same value for both dimensions or different values. - `T`: Single value that applies to both dimensions. - `${T} ${T}`: Two values for block axis (vertical) and inline axis (horizontal).
T | `${T} ${T}`Anchor to ExamplesExamples
Anchor to Constrain content in a scrollable areaConstrain content in a scrollable area
Contain overflowing content within a scrollable region. This example sets maxBlockSize to 120px on s-scroll-box so the boxes scroll inside the frame.
Constrain content in a scrollable area

html
Anchor to Clip overflowing content without scrollingClip overflowing content without scrolling
Clip content that exceeds the container without displaying a scrollbar. This example sets overflow="hidden" and a small maxBlockSize on s-scroll-box so only the first portion of text is visible.
html
Anchor to Scroll a long list of cart itemsScroll a long list of cart items
Constrain a long list of cart items within a scrollable area. This example lists divider-separated rows inside s-scroll-box with maxBlockSize to keep checkout compact.
html
Anchor to Best practicesBest practices
- Set a reasonable max height: Choose a
maxBlockSizethat shows enough content for context while keeping the page layout manageable. Showing two to three visible items before scrolling gives buyers a clear indication that more content is available. - Provide an accessibility label: Set
accessibilityLabelto describe the scrollable region so buyers using assistive technology understand what content is scrollable. - Choose the right overflow mode: Use
autofor navigable content andhiddenwhen clipping is intentional. - Don't nest scroll boxes: Avoid placing scroll boxes inside other scroll boxes. Nested scrollable regions create confusing navigation, especially for keyboard and assistive technology users.
- Pair with dividers inside lists: Separate dense rows with
s-dividerso scrolling content stays scannable.