Skip to content

Quote Marquee

A copy-paste quotes & testimonials component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.

Quotes & TestimonialsHTMLCSSany framework
Best in class — Lina K.Saved us 12 hours/week — Devin O.Just works. — Aki M.Felt like cheating. — Sara P.Worth every penny. — Noah F.Best in class — Lina K.Saved us 12 hours/week — Devin O.Just works. — Aki M.Felt like cheating. — Sara P.Worth every penny. — Noah F.

Copy into your project

HTML
<div class="nuda-quote-marquee" aria-label="Customer quotes">
  <div class="nuda-quote-marquee__track">
    <span class="nuda-quote-marquee__item">Best in class — Lina K.</span>
    <span class="nuda-quote-marquee__item">Saved us 12 hours/week — Devin O.</span>
    <span class="nuda-quote-marquee__item">Just works. — Aki M.</span>
    <span class="nuda-quote-marquee__item">Felt like cheating. — Sara P.</span>
    <span class="nuda-quote-marquee__item">Worth every penny. — Noah F.</span>
    <!-- Duplicate the same items once more for a seamless loop -->
  </div>
</div>
CSS
/* Quote Marquee
   Infinite horizontal scroll of short testimonials.
   Duplicate the content once in the markup so the loop is seamless. */

.nuda-quote-marquee {
  max-width: 480px;
  overflow: hidden;
  padding: 1rem 0;
  background: #0c0c10;
  border: 1px solid rgba(255, 255, 255, 0.08);
  border-radius: 12px;
  mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent);
  font-family: ui-sans-serif, system-ui, sans-serif;
}

.nuda-quote-marquee__track {
  display: flex;
  gap: 2.5rem;
  width: max-content;
  animation: nuda-quote-marquee 24s linear infinite;
}

.nuda-quote-marquee__item {
  font-size: 0.875rem;
  color: #a0a0a8;
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}

.nuda-quote-marquee__item::before {
  content: "";
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: #e4ff54;
  flex-shrink: 0;
}

@keyframes nuda-quote-marquee {
  to { transform: translateX(-50%); }
}

.nuda-quote-marquee:hover .nuda-quote-marquee__track {
  animation-play-state: paused;
}

@media (prefers-reduced-motion: reduce) {
  .nuda-quote-marquee__track { animation: none; }
}

How to use Quote Marquee

Paste the HTML where you need it and the CSS into a global stylesheet (or a <style> tag). Every class is prefixed nuda- so it never collides with Tailwind or your own styles. Tweak the CSS custom properties to match your design system.

Works in React, Vue, Svelte, Astro, Next.js, Nuxt, Laravel Blade, Django, Rails — or a single .html file. No npm install, no build step.

More quotes & testimonials components

← Browse all NudaUI components