Toggle navigation
在线编辑器
在线代码
文本比较
jQuery下载
前端库
在线手册
登录/注册
下载代码
html
css
js
分享到微信朋友圈
X
html
Submit
css
:root { --c-active: #275EFE; --c-active-inner: #FFFFFF; --c-default: #D2D6E9; --c-default-dark: #C7CBDF; --c-black: #1B1B22; } .radio, .checkbox, .switch { display: table; border-radius: var(--border-radius, 12px) var(--border-radius-corner, 12px) var(--border-radius, 12px) var(--border-radius, 12px); position: relative; } .radio input, .checkbox input, .switch input { -webkit-appearance: none; -moz-appearance: none; appearance: none; outline: none; border: none; background: var(--input-background, none); display: block; cursor: pointer; margin: 0; padding: 0; border-radius: inherit; width: var(--input-width, 24px); height: var(--input-height, 24px); } .radio svg, .checkbox svg, .switch svg { display: block; position: absolute; left: 0; right: 0; bottom: 0; top: 0; pointer-events: none; fill: var(--c-active-inner); -webkit-transform: scale(1.01) translateZ(0); transform: scale(1.01) translateZ(0); } .radio input, .checkbox input { --border-color: var(--c-default); --border-width: 2px; box-shadow: inset 0 0 0 var(--border-width) var(--border-color); } .radio input:checked, .checkbox input:checked { --border-color: var(--c-active); } .radio input:not(:checked), .checkbox input:not(:checked) { -webkit-transition: box-shadow .25s; transition: box-shadow .25s; } .radio input:not(:checked):hover, .checkbox input:not(:checked):hover { --border-width: 3px; --border-color: var(--c-active); } .radio input:checked { --border-width: 6.75px; } .radio input + svg { --top-y: 0; --dot-y: -17px; --drop-y: -14px; --top-s-x: 1.75; --top-s-y: 1; } .radio input + svg .top { -webkit-transform-origin: 12px -12px; transform-origin: 12px -12px; -webkit-transform: translateY(var(--top-y)) scale(var(--top-s-x), var(--top-s-y)) translateZ(0); transform: translateY(var(--top-y)) scale(var(--top-s-x), var(--top-s-y)) translateZ(0); } .radio input + svg .dot { -webkit-transform: translateY(var(--dot-y)) translateZ(0); transform: translateY(var(--dot-y)) translateZ(0); } .radio input + svg .drop { -webkit-transform: translateY(var(--drop-y)) translateZ(0); transform: translateY(var(--drop-y)) translateZ(0); } .checkbox { --border-radius: 5px; --border-radius-corner: 5px; } .checkbox input:checked { --border-width: 12px; } .checkbox input:checked + svg { --tick-offset: 46.5px; } .checkbox input + svg { --dot-x: 14px; --dot-y: -14px; --dot-s: 1; --tick-offset: 20.5px; --tick-array: 16.5px; --tick-s: 1; --drop-s: 1; } .checkbox input + svg .tick { fill: none; stroke-width: 3px; stroke-linecap: round; stroke-linejoin: round; stroke: var(--c-active-inner); stroke-dasharray: var(--tick-array) 33px; stroke-dashoffset: var(--tick-offset); -webkit-transform-origin: 10.5px 16px; transform-origin: 10.5px 16px; -webkit-transform: scale(var(--tick-s)) translateZ(0); transform: scale(var(--tick-s)) translateZ(0); } .checkbox input + svg .dot { -webkit-transform-origin: 10.5px 15.5px; transform-origin: 10.5px 15.5px; -webkit-transform: translate(var(--dot-x), var(--dot-y)) scale(var(--dot-s)) translateZ(0); transform: translate(var(--dot-x), var(--dot-y)) scale(var(--dot-s)) translateZ(0); } .checkbox input + svg .drop { -webkit-transform-origin: 25px -1px; transform-origin: 25px -1px; -webkit-transform: scale(var(--drop-s)) translateZ(0); transform: scale(var(--drop-s)) translateZ(0); } .switch { --input-width: 38px; } .switch input { --input-background: var(--c-default); } .switch input:checked { --input-background: var(--c-active); } .switch input:checked + svg { --default-s: 0; --default-x: 8px; --dot-s: 1; --dot-x: 0px; } .switch input + svg { --input-background: var(--c-default); --default-s: 1; --default-x: 0px; --dot-s: 0; --dot-x: -8px; } .switch .default { -webkit-transform-origin: 12px 12px; transform-origin: 12px 12px; -webkit-transform: translateX(var(--default-x)) scale(var(--default-s)) translateZ(0); transform: translateX(var(--default-x)) scale(var(--default-s)) translateZ(0); } .switch .dot { -webkit-transform-origin: 26px 12px; transform-origin: 26px 12px; -webkit-transform: translateX(var(--dot-x)) scale(var(--dot-s)) translateZ(0); transform: translateX(var(--dot-x)) scale(var(--dot-s)) translateZ(0); } .btn { -webkit-appearance: none; -moz-appearance: none; appearance: none; border: none; position: relative; background: var(--c-black); color: #fff; outline: none; cursor: pointer; font-size: 14px; line-height: 21px; font-weight: 600; display: block; width: 132px; text-align: center; border-radius: 7px; margin: 0 auto; padding: 12px 0; } .btn span { position: relative; z-index: 1; } .btn svg { display: block; width: 100%; height: 100%; position: absolute; left: 0; top: 0; fill: var(--c-active); } .btn svg circle { -webkit-transition: -webkit-transform var(--duration, 0.25s) ease-out; transition: -webkit-transform var(--duration, 0.25s) ease-out; transition: transform var(--duration, 0.25s) ease-out; transition: transform var(--duration, 0.25s) ease-out, -webkit-transform var(--duration, 0.25s) ease-out; } .btn svg circle.top-left { -webkit-transform: translate(var(--spacing, -16px), var(--spacing, -40px)); transform: translate(var(--spacing, -16px), var(--spacing, -40px)); } .btn svg circle.middle-bottom { -webkit-transform: translate(var(--spacing, 8px), var(--spacing, 40px)); transform: translate(var(--spacing, 8px), var(--spacing, 40px)); } .btn svg circle.top-right { -webkit-transform: translate(var(--spacing, 40px), var(--spacing, -40px)); transform: translate(var(--spacing, 40px), var(--spacing, -40px)); } .btn svg circle.right-bottom { -webkit-transform: translate(var(--spacing, 4px), var(--spacing, 40px)); transform: translate(var(--spacing, 4px), var(--spacing, 40px)); } .btn svg circle.left-bottom { -webkit-transform: translate(var(--spacing, -40px), var(--spacing, 40px)); transform: translate(var(--spacing, -40px), var(--spacing, 40px)); } .btn:hover { --spacing: 0; --duration: .45s; } .grid { display: grid; grid-gap: 24px 32px; grid-template-columns: repeat(3, auto); grid-template-rows: repeat(3, auto); grid-auto-flow: column; } .grid .last { grid-column: 1 / 4; grid-row: 3; } html { box-sizing: border-box; -webkit-font-smoothing: antialiased; } * { box-sizing: inherit; } *:before, *:after { box-sizing: inherit; } body { min-height: 100vh; display: -webkit-box; display: flex; font-family: 'Poppins', Arial; -webkit-box-pack: center; justify-content: center; -webkit-box-align: center; align-items: center; background: #fff; }
JavaScript
const { to, set, from, fromTo } = gsap const getVar = (key, elem = document.documentElement) => getComputedStyle(elem).getPropertyValue(key) document.querySelectorAll('.radio').forEach(elem => { let svg = elem.querySelector('svg'), input = elem.querySelector('input') input.addEventListener('change', e => { fromTo(input, { '--border-width': '3px' }, { '--border-color': getVar('--c-active'), '--border-width': '12px', duration: .2 }) to(svg, { keyframes: [{ '--top-y': '6px', '--top-s-x': 1, '--top-s-y': 1.25, duration: .2, delay: .2 }, { '--top-y': '0px', '--top-s-x': 1.75, '--top-s-y': 1, duration: .6 }] }) to(svg, { keyframes: [{ '--dot-y': '2px', duration: .3, delay: .2 }, { '--dot-y': '0px', duration: .3 }] }) to(svg, { '--drop-y': '0px', duration: .6, delay: .4, clearProps: true, onComplete() { input.removeAttribute('style') } }) }) }) document.querySelectorAll('.checkbox').forEach(elem => { let svg = elem.querySelector('svg'), input = elem.querySelector('input') input.addEventListener('change', e => { let checked = input.checked if(!checked) { return } fromTo(input, { '--border-width': '3px' }, { '--border-color': getVar('--c-active'), '--border-width': '12px', duration: .2, clearProps: true }) set(svg, { '--dot-x': '14px', '--dot-y': '-14px', '--tick-offset': '20.5px', '--tick-array': '16.5px', '--drop-s': 1 }) to(elem, { keyframes: [{ '--border-radius-corner': '14px', duration: .2, delay: .2 }, { '--border-radius-corner': '5px', duration: .3, clearProps: true }] }) to(svg, { '--dot-x': '0px', '--dot-y': '0px', '--dot-s': 1, duration: .4, delay: .4 }) to(svg, { keyframes: [{ '--tick-offset': '48px', '--tick-array': '14px', duration: .3, delay: .2 }, { '--tick-offset': '46.5px', '--tick-array': '16.5px', duration: .35, clearProps: true }] }) }) }) document.querySelectorAll('.switch').forEach(elem => { let svg = elem.querySelector('svg'), input = elem.querySelector('input') input.addEventListener('pointerenter', e => { if(elem.animated || input.checked) { return } to(input, { '--input-background': getVar('--c-default-dark'), duration: .2 }) }) input.addEventListener('pointerleave', e => { if(elem.animated || input.checked) { return } to(input, { '--input-background': getVar('--c-default'), duration: .2 }) }) input.addEventListener('change', e => { let checked = input.checked let hide = checked ? 'default' : 'dot', show = checked ? 'dot' : 'default' fromTo(svg, { '--default-s': checked ? 1 : 0, '--default-x': checked ? '0px' : '8px', '--dot-s': checked ? 0 : 1, '--dot-x': checked ? '-8px' : '0px' }, { ['--' + hide + '-s']: 0, ['--' + hide + '-x']: checked ? '8px' : '-8px', duration: .25, delay: .15 }) fromTo(input, { '--input-background': getVar(checked ? '--c-default' : '--c-active'), }, { '--input-background': getVar(checked ? '--c-active' : '--c-default'), duration: .35, clearProps: true }) to(svg, { keyframes: [{ ['--' + show + '-x']: checked ? '2px' : '-2px', ['--' + show + '-s']: 1, duration: .25 }, { ['--' + show + '-x']: '0px', duration: .2, clearProps: true }] }) }) })
粒子
时间
文字
hover
canvas
3d
游戏
音乐
火焰
水波
轮播图
鼠标跟随
动画
css
加载动画
导航
菜单
按钮
滑块
tab
弹出层
统计图
svg
×
Close
在线代码下载提示
开通在线代码永久免费下载,需支付20jQ币
开通后,在线代码模块中所有代码可终身免费下!
您已开通在线代码永久免费下载,关闭提示框后,点下载代码可直接下载!
您已经开通过在线代码永久免费下载
对不起,您的jQ币不足!可通过发布资源 或
直接充值获取jQ币
取消
开通下载
<!doctype html> <html> <head> <meta charset="utf-8"> <title>液体UI元素-jq22.com</title> <script src="https://www.jq22.com/jquery/jquery-1.10.2.js"></script> <style>
</style> </head> <body>
<script>
</script>
</body> </html>
2012-2021 jQuery插件库版权所有
jquery插件
|
jq22工具库
|
网页技术
|
广告合作
|
在线反馈
|
版权声明
沪ICP备13043785号-1
浙公网安备 33041102000314号