<p class="support-notice">🐤 <strong>Heads-up!</strong> Your browser does not support CSS Carousels. Try opening the demo in Chrome 135+ instead.</p>
<ul class="carousel">
<li>
<h2>Item Heading</h2>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Unde ad placeat nisi sint quo omnis inventore numquam enim iure voluptates quaerat minus sit, aut labore eaque expedita! Minima, consectetur rerum.</p>
</li>
<li>
<h2>Item Heading</h2>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Unde ad placeat nisi sint quo omnis inventore numquam enim iure voluptates quaerat minus sit, aut labore eaque expedita! Minima, consectetur rerum.</p>
</li>
<li>
<h2>Item Heading</h2>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Unde ad placeat nisi sint quo omnis inventore numquam enim iure voluptates quaerat minus sit, aut labore eaque expedita! Minima, consectetur rerum.</p>
</li>
<li>
<h2>Item Heading</h2>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Unde ad placeat nisi sint quo omnis inventore numquam enim iure voluptates quaerat minus sit, aut labore eaque expedita! Minima, consectetur rerum.</p>
</li>
<li>
<h2>Item Heading</h2>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Unde ad placeat nisi sint quo omnis inventore numquam enim iure voluptates quaerat minus sit, aut labore eaque expedita! Minima, consectetur rerum.</p>
</li>
</ul>
.carousel {
anchor-name: --carousel;
display: grid;
grid-auto-flow: column;
grid-auto-columns: 40%;
gap: 2rem;
overflow: scroll;
scroll-snap-type: x mandatory;
@media (prefers-reduced-motion: no-preference) {
scroll-behavior: smooth;
}
> li {
scroll-snap-align: center;
}
}
/* SCROLL BUTTONS */
.carousel::scroll-button(*) {
position: absolute;
position-anchor: --carousel;
height: 100%;
}
.carousel::scroll-button(left) {
content: "Left";
position-area: center left;
}
.carousel::scroll-button(right) {
content: "Right";
position-area: center right;
}
/* DEMO STYLES */
@layer decor {
html {
color-scheme: dark;
}
.carousel {
border: 5px solid CanvasText;
margin: auto;
padding: 1.5rem;
width: min(100%, 800px);
> li {
list-style: "";
}
}
}
@layer base {
.support-notice {
background: hsl(50 100% 90%);
border-radius: 8px;
font-family: monospace;
font-size: 1rem;
line-height: 1.55;
margin-block: 1rem;
margin-inline: auto;
padding: 1rem;
width: max(30ch, 80vw);
@supports (scroll-marker-group: before) {
display: none;
}
}
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.