仅 CSS Tailwind CSS 轮播使用滚动捕捉。带有导航控件的水平幻灯片布局,无需 JavaScript。 WCAG AA 可访问,可与 Django、HTMX、Laravel、React 和任何堆栈配合使用。
轮播组件在旋转或可滚动容器中显示多个项目,非常适合展示图像、推荐、产品图库或特色内容。轮播采用语义 HTML 和平滑的滚动行为构建,支持具有对齐对齐的水平和垂直布局。 Frutjam 轮播系统非常适合英雄部分、产品画廊、推荐展示和内容滑块。
仅 CSS,无需 JavaScript。 WCAG AA 可访问且与框架无关 - 可与 Django、HTMX、Laravel、React 和任何堆栈配合使用。
| 班级 | 类型 | 描述 |
|---|---|---|
| carousel | 根据 | 具有捕捉行为的水平可滚动容器 |
| carousel-item | 修饰符 | 旋转木马内的单独幻灯片 |
| carousel-vertical | 修饰符 | 垂直滚动方向 |
| carousel-center | 修饰符 | 对齐到每个项目的中心 |
| carousel-end | 修饰符 | 对齐到每个项目的末尾 |
基本用法
创建一个带有可滚动项目的简单水平轮播。
Featured
Popular
Trending
New
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div class="carousel w-full gap-4 p-4 bg-base-100"> <div class="carousel-item w-96"> <div class="badge badge-primary">Featured</div> </div> <div class="carousel-item w-96"> <div class="badge badge-secondary">Popular</div> </div> <div class="carousel-item w-96"> <div class="badge badge-accent">Trending</div> </div> <div class="carousel-item w-96"> <div class="badge badge-info">New</div> </div> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div className="carousel w-full gap-4 p-4 bg-base-100"> <div className="carousel-item w-96"> <div className="badge badge-primary">Featured</div> </div> <div className="carousel-item w-96"> <div className="badge badge-secondary">Popular</div> </div> <div className="carousel-item w-96"> <div className="badge badge-accent">Trending</div> </div> <div className="carousel-item w-96"> <div className="badge badge-info">New</div> </div> </div> |
带有图像的轮播
显示具有平滑滚动和响应式大小调整的图像库。
html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <div class="carousel w-full gap-2"> <div class="carousel-item w-full"> <picture> <source media="(max-width: 640px)" srcset="https://cdn.frutjam.com/images/photo-2.jpg?format=webp&width=640&height=360"> <img src="https://cdn.frutjam.com/images/photo-2.jpg?format=webp&width=800&height=450" alt="Image 1" class="w-full" loading="lazy" /> </picture> </div> <div class="carousel-item w-full"> <picture> <source media="(max-width: 640px)" srcset="https://cdn.frutjam.com/images/photo-3.jpg?format=webp&width=640&height=360"> <img src="https://cdn.frutjam.com/images/photo-3.jpg?format=webp&width=800&height=450" alt="Image 2" class="w-full" loading="lazy" /> </picture> </div> <div class="carousel-item w-full"> <picture> <source media="(max-width: 640px)" srcset="https://cdn.frutjam.com/images/photo-4.jpg?format=webp&width=640&height=360"> <img src="https://cdn.frutjam.com/images/photo-4.jpg?format=webp&width=800&height=450" alt="Image 3" class="w-full" loading="lazy" /> </picture> </div> </div> |
轮播中心对齐
以中心对齐方式显示轮播项目并在卡片之间留出间距。
Card 1
Featured product or content
Card 2
Popular selection
Card 3
Trending now
html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <div class="carousel carousel-center gap-4 p-4 bg-base-200 rounded-lg"> <div class="carousel-item"> <div class="card card-primary w-80"> <div class="card-content"> <h2 class="card-title">Card 1</h2> <p>Featured product or content</p> </div> </div> </div> <div class="carousel-item"> <div class="card card-secondary w-80"> <div class="card-content"> <h2 class="card-title">Card 2</h2> <p>Popular selection</p> </div> </div> </div> <div class="carousel-item"> <div class="card card-accent w-80"> <div class="card-content"> <h2 class="card-title">Card 3</h2> <p>Trending now</p> </div> </div> </div> </div> |
垂直转盘
创建一个垂直轮播,用于从上到下滚动项目。
Item 1
Item 2
Item 3
Item 4
html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div class="carousel carousel-vertical h-96 gap-2 p-2 bg-base-100"> <div class="carousel-item h-32"> <div class="badge badge-lg badge-primary">Item 1</div> </div> <div class="carousel-item h-32"> <div class="badge badge-lg badge-secondary">Item 2</div> </div> <div class="carousel-item h-32"> <div class="badge badge-lg badge-accent">Item 3</div> </div> <div class="carousel-item h-32"> <div class="badge badge-lg badge-info">Item 4</div> </div> </div> |
带导航的轮播
使用锚链接添加用于在轮播项目之间手动导航的按钮。
html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | <div class="carousel w-full"> <div id="slide1" class="carousel-item relative w-full"> <div class="badge badge-primary w-full h-32">Slide 1</div> <div class="absolute inset-x-0 top-1/2 flex justify-between px-2"> <a href="#slide4" class="btn btn-circle btn-sm btn-ghost" aria-label="Previous slide">❮</a> <a href="#slide2" class="btn btn-circle btn-sm btn-ghost" aria-label="Next slide">❯</a> </div> </div> <div id="slide2" class="carousel-item relative w-full"> <div class="badge badge-secondary w-full h-32">Slide 2</div> <div class="absolute inset-x-0 top-1/2 flex justify-between px-2"> <a href="#slide1" class="btn btn-circle btn-sm btn-ghost" aria-label="Previous slide">❮</a> <a href="#slide3" class="btn btn-circle btn-sm btn-ghost" aria-label="Next slide">❯</a> </div> </div> <div id="slide3" class="carousel-item relative w-full"> <div class="badge badge-accent w-full h-32">Slide 3</div> <div class="absolute inset-x-0 top-1/2 flex justify-between px-2"> <a href="#slide2" class="btn btn-circle btn-sm btn-ghost" aria-label="Previous slide">❮</a> <a href="#slide4" class="btn btn-circle btn-sm btn-ghost" aria-label="Next slide">❯</a> </div> </div> <div id="slide4" class="carousel-item relative w-full"> <div class="badge badge-info w-full h-32">Slide 4</div> <div class="absolute inset-x-0 top-1/2 flex justify-between px-2"> <a href="#slide3" class="btn btn-circle btn-sm" aria-label="Previous slide"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 18-6-6 6-6"/></svg> </a> <a href="#slide1" class="btn btn-circle btn-sm" aria-label="Next slide"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg> </a> </div> </div> </div> |
带点指示器的轮播
使用小徽章按钮作为多个轮播项目的导航指示器。
html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <div class="carousel w-full"> <div id="item1" class="carousel-item w-full"> <div class="badge badge-primary w-full h-32">1</div> </div> <div id="item2" class="carousel-item w-full"> <div class="badge badge-secondary w-full h-32">2</div> </div> <div id="item3" class="carousel-item w-full"> <div class="badge badge-accent w-full h-32">3</div> </div> <div id="item4" class="carousel-item w-full"> <div class="badge badge-info w-full h-32">4</div> </div> <div class="flex justify-center gap-2 pt-4"> <a href="#item1" class="btn btn-xs btn-outline">1</a> <a href="#item2" class="btn btn-xs btn-outline">2</a> <a href="#item3" class="btn btn-xs btn-outline">3</a> <a href="#item4" class="btn btn-xs btn-outline">4</a> </div> </div> |
JS 和 React 助手
使用 frutjam/js 中的 createCarousel 或 frutjam/react 中的 useCarousel 以编程方式导航幻灯片 - 自动遵守 prefers-reduced-motion。
Slide 1
Slide 2
Slide 3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <div class="flex gap-2 mb-3"> <button class="btn btn-sm" id="carousel-prev">← Prev</button> <button class="btn btn-sm" id="carousel-next">Next →</button> </div> <div class="carousel w-full" id="js-carousel"> <div class="carousel-item w-full"><div class="badge badge-primary w-full h-32">Slide 1</div></div> <div class="carousel-item w-full"><div class="badge badge-secondary w-full h-32">Slide 2</div></div> <div class="carousel-item w-full"><div class="badge badge-accent w-full h-32">Slide 3</div></div> </div> <script type="module"> import { createCarousel } from 'frutjam/js' const carousel = createCarousel(document.getElementById('js-carousel')) document.getElementById('carousel-prev').onclick = () => carousel.prev() document.getElementById('carousel-next').onclick = () => carousel.next() </script> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import { useCarousel } from 'frutjam/react' export default function CarouselDemo() { const carousel = useCarousel() return ( <> <div className="flex gap-2 mb-3"> <button className="btn btn-sm" onClick={carousel.prev}>← Prev</button> <button className="btn btn-sm" onClick={carousel.next}>Next →</button> </div> <div ref={carousel.ref} className="carousel w-full"> <div className="carousel-item w-full"><div className="badge badge-primary w-full h-32">Slide 1</div></div> <div className="carousel-item w-full"><div className="badge badge-secondary w-full h-32">Slide 2</div></div> <div className="carousel-item w-full"><div className="badge badge-accent w-full h-32">Slide 3</div></div> </div> </> ) } |
使用 Claude Code、Cursor 或其他 AI 编辑器?
Cherry MCP 为您的 AI 编辑器按需提供准确的 轮播 类名称和结构。不再有幻觉课程。