Shockwave
Two concentric ring pulses expand outward from the card border on hover, like a shockwave ripple effect.
Shockwave the 23rd of 27 designs in the 27 CSS Card Hover Effects collection. The design is implemented in pure CSS — no JavaScript required. Copy the HTML and CSS panels below into your project. Because the demo is pure CSS, it works in any framework or templating engine you happen to use. The design honours prefers-reduced-motion and uses real semantic markup, so it ships accessibility-ready out of the box.
Live preview
The code
<div class="card-23"> <span class="card-23__tag">Pulse</span> <h4 class="card-23__title">Shockwave</h4> <p class="card-23__body">Two ripple rings expand outward on hover.</p> </div>
.card-23__tag {
font-family: monospace;
font-size: 10px;
padding: 2px 8px;
border-radius: 20px;
background: rgba(124, 108, 255, 0.15);
color: #7c6cff;
border: 1px solid rgba(124, 108, 255, 0.3);
display: inline-block;
margin-bottom: 10px;
}
.card-23__title {
font-size: 17px;
font-weight: 700;
color: #f0eeff;
margin-bottom: 6px;
}
.card-23__body {
font-size: 13px;
color: #b8b6d4;
line-height: 1.6;
}
.card-23 {
width: 100%;
max-width: 280px;
position: relative;
overflow: visible;
padding: 22px;
border-radius: 14px;
background: #17171f;
border: 1px solid rgba(255, 255, 255, 0.08);
cursor: pointer;
transition:
border-color 0.3s,
transform 0.3s;
}
.card-23:hover {
border-color: rgba(124, 108, 255, 0.5);
transform: scale(1.02);
}
.card-23::before,
.card-23::after {
content: "";
position: absolute;
inset: -8px;
border-radius: 20px;
border: 2px solid rgba(124, 108, 255, 0.55);
opacity: 0;
pointer-events: none;
}
.card-23:hover::before {
animation: card-23-a 0.7s cubic-bezier(0.2, 0.6, 0.4, 1) forwards;
}
.card-23:hover::after {
animation: card-23-b 0.7s cubic-bezier(0.2, 0.6, 0.4, 1) 0.18s forwards;
}
@keyframes card-23-a {
0% { transform: scale(1); opacity: 0.8; }
100% { transform: scale(1.18); opacity: 0; }
}
@keyframes card-23-b {
0% { transform: scale(1); opacity: 0.5; }
100% { transform: scale(1.32); opacity: 0; }
}