verdie_roberts14
Arbor conspergo explicabo carmen cerno degero.

leon66
Tremo tenetur aggero caterva argumentum comis.

piper_funk45
Id abscido officiis denique trucido optio.
verdie_roberts14
Arbor conspergo explicabo carmen cerno degero.

leon66
Tremo tenetur aggero caterva argumentum comis.

piper_funk45
Id abscido officiis denique trucido optio.
verdie_roberts14
Arbor conspergo explicabo carmen cerno degero.

leon66
Tremo tenetur aggero caterva argumentum comis.

piper_funk45
Id abscido officiis denique trucido optio.
verdie_roberts14
Arbor conspergo explicabo carmen cerno degero.

leon66
Tremo tenetur aggero caterva argumentum comis.

piper_funk45
Id abscido officiis denique trucido optio.

dale.schoen9
Ipsum vita talus alo sophismata coerceo demulceo perspiciatis.

austyn.mitchell
Cicuta distinctio decretum cattus verbum dolorem.

gabriel.bartell3
Bellum ultra amaritudo currus tenuis brevis.
jayme13
Vester turpis virtus sumptus casso alii subseco.

dale.schoen9
Ipsum vita talus alo sophismata coerceo demulceo perspiciatis.

austyn.mitchell
Cicuta distinctio decretum cattus verbum dolorem.

gabriel.bartell3
Bellum ultra amaritudo currus tenuis brevis.
jayme13
Vester turpis virtus sumptus casso alii subseco.

dale.schoen9
Ipsum vita talus alo sophismata coerceo demulceo perspiciatis.

austyn.mitchell
Cicuta distinctio decretum cattus verbum dolorem.

gabriel.bartell3
Bellum ultra amaritudo currus tenuis brevis.
jayme13
Vester turpis virtus sumptus casso alii subseco.

dale.schoen9
Ipsum vita talus alo sophismata coerceo demulceo perspiciatis.

austyn.mitchell
Cicuta distinctio decretum cattus verbum dolorem.

gabriel.bartell3
Bellum ultra amaritudo currus tenuis brevis.
jayme13
Vester turpis virtus sumptus casso alii subseco.
Source code
Click to see the source code for this component on GitHub.
Feel free to copy it and adjust it for your own use.
Installation
Add the Marquee component
<template>
<div
:class="marqueeStyles().wrapper({ class: props.wrapperClass, vertical, reverse, pauseOnHover })"
>
<div
v-for="i in repeat"
:key="i"
:class="
marqueeStyles().content({ class: props.contentClass, vertical, reverse, pauseOnHover })
"
>
<slot />
</div>
</div>
</template>
<script lang="ts">
import type { HTMLAttributes } from "vue";
export type MarqueeProps = {
/**
* Optional CSS class name to apply custom styles
*/
wrapperClass?: HTMLAttributes["class"];
/**
* Optional CSS class name to apply custom styles to content
*/
contentClass?: HTMLAttributes["class"];
/**
* Whether to reverse the animation direction
* @default false
*/
reverse?: boolean;
/**
* Whether to pause the animation on hover
* @default false
*/
pauseOnHover?: boolean;
/**
* Whether to animate vertically instead of horizontally
* @default false
*/
vertical?: boolean;
/**
* Number of times to repeat the content
* @default 4
*/
repeat?: number;
};
export const marqueeStyles = tv({
slots: {
wrapper: "group flex [gap:var(--gap)] overflow-hidden p-2 [--duration:40s] [--gap:1rem]",
content: "flex shrink-0 justify-around [gap:var(--gap)]",
},
variants: {
vertical: {
true: {
wrapper: "flex-col",
content: "animate-marquee-vertical flex-col",
},
false: {
wrapper: "flex-row",
content: "animate-marquee flex-row",
},
},
pauseOnHover: {
true: {
content: "group-hover:[animation-play-state:paused]",
},
},
reverse: {
true: {
content: "[animation-direction:reverse]",
},
},
},
});
</script>
<script lang="ts" setup>
const props = withDefaults(defineProps<MarqueeProps>(), {
reverse: false,
pauseOnHover: false,
vertical: false,
repeat: 4,
});
</script>
Add CSS for Animation
Paste the following CSS into your tailwind.css
file
@theme inline {
--animate-marquee: marquee var(--duration) infinite linear;
--animate-marquee-vertical: marquee-vertical var(--duration) linear infinite;
@keyframes marquee {
from {
transform: translateX(0);
}
to {
transform: translateX(calc(-100% - var(--gap)));
}
}
@keyframes marquee-vertical {
from {
transform: translateY(0);
}
to {
transform: translateY(calc(-100% - var(--gap)));
}
}
}
Usage
Vertical
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
3D
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.
ericka_hills
Ipsam capillus dignissimos nisi socius subseco.

frida34
Adsum theca baiulus sortitus turba facilis solio celer.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

allison52
Anser cotidie error vaco accusamus denuo autem.

missouri88
Commodi umbra sopor vilitas vae adfero quasi.

jeremy31
Vulgus sollers templum coadunatio varietas territo thorax circumvenio.