Skip to content

Streamer Unfurl

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

Confetti & CelebrationHTMLCSSany framework

Copy into your project

HTML
<div class="nuda-cc2-streamer-unfurl" role="img" aria-label="Streamer ribbons unfurling from above">
  <span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:8%;  --c:#e4ff54; --d:0s"></span>
  <span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:22%; --c:#ff5db1; --d:.3s"></span>
  <span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:38%; --c:#5dd0ff; --d:.6s"></span>
  <span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:54%; --c:#fafafa; --d:.9s"></span>
  <span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:70%; --c:#e4ff54; --d:1.2s"></span>
  <span class="nuda-cc2-streamer-unfurl__strip" aria-hidden="true" style="left:86%; --c:#ff5db1; --d:1.5s"></span>
</div>
CSS
.nuda-cc2-streamer-unfurl {
  position: relative;
  width: 200px;
  height: 140px;
  background: #09090b;
  border: 1px solid rgba(255,255,255,.1);
  border-radius: 12px;
  overflow: hidden;
}

.nuda-cc2-streamer-unfurl__strip {
  position: absolute;
  top: 0;
  width: 8px;
  height: 76px;
  border-radius: 0 0 4px 4px;
  background: var(--c);
  transform-origin: top center;
  opacity: 0;
  will-change: transform,opacity;
  animation: _nuda-cc2streamerunfurl 4.5s ease-in-out var(--d) infinite;
}

@keyframes _nuda-cc2streamerunfurl {
  0% {
    opacity: 0;
    transform: scaleY(.05) rotate(0deg);
  }
  10% {
    opacity: 1;
  }
  24% {
    transform: scaleY(1.08) rotate(5deg);
  }
  34% {
    transform: scaleY(1) rotate(-3deg);
  }
  50% {
    transform: scaleY(1) rotate(2deg);
  }
  66% {
    transform: scaleY(1) rotate(-2deg);
  }
  84% {
    transform: scaleY(1) rotate(1deg);
    opacity: 1;
  }
  93% {
    opacity: .35;
    transform: scaleY(.5) rotate(0deg);
  }
  100% {
    opacity: 0;
    transform: scaleY(.05) rotate(0deg);
  }
}

@media (prefers-reduced-motion:reduce) {
  .nuda-cc2-streamer-unfurl__strip {
    animation: none;
    opacity: 1;
    transform: scaleY(1) rotate(0deg);
  }
}

How to use Streamer Unfurl

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 confetti & celebration components

← Browse all NudaUI components