The scroll-margin-block-start property sets the scroll margin on the block-start edge of a snap target. That outset enlarges the scroll snap area used when this box snaps to the snapport.
Standard-track and Baseline Widely available. Prefer it over scroll-margin-top when writing mode may change. It accepts a length only — not a percentage.
If you snap to end, a start-only margin may look like it does nothing. Match the margin to the snapped edge.
%
Percentages are not valid
Use lengths only. 40% is not a valid scroll-margin-block-start value.
axis
Block-start follows writing mode
In vertical writing modes, block-start is not “top.” The logical start edge moves with writing-mode.
vs
Not the same as scroll padding
scroll-padding-block-start insets the container’s snapport. This property expands the target’s snap area.
Compatibility
Browser Support
scroll-margin-block-start is a browser layout property for scroll snap. Node.js, Deno, and Bun do not apply it.
✓ Baseline · Widely available since 2021
scroll-margin-block-start
Chrome 69+, Firefox 68+, Safari 15+, Edge 79+, Opera 56+, Samsung Internet 10.1+. Internet Explorer does not support it.
97%Modern browsers
Google Chrome69+
Full support
Mozilla Firefox68+
Full support
Apple Safari15+
Full support
Microsoft Edge79+
Full support
Opera56+
Full support
Samsung Internet10.1+
Full support
Internet ExplorerNo support
Not supported
scroll-margin-block-startWidely supported
Bottom line: Safe for modern scroll-snap UIs. Skip Internet Explorer. Pair with scroll-snap-type and usually scroll-snap-align: start.
Remember
Key Takeaways
Role: set a scroll margin on the block-start edge of a snap target only.
Values: lengths such as 40px or 1rem. No percentages.
Initial value:0. Not inherited. Part of the scroll-margin-block shorthand.
Tip: pair with scroll-snap-align: start so the start outset is easy to see.
One line:scroll-margin-block-start gives a snap target breathing room on its block-start edge — after scroll snap is already set up.
Frequently Asked Questions
It sets the scroll margin on the block-start edge of a snap target. That outset enlarges the scroll snap area so snapping can stop a little before that start edge. In horizontal writing modes, block-start is usually the top.
The initial value is 0. There is no extra outset until you set one.
It mainly affects scroll snapping. You still need a scroll container with scroll-snap-type and a target with scroll-snap-align for the offset to show during snap scrolling.
scroll-margin-block is the shorthand for both start and end. scroll-margin-block-start sets only the block-start side.
No. Set it on the element that snaps. Percentages are not valid; use lengths such as px, rem, or em.
It is Baseline and widely available since September 2021: Chrome 69+, Firefox 68+, Safari 15+, Edge 79+, Opera 56+. Internet Explorer does not support it. It is a browser layout property, not a Node.js feature.