Marquee

An infinite scrolling component that can be used to display text, images, or videos.

Mikayla

verdie_roberts14

Arbor conspergo explicabo carmen cerno degero.
Trevion

leon66

Tremo tenetur aggero caterva argumentum comis.
Dayna

piper_funk45

Id abscido officiis denique trucido optio.
Mikayla

verdie_roberts14

Arbor conspergo explicabo carmen cerno degero.
Trevion

leon66

Tremo tenetur aggero caterva argumentum comis.
Dayna

piper_funk45

Id abscido officiis denique trucido optio.
Mikayla

verdie_roberts14

Arbor conspergo explicabo carmen cerno degero.
Trevion

leon66

Tremo tenetur aggero caterva argumentum comis.
Dayna

piper_funk45

Id abscido officiis denique trucido optio.
Mikayla

verdie_roberts14

Arbor conspergo explicabo carmen cerno degero.
Trevion

leon66

Tremo tenetur aggero caterva argumentum comis.
Dayna

piper_funk45

Id abscido officiis denique trucido optio.
Carissa

dale.schoen9

Ipsum vita talus alo sophismata coerceo demulceo perspiciatis.
Donnell

austyn.mitchell

Cicuta distinctio decretum cattus verbum dolorem.
Randi

gabriel.bartell3

Bellum ultra amaritudo currus tenuis brevis.
Bettie

jayme13

Vester turpis virtus sumptus casso alii subseco.
Carissa

dale.schoen9

Ipsum vita talus alo sophismata coerceo demulceo perspiciatis.
Donnell

austyn.mitchell

Cicuta distinctio decretum cattus verbum dolorem.
Randi

gabriel.bartell3

Bellum ultra amaritudo currus tenuis brevis.
Bettie

jayme13

Vester turpis virtus sumptus casso alii subseco.
Carissa

dale.schoen9

Ipsum vita talus alo sophismata coerceo demulceo perspiciatis.
Donnell

austyn.mitchell

Cicuta distinctio decretum cattus verbum dolorem.
Randi

gabriel.bartell3

Bellum ultra amaritudo currus tenuis brevis.
Bettie

jayme13

Vester turpis virtus sumptus casso alii subseco.
Carissa

dale.schoen9

Ipsum vita talus alo sophismata coerceo demulceo perspiciatis.
Donnell

austyn.mitchell

Cicuta distinctio decretum cattus verbum dolorem.
Randi

gabriel.bartell3

Bellum ultra amaritudo currus tenuis brevis.
Bettie

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

Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.

3D

Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Mark

ericka_hills

Ipsam capillus dignissimos nisi socius subseco.
Luis

frida34

Adsum theca baiulus sortitus turba facilis solio celer.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.
Conor

allison52

Anser cotidie error vaco accusamus denuo autem.
Diamond

missouri88

Commodi umbra sopor vilitas vae adfero quasi.
Malinda

jeremy31

Vulgus sollers templum coadunatio varietas territo thorax circumvenio.