div+css实现按钮悬浮发光动画效果代码
代码语言:html
所属分类:悬停
代码描述:div+css实现按钮悬浮发光动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum=1.0,minimum=1.0,user-scalable=0" />
<style>
body{
background: black;
padding: 100px;
}
.sparkle-button {
--active: 0;
--bg: radial-gradient(
40% 50% at center 100%,
hsl(270 calc(var(--active) * 97%) 72% / var(--active)),
transparent
),
radial-gradient(
80% 100% at center 120%,
hsl(260 calc(var(--active) * 97%) 70% / var(--active)),
transparent
),
hsl(260 calc(var(--active) * 97%) calc((var(--active) * 44%) + 12%));
background: var(--bg);
font-size: 1.2rem;
font-weight: 500;
border: 0;
cursor: pointer;
padding: 1em 1em;
display: flex;
align-items: center;
gap: 0.25em;
white-space: nowrap;
border-radius: 100px;
position: relative;
box-shadow: 0 0 calc(var(--active) * 3em) calc(var(--active) * 1em) hsl(260 97% 61% / 0.75),
0 0em 0 0 hsl(260 calc(var(--active) * 97%) calc((var(--active) * 50%) + 30%)) inset,
0 -0.05em 0 0 hsl(260 calc(var(--active) * 97%) calc(var(--active) * 60%)) inset;
transition: box-shadow var(--transition), scale var(--transition), background var(--transition);
scale: calc(1 + (var(--active) * 0.1));
transition: .3s;
}
.sparkle-button:active {
scale: 1;
transition: .3s;
}
.sparkle path {
color: hsl(0 0% calc((var(--active, 0) * 70%) + var(--base)));
transform-box: fill-box;
transform-origin: center;
fill: currentColor;
stroke: currentColor;
animation-delay: calc((var(--transition) * 1.5) + (var(--delay) * 1s));
animation-duration: 0.6s;
transition: color var(--transition);
}
.sparkle-button:is(:hover, :focus-visible) path {
animation-name: bounce;
}
@keyframes bounce {
35%, 65% {
scale: var(--scale);
}
}
.sparkle path:nth-of-type(1) {
--scale: 0.5;
--delay: 0.1;
--base: 40%;
}
.sparkle path:nth-of-type(2) {
--scale: 1.5;
--delay: 0.2;
--base: 20%;
}
.sparkle path:nth-of-type(3) {
--scale: 2.5;
--delay: 0.35;
--base: 30%;
}
.sparkle-button:before {
content: "";
position: absolute;
inset: -0.2em;
z-index: -1;
border: 0.25em solid hsl(260 97% 50% / 0.5);
border-radius: 100px;
opacity: var(--active, 0);
transition: opacity var(--transition);
}
.spark {
position: absolute;
inset: 0;
border-radius: 100px;
rotate: 0deg;
overflow: hidden;
mask: linear-gradient(white, transparent 50%);
animation: flip calc(var(--spark) * 2) infinite steps(2, end);
}
@keyframes flip {
to {
rotate: 360deg;
}
}
.spark:before {
content: "";
position: absolute;
width: 200%;
aspect-ratio: 1;
top: 0%;
left: 50%;
z-index: -1;
translate: -50% -15%;
rotate: 0;
transform: rotate(-90deg);
opacity: calc((var(--active)) + 0.4);
background: conic-gradient(
from 0deg,
transparent 0 340deg,
white 360deg
);
transition: opacity var(--transition);
animation: rotate var(--spark) linear infinite both;
}
.spark:after {
content: "";
position: absolute;
inset: var(--cut);
border-radius: 100px;
}
.backdrop {
position: absolute;
inset: var(--cut);
background: var(--bg);
border-radius: 100px;
transition: background var(--transition);
}
@keyframes rotate {
to {
transform: rotate(90deg);
}
}
@supports(selector(:has(:is(+ *)))) {
body:has(button:is(:hover, :focus-visible)) {
--active: 1;
--play-state: running;
}
.bodydrop {
display: none;
}
}
.sparkle-button:is(:hover, :focus-visible) ~ :is(.bodydrop, .particle-pen) {
--active: 1;
--play-state: runnin;
}
.sparkle-button:is(:hover, :focus-visible) {
--active: 1;
--play-s.........完整代码请登录后点击上方下载按钮下载查看
网友评论0