CSS scroll-snap-stop Property

Beginner
⏱️ 5 min read
📚 Updated: Jun 2026
🎯 4 Examples
Scroll Snap

What You’ll Learn

The scroll-snap-stop property controls whether a snap target must be stopped at during scrolling. It helps prevent fast swipes from skipping important slides or panels.

01

stop

Force snap.

02

normal

Default.

03

always

No skip.

04

target

On child.

05

fast scroll

Swipe case.

06

align

Pair with it.

Introduction

The scroll-snap-stop property in CSS is part of the CSS Scroll Snap Module. It works with scroll-snap-type and scroll-snap-align to create smooth and controlled scrolling experiences.

This property lets you specify whether a snap target must be stopped at even when the user scrolls quickly, which helps prevent important slides from being skipped.

Definition and Usage

Apply scroll-snap-stop to snap targets inside a scroll container — such as carousel slides inside a wrapper that already has scroll-snap-type enabled.

It works together with scroll-snap-type on the container and scroll-snap-align on each snap target.

💡
Beginner Tip

Most slides can use the default scroll-snap-stop: normal;. Add scroll-snap-stop: always; only on slides that must never be skipped during a fast swipe.

📝 Syntax

The syntax for the scroll-snap-stop property is simple. It is applied to snap targets inside a scroll container.

syntax.css
element {
  scroll-snap-stop: normal | always;
}

Basic Example

snap-target.css
.hero-slide {
  scroll-snap-stop: always;
}

Related Properties

  • scroll-snap-type — enables snapping on the scroll container
  • scroll-snap-align — sets how each snap target aligns in the scrollport
  • scroll-padding — insets the scrollport on the container

🎯 Default Value

The default value of the scroll-snap-stop property is normal, which means snapping behaves normally without forcing an extra stop on that target.

⚡ Quick Reference

QuestionAnswer
Default valuenormal
Common valuesnormal, always
Works withscroll-snap-type and scroll-snap-align
Accepted valuesnormal, always
Set onSnap targets inside scroll containers
InheritedNo
AnimatableNo

💎 Property Values

ValueExampleDescription
normalscroll-snap-stop: normal;Default value. Snapping behaves normally, without forcing a stop during fast scrolling.
alwaysscroll-snap-stop: always;Forces the scroll container to snap to this position even if the user scrolls quickly.
normal always

When to Use scroll-snap-stop

scroll-snap-stop helps when some snap targets should never be skipped:

  • Hero carousels — Force the first promotional slide to always stop, even during fast swipes.
  • Onboarding flows — Make required steps stop instead of being skipped accidentally.
  • Product highlights — Keep a featured item from being scrolled past too quickly.
  • Story-style panels — Ensure key narrative sections get a deliberate pause.

Enable snapping on the container with scroll-snap-type first, set alignment with scroll-snap-align, then use always only where needed.

👀 Live Preview

Scroll sideways inside the box. The first panel uses scroll-snap-stop: always; the second uses the default normal.

Always stop
Normal stop

During a fast swipe, the red panel is more likely to force a snap stop than the yellow panel.

Examples Gallery

Start with the reference horizontal carousel, compare normal and always behavior, then try onboarding and vertical layouts.

📜 Forced Snap Stops

Control whether snap targets can be skipped during fast scrolling — matching the reference example.

Example 1 — Horizontal scroll snap with always on the first item

In this example, we’ll create a horizontal scrolling container with snap points and demonstrate the effect of scroll-snap-stop.

index.html
<style>
  .scroll-container {
    display: flex;
    overflow-x: scroll;
    scroll-snap-type: x mandatory;
    width: 100%;
    height: 200px;
  }

  .item {
    flex: 0 0 100%;
    scroll-snap-align: center;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 2em;
    color: white;
  }

  .item1 {
    background-color: #ff5733;
    scroll-snap-stop: always;
  }
  .item2 { background-color: #33c1ff; }
  .item3 { background-color: #33ff57; }
</style>

<div class="scroll-container">
  <div class="item item1">Item 1 (always)</div>
  <div class="item item2">Item 2 (normal)</div>
  <div class="item item3">Item 3 (normal)</div>
</div>
Try It Yourself

How It Works

The container enables snapping with scroll-snap-type. Item 1 uses scroll-snap-stop: always so it cannot be skipped as easily during fast scrolling.

Example 2 — Always stop on a hero slide

Use scroll-snap-stop: always on a featured slide that should never be skipped in a product carousel.

hero-stop.css
.hero-slide {
  scroll-snap-align: center;
  scroll-snap-stop: always;
}
Try It Yourself

How It Works

Pair always with scroll-snap-align on the same target. The alignment decides where the slide lands; the stop value decides whether it must pause there.

📄 Normal vs Always

Compare default behavior with forced stops in card rows and vertical panel scrollers.

Example 3 — Normal stop on regular carousel slides

Most slides can keep the default scroll-snap-stop: normal, which allows faster scrolling through multiple items.

normal-stop.css
.carousel-slide {
  scroll-snap-align: start;
  scroll-snap-stop: normal;
}
Try It Yourself

How It Works

Use normal for most content and reserve always for the few slides that need guaranteed attention.

Example 4 — Always stop on a key onboarding panel

Apply scroll-snap-stop: always to an important vertical panel so users cannot swipe past it too quickly.

vertical-stop.css
.onboarding-step {
  scroll-snap-align: start;
  scroll-snap-stop: always;
}
Try It Yourself

How It Works

Vertical snap scrollers use the same stop values as horizontal carousels when the container has scroll-snap-type: y mandatory.

scroll-snap-stop in the family

scroll-snap-stop works on snap targets inside a container that already has scroll-snap-type. Pair it with scroll-snap-align to control both where items land and whether they must stop.

container-and-target.css
.scroll-container { scroll-snap-type: x mandatory; }
.hero-slide { scroll-snap-align: center; scroll-snap-stop: always; }

🧠 How scroll-snap-stop Works

1

Container enables snapping

The scroll container uses scroll-snap-type to turn on snapping along an axis.

Container
2

Targets set stop behavior

Each snap target can use scroll-snap-stop: normal or always to control forced stops.

Target
3

Fast scroll is evaluated

During a quick swipe, normal targets may be skipped, but always targets must still snap into place.

Scroll
=

Controlled snap pacing

Important slides stay visible instead of being flung past during fast touch scrolling.

Browser Compatibility

The scroll-snap-stop property is supported in most modern browsers, including the latest versions of Chrome, Firefox, Safari, Edge, and Opera. However, it is always a good practice to test your website across different browsers to ensure compatibility.

Scroll snap · Modern support

Reliable snap-stop support

Current Chrome, Firefox, Safari, Edge, and Opera support scroll-snap-stop on snap targets.

97% Modern browser support
Google Chrome 69+ · Desktop & Mobile
Full support
Mozilla Firefox 68+ · Desktop & Mobile
Full support
Apple Safari 14.1+ · macOS & iOS
Full support
Microsoft Edge 79+ · Chromium
Full support
Opera 56+ · Modern versions
Full support

Testing tip

Test fast swipes on mobile browsers to confirm always targets stop while normal targets still feel smooth.

scroll-snap-stop property 97% supported

Bottom line: scroll-snap-stop is safe to use in modern projects when you need forced snap stops on important targets.

Conclusion

The scroll-snap-stop property is a useful addition to the CSS scroll snapping specification, giving developers more control over scrolling behavior during fast swipes.

Experiment with normal and always to see how forced stops improve touch and swipe interactions in carousels, onboarding flows, and story layouts.

💡 Best Practices

✅ Do

  • Apply scroll-snap-stop on snap targets, not the scroll container
  • Use always sparingly on hero slides or required steps
  • Keep most slides on the default normal value
  • Pair with scroll-snap-align on the same target
  • Test fast swipes on touch devices

❌ Don’t

  • Set always on every slide — it can feel sluggish
  • Expect stop behavior without scroll-snap-type on the container
  • Confuse stop behavior with alignment from scroll-snap-align
  • Forget to test whether fast scrolling still feels natural

Key Takeaways

Knowledge Unlocked

Five things to remember about scroll-snap-stop

Use these points when deciding whether snap targets must force a stop.

5
Core concepts
02

always

Force stop.

Value
03

snap target

Set on children.

Scope
04

fast swipe

Skip control.

Behavior
05

hero slide

Common use case.

Use case
🔄 06

scroll-snap-align

Pair with it.

Companion

❓ Frequently Asked Questions

scroll-snap-stop controls whether a snap target must be stopped at during scrolling. With always, the browser must snap to that position even during a fast swipe. With normal, the browser may skip past it if the user scrolls quickly.
normal is the default and follows typical snap behavior, which can skip intermediate snap points during fast scrolling. always forces the scroll container to stop at that snap position even when the user scrolls quickly.
The default value is normal, meaning snapping follows the usual rules without forcing an extra stop on that target.
Apply it to snap targets inside a scroll container that already has scroll-snap-type enabled, such as carousel slides, onboarding panels, or gallery cards.
Use always on important slides or sections that should never be skipped, such as a hero message, a required onboarding step, or a featured product panel in a fast horizontal scroller.

Practice in the Live Editor

Open the HTML editor and try scroll-snap-stop: always on a hero slide inside a snap container.

HTML Editor →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

5 people found this page helpful