This plugin adds 4 block styles to the WordPress Group block (core/group):
prefers-reduced-motionrole="region" + aria-roledescription="carousel" on the containerrole="group" + aria-roledescription="slide" on each itemaria-label="X of Y" for position contexttabindex="0" for keyboard focusaria-live="polite" to announce changesaria-label and aria-controlsNavigation buttons and accessibility attributes are automatically injected on the front-end.
The carousel is designed to work out of the box, but you can easily override styles in your theme’s style.css or via the WordPress Customizer > Additional CSS.
By default, items are slightly narrower than the visible area so the next item “peeks” in — signaling there is more content to scroll. To disable this and show full-width items:
/* Disable peek — 3 items variant */
.is-style-snap-carousel > * {
flex-basis: calc(33.333% - 1rem) !important;
}
/* Disable peek — 1 item variant */
.is-style-snap-carousel-single > * {
flex-basis: 100% !important;
}
/* Disable peek — 2 items variant */
.is-style-snap-carousel-duo > * {
flex-basis: calc(50% - 0.75rem) !important;
}
/* Disable peek — 4 items variant */
.is-style-snap-carousel-quad > * {
flex-basis: calc(25% - 1.125rem) !important;
}
/* Arrow color and background */
.snap-carousel-prev,
.snap-carousel-next {
background: #0073aa;
color: #ffffff;
border-color: #0073aa;
}
/* Arrow hover state */
.snap-carousel-prev:hover,
.snap-carousel-next:hover {
background: #005177;
color: #ffffff;
}
/* Arrow size (default: 44px — WCAG minimum touch target) */
.snap-carousel-prev,
.snap-carousel-next {
width: 48px;
height: 48px;
}
/* Square arrows instead of round */
.snap-carousel-prev,
.snap-carousel-next {
border-radius: 8px;
}
/* Gap between items */
[class*="is-style-snap-carousel"] {
gap: 2rem;
}
/* Space above carousel (room for navigation) */
.snap-carousel-wrapper {
padding-top: 4rem;
}
/* Custom focus color for keyboard navigation */
[class*="is-style-snap-carousel"]:focus-visible {
outline-color: #ff6600;
outline-width: 3px;
}
.snap-carousel-prev:focus-visible,
.snap-carousel-next:focus-visible {
outline-color: #ff6600;
}
The carousel already uses --wp--preset--color--base, --wp--preset--color--contrast and --wp--preset--color--primary tokens. You can override these per-block in theme.json or via CSS:
/* Example: dark themed carousel */
.snap-carousel-wrapper {
--wp--preset--color--base: #1a1a2e;
--wp--preset--color--contrast: #e0e0e0;
--wp--preset--color--primary: #e94560;
}<h3>Technical Notes</h3>
– CSS overrides flex-wrap: nowrap on the Row container to force horizontal scrolling
– Items use a slightly reduced flex-basis to create a peek effect (next item partially visible)
– Navigation buttons are positioned absolute at the top right (adjust top value for your theme)
– JS uses a 150ms debounce on scroll for button state updates and 300ms for screen reader announcements
– Compatible with WooCommerce blocks (products, etc.)
Snap Carousel is built and maintained by WeAre[WP], a french WordPress agency specializing in accessible, high-performance websites for businesses of all sizes.
Need help with your WordPress project? Get in touch.