css+div实现大转盘时间线点击切换效果代码
代码语言:html
所属分类:布局界面
代码描述:css+div实现大转盘时间线点击切换效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> /* Hide radio buttons */ input[type="radio"] { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } .cards-container { --base-rotation: 0deg; --full-circle: 360deg; --radius: 40vw; --duration: 200ms; --cards-container-size: calc(var(--radius) * 2); --cards-container-padding: 2rem; --border-color: transparent; --label-offset: calc(var(--radius) * -1 - 1rem); --label-size: 30px; --label-color: #666; --label-color-hover: steelblue; --label-line-h: 0; --label-line-h-current: 2rem; --label-dot-size: 10px; --title-top: 1.5rem; --title-offset-y: 30px; --info-top: 5rem; --info-width: 80%; --info-offset-y: 30px; box-sizing: content-box; position: fixed; inset: 0; margin: auto; width: var(--cards-container-size); height: var(--cards-container-size); padding: var(--cards-container-padding); clip-path: polygon(0 0, 100% 0, 100% 50%, 0 50%); } @media (min-width: 800px) { .cards-container { --radius: 30vw; --label-size: 40px; --label-dot-size: 15px; --label-line-h-current: 4rem; --title-top: 4rem; --info-top: 8rem; } } @media (min-width: 1200px) { .cards-container { --label-size: 50px; --border-color: var(--label-color); --info-width: min(100% - 2rem, 65%); } } .cards { position: absolute; inset: var(--cards-container-padding); aspect-ratio: 1; border-radius: 50%; border: 1px solid var(--border-color); transition: transform 0.3s ease-in-out var(--duration); list-style: none; } .cards li { position: absolute; inset: 0; margin: 0; padding: 0; transform-origin:center; display: grid; place-content: center; transform: rotate(calc(var(--i) * 360deg / var(--items))); pointer-events: none; } .cards li > label { position: absolute; inset: 0; margin: auto; transform: translateY(var(--label-offset)); width: var(--label-size); height: var(--label-size); cursor: pointer; pointer-events: initial; text-align: center; color: var(--label-color); transition: var(--duration) ease-in-out; } .cards li > label::before{ content: ''; position: absolute; top: var(--cards-container-padding); left: 50%; translate: -50% 0; width: var(--label-dot-size); height: var(--label-dot-size); aspect-ratio: 50%; border-radius: 50%; background-color: var(--label-color); transition: background-color var(--duration) ease-in-out; } .cards li > label::after { content: ''; position: absolute; top: 100%; left: 50%; translate: -50% 5px; width: 2px; height: var(--label-line-h); background-color: steelblue; transition: height 300ms ease-in-out var(--label-line-delay,0ms); } .cards li > label:hover{ --label-color: var(--label-color-hover); } .cards > li > h2, .cards > li > p{ position: absolute; left: 50%; text-align: center; transform: translate(-50%, 0); transform-origin: center; } .cards > li > h2{ top: var(--title-top); opacity: var(--title-opacity,0); translate: 0 var(--title-offset-y); transition: var(--duration) ease-in-out var(--title-delay,0ms); } .cards > li > p{ top: var(--info-top); margin: 0 auto; width: var(--info-width); z-index: 2; font-size: clamp(.8rem, 2.5vw + 0.05rem, .9rem); text-wrap: balance; opacity: var(--info-opacity,0); translate: 0 var( --info-offset-y); transition: var(--duration) ease-in-out var(--info-delay,0ms); } /* update custom properties for checked item */ li:has(input:checked){ --label-opacity: 1; --label-color: var(--label-color-hover); --label-line-h: var(--label-line-h-current); --label-line-delay: calc(var(--duration) * 2); --title-opacity: 1; .........完整代码请登录后点击上方下载按钮下载查看
网友评论0