20 CSS Link Hover Effect Designs

A CSS link hover effect is the motion or underline animation that fires when a pointer enters an anchor. These 20 hand-coded effects are ready-to-ship link styles for navigation menus, in-body text, and footers — copy the CSS, attach to your existing anchors, and ship.

20 unique effects 100% copy-paste ready Published
01 / 20
Squiggly Underline
Pure CSS
Squiggly Underline — preview
Hand-drawn-look squiggly SVG underline that draws in beneath the link on hover via stroke-dasharray.
Best fornavigation, blog headers, and personality-forward sites.
02 / 20
Tilde Morph
Pure CSS
Tilde Morph — preview
A straight underline morphs into a tilde-style wave on hover via background-image swap.
03 / 20
Dotted Focus Ring
Pure CSS
Dotted Focus Ring — preview
A dotted box outline appears around the link on hover, paired with a blinking trailing caret.
04 / 20
Encircled
Pure CSS
Encircled — preview
An SVG ellipse strokes itself around the linked text on hover via stroke-dasharray — a pen circling a phrase.
05 / 20
Chevron Companion
Pure CSS
Chevron Companion — preview
On hover the underline retracts from right-to-left while a chevron arrow "draws in" via stroke-dasharray with a spring overshoot.
06 / 20
Cursor Blink Underline
Pure CSS
Cursor Blink Underline — preview
Link text stays solid; only a CLI-style cursor caret bar underneath blinks at the exact 60bpm cadence terminals use.
07 / 20
Neon Sign Flicker
Pure CSS
Neon Sign Flicker — preview
On hover the link flickers like a faulty neon sign powering on — irregular opacity stutters via non-uniform steps() keyframes for ~1 second, then settles into a steady glow.
08 / 20
Heartbeat Pulse
Pure CSS
Heartbeat Pulse — preview
A leading dot pulses with a real medical-grade heartbeat rhythm — lub-DUB-pause-lub-DUB-pause via a multi-keyframe @keyframes.
09 / 20
Reveal Sweep
Pure CSS
Reveal Sweep — preview
A thin gradient line sweeps across the link from left to right on hover, then settles as a permanent underline.
10 / 20
Letter Push
Pure CSS
Letter Push — preview
Each letter shifts down 2px on hover with a tiny per-letter stagger via :nth-child — a wave that ripples through the word.
11 / 20
Marker Highlighter
Pure CSS
Marker Highlighter — preview
A pale highlight expands from 0% to 100% width behind the text on hover, with a hand-drawn-look SVG fill.
12 / 20
Background Slide
Pure CSS
Background Slide — preview
A solid colour slides up from below the baseline, covering the link as the text colour inverts via mix-blend-mode: difference.
Advertisement
13 / 20
Crosshair Brackets
Pure CSS
Crosshair Brackets — preview
Mono [ and ] brackets appear on either side of the link on hover, drawing in via a tiny scale-overshoot.
14 / 20
Glitch Split
Pure CSS
Glitch Split — preview
RGB-channel split shudders across the text on hover (cyan + magenta offsets via text-shadow), reading as video corruption.
15 / 20
Ink Bleed Underline
Pure CSS
Ink Bleed Underline — preview
Hand-drawn-look SVG underline that strokes in from left to right on hover via stroke-dasharray.
16 / 20
Magnetic Pull
Pure CSS
Magnetic Pull — preview
Link text drifts horizontally as if magnetically pulled, while a thin underline draws in beneath.
17 / 20
Caret Companion
Pure CSS
Caret Companion — preview
A blinking terminal cursor ▌ appears at the end of the link on hover, with a thin underline drawing in.
18 / 20
Brutalist Block
Pure CSS
Brutalist Block — preview
Link fills with hot-pink background and gains an offset shadow on hover; click presses it down into the shadow.
19 / 20
3D Flip Reveal
Pure CSS
3D Flip Reveal — preview
Link face flips 180° on the Y axis on hover, revealing a different call-to-action on the back.
20 / 20
Type-On Reveal
Pure CSS
Type-On Reveal — preview
Link text appears empty until hover; on hover it types itself character-by-character via a steps() animation with a blinking caret.
FAQ

Frequently asked questions

How do I create a CSS link hover effect?
The minimum is a real <a> element with a class, and a transition declared on the property you want to animate (color, border-color, transform, opacity). Then use a:hover, a:focus-visible to define the end state. Most animated effects in this gallery use a ::before or ::after pseudo-element absolutely positioned beneath the text, animated via transform/scale/width on hover.
Should I use :hover or :focus-visible for link effects?
Both — always together. :hover handles mouse users; :focus-visible handles keyboard users and screen readers. If you only style :hover, your link is invisible to keyboard navigation. Every demo in this gallery declares both pseudo-classes on the same rule so the effect fires for all input methods.
Are these CSS link effects accessible?
Yes. Each demo uses a real <a> element with proper :focus-visible states, sufficient colour contrast (4.5:1 minimum), and text that's readable both before and after the effect runs. Continuous animations (glitch, blinking caret, dotted-ring caret, cursor-blink, heartbeat, type-on) honour the prefers-reduced-motion media query — animations stop and end-states are shown immediately for users who request reduced motion.
Aren't blinking links bad for accessibility?
Blinking text content can be — that's why these blink demos are designed to be safe. The cursor-blink puts the blink on a small underline bar, not the readable text. The neon flicker is a finite ~1 second event on hover, not a perpetual flash. The heartbeat pulses a small leading dot, not the link itself. All three honour prefers-reduced-motion and stay well under WCAG's 3-flashes-per-second threshold.
Do these link effects work on touch devices?
On touch devices the :hover state fires briefly on tap before the page navigates, so users see a flash of the effect. For touch-first patterns prefer effects that complete quickly (under 300ms) or use :focus-visible-only effects that require deliberate keyboard focus. The brutalist-block, 3D flip, chevron-companion, neon-sign flicker, and type-on reveal effects work especially well on touch because they're tied to a CTA, not just decoration.
Can I use these effects in any framework?
Yes. Each demo is plain HTML and CSS (no JavaScript) with no dependencies. Drop the markup into React (with className), Vue, Svelte, Astro or static HTML — the styles work as-is. MIT licensed.

Related collections

15 CSS Background Animations preview

15 CSS Background Animations

15

15 hand-coded CSS background animations with live demos — infinite shifting gradient, floating particle bubbles, parallax starry night, clickable cyberpunk ripple, sliding geometric grid, SVG wave overlays, glassmorphism orbs, aurora borealis ribbons, matrix digital rain, mesh gradient blobs, falling snow, morphing blob, retro synthwave 3D grid, infinite scrolling diagonal marquee, comic-book halftone dots. 100% Pure CSS, no JavaScript, no canvas, no particles.js. prefers-reduced-motion respected, scoped class names, MIT-licensed.

css background animation animated gradient background css css floating particles Responsive
27 CSS Button Hover Effects preview

27 CSS Button Hover Effects

27

27 hand-coded CSS button hover effects — 3D press, neon glow, gradient slide, border draw, liquid fill, ripple, glitch text, and kinetic flips. Every demo is pure CSS (no JavaScript, no framework), tuned for 60fps with transform and opacity, and respects prefers-reduced-motion out of the box.

css buttons button hover button hover effects Responsive
33 CSS Card Hover Effects preview

33 CSS Card Hover Effects

33

33 hand-coded CSS card hover effects with live demos — multi-axis 3D tilt with parallax, glowing gradient glassmorphic border, image zoom with content slide-up, front-to-back 3D flip, sibling de-emphasis with :has(), minimalist elevation, plus 27 more (elastic lift, conic-gradient border, holographic foil, neon sign, glitch RGB split, magnetic float, blueprint reveal, aurora drift and more). 26 pure CSS + 7 with a small vanilla JS snippet for cursor tracking. prefers-reduced-motion respected, scoped class names, MIT-licensed.

css card hover effect css card hover animation card hover effect pure css Responsive

Search CodeFronts

Loading…