CSS Button Creator

Gel CSS button

Glossy aqua gel pill with a wet highlight. Hover, click and tab to it to see every state.

CSS

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

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .5em;
  padding: 14px 28px;
  font-family: 'Inter', sans-serif;
  font-size: 16px;
  font-weight: 700;
  line-height: 1.2;
  color: #ffffff;
  background: linear-gradient(180deg, #7dd3fc 0%, #0ea5e9 50%, #0369a1 100%);
  border: 1px solid rgba(3, 105, 161, .59999999999999997779553950749686919152736663818359375);
  border-radius: 999px;
  box-shadow: 0 6px 14px -4px rgba(3, 105, 161, .5500000000000000444089209850062616169452667236328125), inset 0 10px 8px -6px rgba(255, 255, 255, .5500000000000000444089209850062616169452667236328125), inset 0 -3px 6px 0 rgba(8, 47, 73, .34999999999999997779553950749686919152736663818359375);
  text-shadow: 0 1px 1px rgba(7, 89, 133, .6999999999999999555910790149937383830547332763671875);
  cursor: pointer;
  text-decoration: none;
  white-space: nowrap;
  -webkit-tap-highlight-color: transparent;
  transition: transform 120ms cubic-bezier(.2,.8,.2,1), box-shadow 120ms cubic-bezier(.2,.8,.2,1), filter 120ms cubic-bezier(.2,.8,.2,1);
}

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

.btn:hover {
  transform: translateY(-1px);
  filter: brightness(1.0800000000000000710542735760100185871124267578125);
  box-shadow: 0 7px 16px -4px rgba(3, 105, 161, .5500000000000000444089209850062616169452667236328125), inset 0 10px 8px -6px rgba(255, 255, 255, .5500000000000000444089209850062616169452667236328125), inset 0 -3px 6px 0 rgba(8, 47, 73, .34999999999999997779553950749686919152736663818359375);
}

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

.btn:active {
  transform: translateY(2px) scale(0.979999999999999982236431605997495353221893310546875);
  box-shadow: 0 4px 14px -4px rgba(3, 105, 161, .5500000000000000444089209850062616169452667236328125), inset 0 10px 8px -6px rgba(255, 255, 255, .5500000000000000444089209850062616169452667236328125), inset 0 -3px 6px 0 rgba(8, 47, 73, .34999999999999997779553950749686919152736663818359375);
  transition-duration: 60ms;
}

.btn:focus-visible {
  outline: 3px solid #7dd3fc;
  outline-offset: 3px;
}

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

HTML

<button class="btn" type="button">
  <span class="btn__icon" aria-hidden="true">⬇</span>
  Download
</button>

How this button is built

How to use it

  1. Copy the CSS into your stylesheet. The @import line loads the Inter 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.