01 — Fill Effects

Sliding Fill

A hidden color layer waits off to the left. On hover, it slides across — the text color also switches so it reads against the new fill. Uses ::before + transform: translateX.

::before + translateX FILL
<a href="#" class="btn btn-slide">Hover me</a>
02 — Fill Effects

Liquid Fill Up

A darker layer rises from the bottom of the button like water filling a glass. The cubic-bezier easing gives it a subtle acceleration.

::before + top 100% → 0 FILL
<a href="#" class="btn btn-liquid">Fill me up</a>
03 — Fill Effects

Outline → Solid

A ghost/outline button that fills with a solid color on hover — the simplest and most reliable pattern. Works great as a secondary call-to-action.

background transition only FILL
<a href="#" class="btn btn-outline">Secondary</a>
04 — 3D / Depth

3D Press

A chunky button with a darker base underneath. Lifts up on hover, presses down on click — like a real key. Great for game UIs or playful brands.

box-shadow offset + translateY 3D
<a href="#" class="btn btn-press">Click me</a>
05 — 3D / Depth

3D Extrude

A flat button with a hard offset shadow — pure brutalist / neo-retro style. On hover it lifts up and left; on click it slides back into its shadow.

hard box-shadow offset + translate 3D
<a href="#" class="btn btn-extrude">Press here</a>
06 — 3D / Depth

Neumorphic

Soft "embossed" buttons that look like they're made of the same material as the background. Uses paired light and dark shadows. On hover, shadows invert inside the button, making it look pressed.

dual light + dark box-shadow 3D
<a href="#" class="btn btn-neu">Hover me</a>

<!-- Neumorphism needs a soft background (not pure white) -->
<body style="background:#e5e7eb">
07 — Text / Icon

Text Flip

Two text layers stacked on top of each other — the front one slides up and the back one slides in from below. Great for showing a primary label and an action ("Learn more" → "Go →").

two spans + translateY swap TEXT
<a href="#" class="btn btn-flip">
  <span class="txt front">Learn more</span>
  <span class="txt back">Let's go →</span>
</a>
08 — Text / Icon

Icon Slide

A hidden arrow icon reveals itself on hover, nudging the text apart. Uses max-width + opacity on the icon so the button width animates smoothly.

max-width animation + gap TEXT
<a href="#" class="btn btn-icon">
  Continue
  <span class="icn">→</span>
</a>
09 — Text / Icon

Underline Reveal

A minimal text-only button with an animated underline that draws in from the left. Perfect for quiet, text-forward designs.

::after + scaleX + transform-origin TEXT
<a href="#" class="btn btn-underline">Read the article</a>
10 — Shape / Gradient

Morph Shape

The border-radius property animates to different values on each corner, morphing the button from a rectangle into an organic blob.

animated border-radius corners SHAPE
<a href="#" class="btn btn-morph">Morph me</a>
11 — Shape / Gradient

Gradient Motion

A multi-stop gradient that's twice as wide as the button. On hover, it slides to reveal the other end. The second button uses a @keyframes loop so the gradient flows continuously.

background-size 200% + background-position GRADIENT
<a href="#" class="btn btn-grad">Hover for motion</a>
<a href="#" class="btn btn-grad-anim">Always animated</a>
12 — Shape / Gradient

Glass Morphism

A frosted-glass button that blurs whatever is behind it. Needs a colorful background to really show — backdrop-filter: blur() does the work. Blur increases and the button lifts slightly on hover.

backdrop-filter: blur + semi-transparent bg GLASS
<!-- Glass buttons need a colorful background to be visible -->
<div class="glass-bg">
  <a href="#" class="btn btn-glass">Hover me</a>
</div>