Marquesina CSS Tailwind solo para CSS para contenido y logotipos con desplazamiento horizontal. Control de velocidad y dirección mediante CSS, sin JavaScript. Accesible a WCAG AA, funciona con Django, HTMX, Laravel, React y cualquier pila.
Los componentes de marquesina crean tiras de contenido infinitas y de desplazamiento continuo, ideales para logotipos de marcas, pancartas publicitarias, testimonios o nubes de etiquetas. Construida completamente con animaciones CSS, la marquesina Frutjam admite direcciones horizontales y verticales, pausa al pasar el mouse, reproducción reversible y control de velocidad. Duplique el elemento marquee-track (con aria-hidden) para obtener un bucle fluido y sin espacios.
Solo CSS, no se requiere JavaScript. WCAG AA accesible e independiente del marco: funciona con Django, HTMX, Laravel, React y cualquier pila.
| Clase | Tipo | Descripción |
|---|---|---|
| marquee | Base | Contenedor exterior: los clips se desbordan y contienen variables de animación |
| marquee-track | Modificador | Fila interior de desplazamiento; duplicar con aria-hidden para un bucle sin interrupciones |
| marquee-pause | Modificador | Pausa la animación al pasar el mouse |
| marquee-reverse | Modificador | Se desplaza en la dirección opuesta |
| marquee-vertical | Modificador | Se desplaza de arriba a abajo en lugar de de izquierda a derecha |
| marquee-slow | Speed | Desplazamiento lento (ciclo de 40 segundos) |
| marquee-normal | Speed | Velocidad predeterminada (ciclo de 20 s) |
| marquee-fast | Speed | Desplazamiento rápido (ciclo de 10 segundos) |
| marquee-fade | Modificador | Agrega bordes degradados en ambos lados |
Uso básico
Agregue dos elementos marquee-track idénticos: el segundo (con aria-hidden="true") llena el espacio cuando el primero se desplaza fuera de la pantalla.
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> ) } |
Pausa al pasar el mouse
Agregue marquee-pause para detener la animación cuando el usuario pasa el cursor sobre la tira.
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> |
Dirección inversa
Utilice marquee-reverse para desplazarse de derecha a izquierda en lugar de de izquierda a derecha. Combina dos filas para obtener un efecto de capas.
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> |
Variantes de velocidad
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> |
Carpa vertical
Agregue marquee-vertical y déle al contenedor una altura fija para un desplazamiento de arriba a abajo.
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> |
Etiquetas de tecnología
Un patrón común para mostrar un conjunto de habilidades o un conjunto de tecnologías.
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> |
Brecha personalizada
Anule --marquee--gap o --marquee--duration con una utilidad en línea para ajustar el espaciado y la velocidad.
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> |
Bordes desvanecidos
Agregue marquee-fade para desvanecer ambos extremos de la tira en el fondo de la página para una apariencia pulida.
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> |
Banner de anuncio
Una barra de teletipo delgada para promociones o avisos en todo el sitio. Combine marquee-fade y marquee-pause para obtener la mejor experiencia.
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> |
Marquesina con logotipo
Muestre socios o marcas confiables en una franja de desplazamiento continuo. Utilice marquee-fade para mezclar los bordes con el fondo.
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> |
Tarjetas de testimonios
Desplácese por las tarjetas de testimonios con una sutil pausa al pasar el mouse para facilitar la lectura.
"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> |
¿Usando Claude Code, Cursor u otro editor de IA?
Cherry MCP le brinda a su editor de IA la estructura y los nombres exactos de las clases Marquesina según sea necesario. No más clases alucinadas.