CSS BUTTON HOVER EFFECTS GENERATOR

Browse hover and press effects for buttons, preview live, and copy the CSS.

.button {
  font: inherit;
  cursor: pointer;
  padding: 0.75rem 1.5rem;
  border-radius: 6px;
}

.button {
  position: relative;
  overflow: hidden;
  z-index: 0;
  background: #201d19;
  color: #f2e9dc;
  border: 1px solid #ff6a35;
  transition: color 0.3s ease;
}

.button::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: #ff6a35;
  transform: translateX(-101%);
  transition: transform 0.35s ease;
}

.button:hover, .button.force {
  color: #201d19;
}

.button:hover::before, .button.force::before {
  transform: translateX(0);
}

How to use a button hover effect

  1. 1

    Hover (or press, for the ripple effect) each card in the gallery to preview the effect live.

  2. 2

    Turn on Force preview if you're on a touch device without hover.

  3. 3

    Pick an accent color for the button.

  4. 4

    Click a card to select that effect.

  5. 5

    Copy the CSS and HTML and apply the .button class to your button.

Questions

Do these effects need any JavaScript?
No. Every effect here is driven purely by :hover, :active, and a pseudo-element (::before/::after) with a CSS transition or keyframe animation — no click handlers or event listeners required.
Why does Ripple use :active instead of :hover?
A real ripple is meant to react to a press, not a passive hover, so the circle's width/height transition is triggered on :active. The gallery preview also listens to the .force class so you can see the expanded state without holding the mouse button down.
Can I combine two effects, like Lift and Shine?
Yes — the CSS for each effect only touches the .button rule and one pseudo-element, so you can usually merge two effects by combining their declarations (watch for both using the same ::before, in which case rename one to ::after).
Will the Fill effect work on a button that already has a background color?
Fill expects the button to start transparent with just a colored border, since it reveals the fill color via an inset box-shadow. If your button already has a background, switch background to transparent first or the fill won't be visible against it.
Does this tool store or upload anything?
No — every effect and color is generated and rendered locally in your browser. Nothing is sent to a server.