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