Carousel 3D

Pure-CSS 3D rotating ring of cards. Each item is laid out on a circular path with perspective depth, auto-rotating around the Y axis. Flexible via props, scoped slot, generics, and built-in accessibility controls.

Basic

Default settings: 12 images, 32s rotation, lateral fade edges, responsive card width clamp(10em, 35vw, 17.5em), 7/10 aspect ratio, auto-pause when scrolled off-screen.

Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

v-model Animated Toggle

Use v-model:animated for two-way binding. External button OR click on the carousel body itself toggle the same state.

Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

Click Handler

Listen to @item-click for interactivity. Enable :pause-on-hover so users can comfortably aim at a card before clicking.

Click a card to trigger the handler.
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

Click-to-Toggle + A11y

Clicking anywhere on the carousel toggles play/pause. Component renders with role="button" (or region for single/empty), aria-pressed, and supports Enter/Space keyboard toggle.

Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

Edge Cases: Item Count

Component handles edge counts gracefully. 1 item: static center. 2 items: arbitrary spacing (tan formula undefined at 180°). 3+ items: proper ring.

1 item (static)
Jellyfish 1
2 items (facing pair)
Jellyfish 1
Jellyfish 2
3 items (triangle ring)
Jellyfish 1
Jellyfish 2
Jellyfish 3

Custom Duration

Adjust rotation speed with duration. Values: 16s (fast), 32s (default), 64s (slow).

16s (fast)
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12
32s (default)
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12
64s (slow)
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

Reverse + Tilt

:reverse flips rotation direction. tilt rotates the ring on X axis for extra depth.

Reverse + tilt -10deg
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12
Forward + tilt 10deg
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

Initial Rotation

Use initial-rotation to offset the starting angle.

initial-rotation="0deg"
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12
initial-rotation="45deg"
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

Custom Card Dimensions

Adjust card-width and card-aspect to match your content.

Small square cards (8em, 1/1)
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12
Wide landscape cards (14em, 16/9)
Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

Ground Shadow + No Fade

:show-shadow="true" adds soft ground shadow. :fade-edges="false" removes lateral mask fade.

Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

Custom Slot + Generic Type

The #item slot is fully typed via TypeScript generics. Here the item parameter is inferred as BrandItem with typed initials and name fields.

ABAir Minum Biru
BGBurger Bangor
CCCheezy Coin
DJDJ Juice
FAFarmakita
CBCafe Bombom
GSGelato Sore
HRHotel Rasa

Custom Card Class

Use card-class to apply styling to every card wrapper.

Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12

Combined Showcase

All features together: tilt, ground shadow, hover scale, click-to-toggle, slow rotation, custom card class, gradient background.

Jellyfish 1
Jellyfish 2
Jellyfish 3
Jellyfish 4
Jellyfish 5
Jellyfish 6
Jellyfish 7
Jellyfish 8
Jellyfish 9
Jellyfish 10
Jellyfish 11
Jellyfish 12