30 CSS Hero Sections

Kinetic Type Hero

Rave-poster kinetic typography — letters rotate, scale, and float individually using per-letter delay. Acid green and magenta on pure black with strobe-like accents.

Pure CSS MIT licensed
Live Demo Open in tab
Open in playground

The code

<section class="hs-knt" aria-label="Hero">
  <div class="hs-knt-pulse" aria-hidden="true"></div>
  <h2 class="hs-knt-h">
    <span style="--i: 0">F</span><span style="--i: 1">U</span><span style="--i: 2">L</span
    ><span style="--i: 3">L</span>
    <span class="hs-knt-gap"></span>
    <span style="--i: 4">B</span><span style="--i: 5">A</span><span style="--i: 6">S</span
    ><span style="--i: 7">S</span>
    <span class="hs-knt-gap"></span>
    <em
      ><span style="--i: 8">M</span><span style="--i: 9">O</span><span style="--i: 10">D</span
      ><span style="--i: 11">E</span></em
    >
  </h2>
  <p class="hs-knt-p">
    A booking app for warehouse parties. The line is the door, not the website.
  </p>
  <a class="hs-knt-cta" href="#tickets">Get tickets ⚡</a>
</section>
.hs-knt {
  position: relative;
  display: grid; place-items: center;
  width: 100%; min-height: 480px;
  padding: clamp(28px, 5vw, 64px) clamp(20px, 5vw, 56px);
  background: #0a0a0a;
  font-family: 'Inter', system-ui, sans-serif;
  color: #fff;
  box-sizing: border-box;
  overflow: hidden;
  text-align: center;
}
.hs-knt-pulse {
  position: absolute; inset: 0;
  background:
    radial-gradient(60% 50% at 30% 30%, rgba(196,255,82,0.18), transparent 60%),
    radial-gradient(50% 50% at 80% 70%, rgba(238,82,206,0.20), transparent 60%);
  animation: hs-knt-pulse 2.4s ease-in-out infinite alternate;
}
@keyframes hs-knt-pulse {
  from { opacity: 0.6; }
  to   { opacity: 1; }
}
.hs-knt-h {
  position: relative; z-index: 1;
  margin: 0 0 22px;
  font-family: 'Inter', sans-serif;
  font-size: clamp(48px, 9vw, 110px);
  font-weight: 900; letter-spacing: -0.04em; line-height: 0.92;
  text-transform: uppercase;
}
.hs-knt-h span {
  display: inline-block;
  animation: hs-knt-jitter 2s ease-in-out infinite;
  animation-delay: calc(var(--i, 0) * 0.06s);
}
.hs-knt-h em { color: #ee52ce; font-style: italic; }
.hs-knt-h em span { color: #ee52ce; }
.hs-knt-h > span:nth-child(-n+4) { color: #c4ff52; }
.hs-knt-gap { display: inline-block; width: 0.4em; }
@keyframes hs-knt-jitter {
  0%, 100% { transform: translateY(0) rotate(0deg) scale(1); }
  25%      { transform: translateY(-8px) rotate(-2deg) scale(1.04); }
  50%      { transform: translateY(0) rotate(2deg) scale(0.98); }
  75%      { transform: translateY(6px) rotate(-1deg) scale(1.02); }
}
.hs-knt-p { position: relative; z-index: 1; margin: 0 auto 26px; font-size: 16px; color: #888; max-width: 440px; }
.hs-knt-cta {
  position: relative; z-index: 1;
  display: inline-block; padding: 14px 28px;
  background: #c4ff52; color: #0a0a0a;
  border-radius: 0; text-decoration: none;
  font-weight: 800; font-size: 14.5px; letter-spacing: 0.06em;
  text-transform: uppercase;
  box-shadow: 0 0 28px rgba(196,255,82,0.45);
  transition: background 0.15s, color 0.15s, box-shadow 0.15s;
}
.hs-knt-cta:hover {
  background: #ee52ce; color: #fff;
  box-shadow: 0 0 28px rgba(238,82,206,0.55);
}
@media (prefers-reduced-motion: reduce) {
  .hs-knt-h span, .hs-knt-pulse { animation: none; }
  .hs-knt-cta { transition: none; }
}

Search CodeFronts

Loading…