Marquee
CSS-only Tailwind CSS marquee for horizontally scrolling content and logos. Speed and direction control via CSS, no JavaScript. WCAG AA accessible, works with Django, HTMX, Laravel, React, and any stack.
Marquee 元件可建立無限、連續滾動的內容條 - 非常適合品牌標誌、公告橫幅、推薦或標籤雲。 Frutjam 字幕完全採用 CSS 動畫構建,支援水平和垂直方向、懸停暫停、可逆播放和速度控制。複製 marquee-track 元素(使用 aria-hidden)以獲得無縫、無間隙的循環。
僅 CSS,無需 JavaScript。 WCAG AA 可存取且與框架無關 - 可與 Django、HTMX、Laravel、React 和任何堆疊配合使用。
| 班級 | 類型 | 描述 |
|---|---|---|
| marquee | 根據 | 外部容器——剪輯溢出並保存動畫變量 |
| marquee-track | 修飾符 | 滾動內行;使用 aria-hidden 複製以實現無縫循環 |
| marquee-pause | 修飾符 | 懸停時暫停動畫 |
| marquee-reverse | 修飾符 | 向相反方向滾動 |
| marquee-vertical | 修飾符 | 從上到下滾動而不是從左到右滾動 |
| marquee-slow | Speed | 慢速滾動(40秒循環) |
| marquee-normal | Speed | 預設速度(20秒循環) |
| marquee-fast | Speed | 快速滾動(10秒循環) |
| marquee-fade | 修飾符 | 在兩側添加漸層淡出邊緣 |
基本用法
增加兩個相同的 marquee-track 元素 - 第二個元素(帶有 aria-hidden="true")會在第一個元素滾出螢幕時填滿間隙。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="marquee"> <div class="marquee-track"> <span class="badge badge-soft">Item 1</span> <span class="badge badge-soft">Item 2</span> <span class="badge badge-soft">Item 3</span> <span class="badge badge-soft">Item 4</span> <span class="badge badge-soft">Item 5</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-soft">Item 1</span> <span class="badge badge-soft">Item 2</span> <span class="badge badge-soft">Item 3</span> <span class="badge badge-soft">Item 4</span> <span class="badge badge-soft">Item 5</span> </div> </div> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | const items = ["Item 1", "Item 2", "Item 3", "Item 4", "Item 5"] export default function MarqueeDemo() { return ( <div className="marquee"> <div className="marquee-track"> {items.map((item) => ( <span key={item} className="badge badge-soft">{item}</span> ))} </div> <div className="marquee-track" aria-hidden="true"> {items.map((item) => ( <span key={item} className="badge badge-soft">{item}</span> ))} </div> </div> ) } |
懸停時暫停
新增 marquee-pause 以在使用者將滑鼠懸停在條帶上時停止動畫。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="marquee marquee-pause"> <div class="marquee-track"> <span class="badge badge-primary badge-soft">Hover me</span> <span class="badge badge-secondary badge-soft">to pause</span> <span class="badge badge-accent badge-soft">the scroll</span> <span class="badge badge-info badge-soft">Animation</span> <span class="badge badge-success badge-soft">stops here</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-primary badge-soft">Hover me</span> <span class="badge badge-secondary badge-soft">to pause</span> <span class="badge badge-accent badge-soft">the scroll</span> <span class="badge badge-info badge-soft">Animation</span> <span class="badge badge-success badge-soft">stops here</span> </div> </div> |
反向
使用marquee-reverse從右向左滾動而不是從左向右滾動。合併兩行以獲得分層效果。
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="flex flex-col gap-3"> <div class="marquee"> <div class="marquee-track"> <span class="badge badge-primary">Alpha</span> <span class="badge badge-secondary">Beta</span> <span class="badge badge-accent">Gamma</span> <span class="badge badge-info">Delta</span> <span class="badge badge-success">Epsilon</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-primary">Alpha</span> <span class="badge badge-secondary">Beta</span> <span class="badge badge-accent">Gamma</span> <span class="badge badge-info">Delta</span> <span class="badge badge-success">Epsilon</span> </div> </div> <div class="marquee marquee-reverse"> <div class="marquee-track"> <span class="badge badge-soft badge-primary">Alpha</span> <span class="badge badge-soft badge-secondary">Beta</span> <span class="badge badge-soft badge-accent">Gamma</span> <span class="badge badge-soft badge-info">Delta</span> <span class="badge badge-soft badge-success">Epsilon</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-soft badge-primary">Alpha</span> <span class="badge badge-soft badge-secondary">Beta</span> <span class="badge badge-soft badge-accent">Gamma</span> <span class="badge badge-soft badge-info">Delta</span> <span class="badge badge-soft badge-success">Epsilon</span> </div> </div> </div> |
速度變化
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | <div class="flex flex-col gap-3"> <div class="marquee marquee-slow"> <div class="marquee-track"> <span class="badge badge-soft">Slow</span> <span class="badge badge-soft">Slow</span> <span class="badge badge-soft">Slow</span> <span class="badge badge-soft">Slow</span> <span class="badge badge-soft">Slow</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-soft">Slow</span> <span class="badge badge-soft">Slow</span> <span class="badge badge-soft">Slow</span> <span class="badge badge-soft">Slow</span> <span class="badge badge-soft">Slow</span> </div> </div> <div class="marquee"> <div class="marquee-track"> <span class="badge badge-primary badge-soft">Normal</span> <span class="badge badge-primary badge-soft">Normal</span> <span class="badge badge-primary badge-soft">Normal</span> <span class="badge badge-primary badge-soft">Normal</span> <span class="badge badge-primary badge-soft">Normal</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-primary badge-soft">Normal</span> <span class="badge badge-primary badge-soft">Normal</span> <span class="badge badge-primary badge-soft">Normal</span> <span class="badge badge-primary badge-soft">Normal</span> <span class="badge badge-primary badge-soft">Normal</span> </div> </div> <div class="marquee marquee-fast"> <div class="marquee-track"> <span class="badge badge-accent badge-soft">Fast</span> <span class="badge badge-accent badge-soft">Fast</span> <span class="badge badge-accent badge-soft">Fast</span> <span class="badge badge-accent badge-soft">Fast</span> <span class="badge badge-accent badge-soft">Fast</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-accent badge-soft">Fast</span> <span class="badge badge-accent badge-soft">Fast</span> <span class="badge badge-accent badge-soft">Fast</span> <span class="badge badge-accent badge-soft">Fast</span> <span class="badge badge-accent badge-soft">Fast</span> </div> </div> </div> |
垂直跑馬燈
新增 marquee-vertical 並為容器提供固定高度以實現從上到下滾動。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="marquee marquee-vertical h-48"> <div class="marquee-track"> <div class="badge badge-primary badge-soft">Announcement one</div> <div class="badge badge-secondary badge-soft">Announcement two</div> <div class="badge badge-accent badge-soft">Announcement three</div> <div class="badge badge-info badge-soft">Announcement four</div> <div class="badge badge-success badge-soft">Announcement five</div> </div> <div class="marquee-track" aria-hidden="true"> <div class="badge badge-primary badge-soft">Announcement one</div> <div class="badge badge-secondary badge-soft">Announcement two</div> <div class="badge badge-accent badge-soft">Announcement three</div> <div class="badge badge-info badge-soft">Announcement four</div> <div class="badge badge-success badge-soft">Announcement five</div> </div> </div> |
技術標籤
展示技能集或技術堆疊的常見模式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <div class="marquee marquee-pause [--marquee--gap:0.75rem] p-2"> <div class="marquee-track"> <span class="badge badge-outline">HTML</span> <span class="badge badge-outline">CSS</span> <span class="badge badge-outline">JavaScript</span> <span class="badge badge-outline">TypeScript</span> <span class="badge badge-outline">React</span> <span class="badge badge-outline">Vue</span> <span class="badge badge-outline">Tailwind CSS</span> <span class="badge badge-outline">Node.js</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-outline">HTML</span> <span class="badge badge-outline">CSS</span> <span class="badge badge-outline">JavaScript</span> <span class="badge badge-outline">TypeScript</span> <span class="badge badge-outline">React</span> <span class="badge badge-outline">Vue</span> <span class="badge badge-outline">Tailwind CSS</span> <span class="badge badge-outline">Node.js</span> </div> </div> |
客製化間隙
使用內聯實用程式覆寫 --marquee--gap 或 --marquee--duration 來微調間距和速度。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div class="marquee [--marquee--gap:2rem] [--marquee--duration:30s]"> <div class="marquee-track"> <span class="badge badge-lg badge-primary">Wide gap</span> <span class="badge badge-lg badge-secondary">Wide gap</span> <span class="badge badge-lg badge-accent">Wide gap</span> <span class="badge badge-lg badge-info">Wide gap</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-lg badge-primary">Wide gap</span> <span class="badge badge-lg badge-secondary">Wide gap</span> <span class="badge badge-lg badge-accent">Wide gap</span> <span class="badge badge-lg badge-info">Wide gap</span> </div> </div> |
淡化邊緣
添加 marquee-fade 將條帶的兩端淡出到頁面背景中,以獲得精美的外觀。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <div class="marquee marquee-fade marquee-pause"> <div class="marquee-track"> <span class="badge badge-soft badge-primary">Design</span> <span class="badge badge-soft badge-secondary">Development</span> <span class="badge badge-soft badge-accent">Performance</span> <span class="badge badge-soft badge-info">Accessibility</span> <span class="badge badge-soft badge-success">Open Source</span> <span class="badge badge-soft badge-warning">Security</span> <span class="badge badge-soft badge-error">Testing</span> </div> <div class="marquee-track" aria-hidden="true"> <span class="badge badge-soft badge-primary">Design</span> <span class="badge badge-soft badge-secondary">Development</span> <span class="badge badge-soft badge-accent">Performance</span> <span class="badge badge-soft badge-info">Accessibility</span> <span class="badge badge-soft badge-success">Open Source</span> <span class="badge badge-soft badge-warning">Security</span> <span class="badge badge-soft badge-error">Testing</span> </div> </div> |
公告橫幅
用於促銷或全網站通知的細長股票欄。結合 marquee-fade 和 marquee-pause 以獲得最佳體驗。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <div class="bg-primary text-on-primary py-2 px-4"> <div class="marquee marquee-fade marquee-pause [--marquee--duration:30s]"> <div class="marquee-track text-sm font-medium"> <span class="inline-flex items-center gap-2 whitespace-nowrap px-4">🎉 Version 2.0 is here — explore what's new</span> <span class="inline-flex items-center gap-2 whitespace-nowrap px-4">🌿 Built with Tailwind CSS v4</span> <span class="inline-flex items-center gap-2 whitespace-nowrap px-4">⚡ Zero JavaScript, pure CSS components</span> <span class="inline-flex items-center gap-2 whitespace-nowrap px-4">🎨 Fully themeable with CSS variables</span> </div> <div class="marquee-track text-sm font-medium" aria-hidden="true"> <span class="inline-flex items-center gap-2 whitespace-nowrap px-4">🎉 Version 2.0 is here — explore what's new</span> <span class="inline-flex items-center gap-2 whitespace-nowrap px-4">🌿 Built with Tailwind CSS v4</span> <span class="inline-flex items-center gap-2 whitespace-nowrap px-4">⚡ Zero JavaScript, pure CSS components</span> <span class="inline-flex items-center gap-2 whitespace-nowrap px-4">🎨 Fully themeable with CSS variables</span> </div> </div> </div> |
標誌跑馬燈
在連續滾動條中展示合作夥伴或值得信賴的品牌。使用marquee-fade將邊緣整合到背景中。
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <div class="marquee marquee-fade marquee-pause [--marquee--gap:3rem] [--marquee--duration:25s]"> <div class="marquee-track items-center"> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Acme</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Globex</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Initech</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Umbrella</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Hooli</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Pied Piper</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Vehement</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Massive</span> </div> </div> <div class="marquee-track items-center" aria-hidden="true"> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Acme</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Globex</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Initech</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Umbrella</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Hooli</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Pied Piper</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Vehement</span> </div> <div class="flex items-center justify-center h-10 px-4 opacity-60 hover:opacity-100 transition-opacity"> <span class="text-xl font-bold tracking-tight">Massive</span> </div> </div> </div> |
推薦卡
捲動推薦卡,並在懸停時輕微暫停以提高可讀性。
"Absolutely love the component library. Saves us hours every sprint."
Alex Morgan
Frontend Engineer
"The best Tailwind UI kit I've used. Clean, accessible, and easy to customize."
Jamie Lee
Product Designer
"Shipped our design system 3× faster thanks to Frutjam. Highly recommend."
Sam Rivera
Tech Lead
"Great DX, thoughtful defaults, and the dark mode just works out of the box."
Riley Chen
Full Stack Developer
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 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | <div class="marquee marquee-fade marquee-pause [--marquee--gap:1rem] [--marquee--duration:40s]"> <div class="marquee-track items-stretch"> <div class="card card-outline w-72 shrink-0"> <div class="card-content"> <p class="text-sm">"Absolutely love the component library. Saves us hours every sprint."</p> <div class="flex items-center gap-2 mt-3"> <div class="avatar avatar-sm avatar-circle avatar-primary">A</div> <div> <p class="text-sm font-medium">Alex Morgan</p> <p class="text-xs text-body">Frontend Engineer</p> </div> </div> </div> </div> <div class="card card-outline w-72 shrink-0"> <div class="card-content"> <p class="text-sm">"The best Tailwind UI kit I've used. Clean, accessible, and easy to customize."</p> <div class="flex items-center gap-2 mt-3"> <div class="avatar avatar-sm avatar-circle avatar-secondary">J</div> <div> <p class="text-sm font-medium">Jamie Lee</p> <p class="text-xs text-body">Product Designer</p> </div> </div> </div> </div> <div class="card card-outline w-72 shrink-0"> <div class="card-content"> <p class="text-sm">"Shipped our design system 3× faster thanks to Frutjam. Highly recommend."</p> <div class="flex items-center gap-2 mt-3"> <div class="avatar avatar-sm avatar-circle avatar-accent">S</div> <div> <p class="text-sm font-medium">Sam Rivera</p> <p class="text-xs text-body">Tech Lead</p> </div> </div> </div> </div> <div class="card card-outline w-72 shrink-0"> <div class="card-content"> <p class="text-sm">"Great DX, thoughtful defaults, and the dark mode just works out of the box."</p> <div class="flex items-center gap-2 mt-3"> <div class="avatar avatar-sm avatar-circle avatar-info">R</div> <div> <p class="text-sm font-medium">Riley Chen</p> <p class="text-xs text-body">Full Stack Developer</p> </div> </div> </div> </div> </div> <div class="marquee-track items-stretch" aria-hidden="true"> <div class="card card-outline w-72 shrink-0"> <div class="card-content"> <p class="text-sm">"Absolutely love the component library. Saves us hours every sprint."</p> <div class="flex items-center gap-2 mt-3"> <div class="avatar avatar-sm avatar-circle avatar-primary">A</div> <div> <p class="text-sm font-medium">Alex Morgan</p> <p class="text-xs text-body">Frontend Engineer</p> </div> </div> </div> </div> <div class="card card-outline w-72 shrink-0"> <div class="card-content"> <p class="text-sm">"The best Tailwind UI kit I've used. Clean, accessible, and easy to customize."</p> <div class="flex items-center gap-2 mt-3"> <div class="avatar avatar-sm avatar-circle avatar-secondary">J</div> <div> <p class="text-sm font-medium">Jamie Lee</p> <p class="text-xs text-body">Product Designer</p> </div> </div> </div> </div> <div class="card card-outline w-72 shrink-0"> <div class="card-content"> <p class="text-sm">"Shipped our design system 3× faster thanks to Frutjam. Highly recommend."</p> <div class="flex items-center gap-2 mt-3"> <div class="avatar avatar-sm avatar-circle avatar-accent">S</div> <div> <p class="text-sm font-medium">Sam Rivera</p> <p class="text-xs text-body">Tech Lead</p> </div> </div> </div> </div> <div class="card card-outline w-72 shrink-0"> <div class="card-content"> <p class="text-sm">"Great DX, thoughtful defaults, and the dark mode just works out of the box."</p> <div class="flex items-center gap-2 mt-3"> <div class="avatar avatar-sm avatar-circle avatar-info">R</div> <div> <p class="text-sm font-medium">Riley Chen</p> <p class="text-xs text-body">Full Stack Developer</p> </div> </div> </div> </div> </div> </div> |