Skip to content

Flower Spinner

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

SpinnersHTMLCSSany framework

Copy into your project

HTML
<!-- Flower Spinner -->
<div class="nuda-flower-spinner" role="status" aria-label="Loading">
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
</div>
CSS
/* Flower Spinner
   Six petals appearing and disappearing in a circular pattern.
   Customize: --flower-color, --flower-petal-size */

.nuda-flower-spinner {
  --flower-color: #f472b6;
  --flower-petal-size: 10px;
  position: relative;
  width: 40px;
  height: 40px;
}

.nuda-flower-spinner span {
  position: absolute;
  width: var(--flower-petal-size);
  height: var(--flower-petal-size);
  background: var(--flower-color);
  border-radius: 50%;
  top: 50%;
  left: 50%;
  will-change: transform, opacity;
}

.nuda-flower-spinner span:nth-child(1) {
  animation: nuda-flower-petal-0 1.8s ease-in-out infinite 0s;
  transform: translate(-50%, -50%) rotate(0deg) translateY(-14px);
}
.nuda-flower-spinner span:nth-child(2) {
  animation: nuda-flower-petal-60 1.8s ease-in-out infinite 0.15s;
  transform: translate(-50%, -50%) rotate(60deg) translateY(-14px);
}
.nuda-flower-spinner span:nth-child(3) {
  animation: nuda-flower-petal-120 1.8s ease-in-out infinite 0.3s;
  transform: translate(-50%, -50%) rotate(120deg) translateY(-14px);
}
.nuda-flower-spinner span:nth-child(4) {
  animation: nuda-flower-petal-180 1.8s ease-in-out infinite 0.45s;
  transform: translate(-50%, -50%) rotate(180deg) translateY(-14px);
}
.nuda-flower-spinner span:nth-child(5) {
  animation: nuda-flower-petal-240 1.8s ease-in-out infinite 0.6s;
  transform: translate(-50%, -50%) rotate(240deg) translateY(-14px);
}
.nuda-flower-spinner span:nth-child(6) {
  animation: nuda-flower-petal-300 1.8s ease-in-out infinite 0.75s;
  transform: translate(-50%, -50%) rotate(300deg) translateY(-14px);
}

@keyframes nuda-flower-petal-0 {
  0%, 100% { transform: translate(-50%, -50%) rotate(0deg) translateY(-14px) scale(0); opacity: 0; }
  50%      { transform: translate(-50%, -50%) rotate(0deg) translateY(-14px) scale(1); opacity: 1; }
}
@keyframes nuda-flower-petal-60 {
  0%, 100% { transform: translate(-50%, -50%) rotate(60deg) translateY(-14px) scale(0); opacity: 0; }
  50%      { transform: translate(-50%, -50%) rotate(60deg) translateY(-14px) scale(1); opacity: 1; }
}
@keyframes nuda-flower-petal-120 {
  0%, 100% { transform: translate(-50%, -50%) rotate(120deg) translateY(-14px) scale(0); opacity: 0; }
  50%      { transform: translate(-50%, -50%) rotate(120deg) translateY(-14px) scale(1); opacity: 1; }
}
@keyframes nuda-flower-petal-180 {
  0%, 100% { transform: translate(-50%, -50%) rotate(180deg) translateY(-14px) scale(0); opacity: 0; }
  50%      { transform: translate(-50%, -50%) rotate(180deg) translateY(-14px) scale(1); opacity: 1; }
}
@keyframes nuda-flower-petal-240 {
  0%, 100% { transform: translate(-50%, -50%) rotate(240deg) translateY(-14px) scale(0); opacity: 0; }
  50%      { transform: translate(-50%, -50%) rotate(240deg) translateY(-14px) scale(1); opacity: 1; }
}
@keyframes nuda-flower-petal-300 {
  0%, 100% { transform: translate(-50%, -50%) rotate(300deg) translateY(-14px) scale(0); opacity: 0; }
  50%      { transform: translate(-50%, -50%) rotate(300deg) translateY(-14px) scale(1); opacity: 1; }
}

@media (prefers-reduced-motion: reduce) {
  .nuda-flower-spinner span {
    animation: none;
    opacity: 0.5;
  }
}

How to use Flower Spinner

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 spinners components

← Browse all NudaUI components