gsap+svg实现可调参数的容量单选滑动动画效果代码
代码语言:html
所属分类:布局界面
代码描述:gsap+svg实现可调参数的容量单选滑动动画效果代码
代码标签: gsap svg 可调 参数 容量 单选 滑动 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <link rel="preconnect" href="https://fonts.googleapis.com" /> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> <link href="https://fonts.googleapis.com/css2?family=DM+Mono:ital,wght@0,300;0,400;0,500;1,300;1,400;1,500&display=swap" rel="stylesheet" /> <style> @layer normalize, base, prototype, anchor, hop, knockout; @layer knockout { .svg-mask { outline-offset: -2px; position: absolute; inset: 0; height: 100%; width: 100%; pointer-events: none; z-index: 2; translate: 0 100%; } [data-knockout='mask'][data-style='anchor'] fieldset:first-of-type > div { -webkit-mask: var(--svg-mask, initial); mask: var(--svg-mask, initial); } [data-knockout='none'] .mask-layer, [data-knockout='mask'] .mask-layer { display: none; } [data-knockout='filter'][data-style='anchor'] { .mask-layer { filter: url(#knockout-black); } @media (prefers-color-scheme: dark) { .mask-layer { filter: url(#knockout-white); } } } } @layer hop { [data-match='true'][data-style='hop'] { label::before { inset: unset; top: 0; left: 0; bottom: 0; width: max(var(--pill-width-current, 100%), var(--pill-width-previous, 100%)); } label:has(+ :not(:checked) ~ :checked)::before, label:has(+ [data-current-checked='true']):has(~ [data-previous-checked='true'])::before { right: 0; left: unset; } label:has(+ [data-previous-checked='true']) ~ label:has(+ [data-current-checked='true'])::before, label:has(+ [data-current-checked='true']) ~ label::before { left: 0; right: unset; } } [data-style='hop'] { label { position: relative; background: #0000; overflow: hidden; } label::before { content: ''; position: absolute; inset: 0; border-radius: 100px; z-index: -1; width: 100%; } label:hover { background: light-dark( color-mix(in srgb, canvasText, #0000 95%), color-mix(in srgb, canvasText, #fff0 75%) ); } /* the labels that precede a checked option */ label:has(+ :not(:checked) ~ :checked)::before { transform: translateX(100%); } /* the last checked that comes after the current checked */ label:has(+ [data-current-checked='true']) ~ label::before { transform: translateX(-100%); } label:has(+ [data-previous-checked='true'])::before, label:has(+ [data-current-checked='true'])::before { background: light-dark(#000, #fff); transition: transform calc(var(--duration, 0.2) * 1s) ease-out; } } [data-style='hop'][data-wrap='true'] { fieldset:first-of-type:has(:nth-of-type(3)) { label:has(+ [data-current-checked='true']):first-of-type ~ label:last-of-type::before { transform: translateX(100%); } label:not(:has(+ [data-current-checked='true'])):first-of-type:has( ~ input:last-of-type:checked )::before { transform: translateX(-100%); } } } } @layer anchor { @supports (not (anchor-name: --active)) { .fields { position: relative.........完整代码请登录后点击上方下载按钮下载查看
网友评论0