CSS Button Creator

Cosmic CSS button

Slow-flowing midnight nebula gradient with a glow. Hover, click and tab to it to see every state.

Customize this button →

CSS

@import url('https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700;800&display=swap');

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .5em;
  padding: 14px 34px;
  font-family: 'Sora', sans-serif;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.2;
  color: #ffffff;
  background: linear-gradient(90deg, #0f0c29 0%, #6d28d9 33%, #302b63 67%, #db2777 100%);
  background-size: 200% 200%;
  border: 1px solid rgba(196, 181, 253, .34999999999999997779553950749686919152736663818359375);
  border-radius: 14px;
  box-shadow: 0 0 28px 0 rgba(124, 58, 237, .5500000000000000444089209850062616169452667236328125);
  position: relative;
  overflow: hidden;
  isolation: isolate;
  cursor: pointer;
  text-decoration: none;
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
  transition: transform 200ms cubic-bezier(.2,.8,.2,1), box-shadow 200ms cubic-bezier(.2,.8,.2,1), filter 200ms cubic-bezier(.2,.8,.2,1);
  animation: btn-flow 4s ease-in-out infinite alternate;
}

.btn__icon {
  display: inline-block;
  transition: transform 200ms cubic-bezier(.2,.8,.2,1);
}

.btn::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(110deg, transparent 35%, rgba(255, 255, 255, .45) 50%, transparent 65%);
  transform: translateX(-120%);
  transition: transform .7s ease;
  pointer-events: none;
}

.btn:hover {
  transform: translateY(-2px) scale(1.0300000000000000266453525910037569701671600341796875);
  filter: brightness(1.0500000000000000444089209850062616169452667236328125);
  box-shadow: 0 2px 32px 0 rgba(124, 58, 237, .5500000000000000444089209850062616169452667236328125);
}

.btn:hover::after {
  transform: translateX(120%);
}

.btn:hover .btn__icon {
  transform: translateX(-3px);
}

.btn:active {
  transform: translateY(1px) scale(0.979999999999999982236431605997495353221893310546875);
  transition-duration: 100ms;
}

.btn:focus-visible {
  outline: 3px solid #0f0c29;
  outline-offset: 3px;
}

@keyframes btn-flow {
  from {
    background-position: 0% 50%;
  }
  to {
    background-position: 100% 50%;
  }
}

@media (prefers-reduced-motion: reduce) {
  .btn,
  .btn::after,
  .btn__icon {
    transition: none;
    animation: none;
  }
}

HTML

<button class="btn" type="button">
  <span class="btn__icon" aria-hidden="true">✦</span>
  Enter the void
</button>

How this button is built

How to use it

  1. Copy the CSS into your stylesheet. The @import line loads the Sora font from Google Fonts. Move it to the top of your file, or drop it if you already load the font.
  2. Paste the HTML where you want the button. It works on <button>, <a> and <input type="submit">.
  3. Change the label, or rename the .btn class if it clashes with your framework. Want a different colour or size? Open it in the editor, change it visually, and copy the new code.