css+js实现可调节参数滑动式tab切换radio单选效果代码

代码语言:html

所属分类:选项卡

代码描述:css+js实现可调节参数滑动式tab切换radio单选效果代码

代码标签: css js 调节 参数 滑动式 tab 切换 radio 单选

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >
<head>
<style>
 

@layer normalize, base, demo;

@layer demo {
  :root {
    color-scheme: light only;
    --accent: hsl(0 0% 85%);
    --border-color: hsl(0 0% 70%);
    --radius: calc(var(--rad, 12) * 1px);
    --border-width: 1;
  }

  body {
    overflow: hidden;
  }

  .tabs {
    scale: 1.5;
  }

  .tabs ul {
    display: flex;
    list-style-type: none;
    padding: 0;
    margin: 0;
  }

  .tabs label {
    display: grid;
    place-items: center;
    width: 100px;
    height: 48px;
    cursor: pointer;
    font-weight: 300;
    letter-spacing: 0.875px;
  }

  .indicator {
    border: calc(var(--border-width) * 1px) solid var(--border-color);
    border-bottom-color: var(--accent);
  }
  .tabs::before {
    content: '';
    height: calc(var(--border-width) * 1px);
    z-index: -1;
    width: calc(100% + (2 * var(--radius)));
    left: calc(var(--radius) * -1);
    position: absolute;
    bottom: 0;
    background: var(--border-color);
    z-index: -4;
  }

  .tabs {
    position: absolute;
  }

  .indicator {
    position: absolute;
    height: 100%;
    width: 20%;
    background: var(--accent);
    z-index: -1;
    left: 0%;
    border-radius: var(--radius) var(--radius) 0 0;
  }

  .indicator__part,
  .indicator__debug {
    width: calc(var(--radius) * 2);
    aspect-ratio: 1;
    position: absolute;
    bottom: calc(var(--border-width) * -1px);
  }

  .indicator__part::before {
    content: '';
    box-sizing: border-box;
    position: absolute;
    inset: -1px;
    background: var(--accent);
    -webkit-mask: radial-gradient(
      circle at center,
      #0000 var(--radius),
      #000 var(--radius)
    );
            mask: radial-gradient(
      circle at center,
      #0000 var(--radius),
      #000 var(--radius)
    );
    -webkit-clip-path: inset(50% 50% 0 0);
            clip-path: inset(50% 50% 0 0);
  }

  .indicator__debug {
    display: none;
  }

  [data-debug='true'] .indicator__debug {
    display: block;
    outline: 2px dashed red;
    outline-offset: 2px;
    left: 100%;
    z-index: 10;
  }

  .tabs {
    transition: scale 0.2s;
  }

  [data-debug='true'] .tabs {
    scale: 5;
  }

  .indicator__debug::after {
    content: '';
    position: absolute;
    inset: 0;
    border: calc(var(--border-width) * 1px) solid red;
    border-bottom-color: var(--border-color);
    rotate: 45deg;
    border-radius: 50%;
  }

  [data-debug='true'] .indicator__part--right::before {
    background: red;
  }

  .indicator__part::after {
    content: '';
    box-sizing: border-box;
    position: absolute;
    inset: 0;
    border: calc(var(--border-width) * 1px) solid var(--border-color);
    border-radius: 50%;
    -webkit-clip-path: inset(50% 50% 0 0);
            clip-path: inset(50% 50% 0 0);
  }

  .indicator__part--left {
    right: 100%;
    scale: -1 1;
  }
  .indicator__part--right {
    left: 100%;
  }

  *,
  *:after,
  *:before {
    box-sizing: border-box;
  }

  body {
    display: grid;
    place-items: center;
    min-height: 100vh;
    font-family: 'SF Pro Text', 'SF Pro Icons', 'AOS Icons', 'Helvetica Neue',
      Helvetica, Arial, sans-serif, system-ui;
  }

  body::before {
    --size: 45px;
    --line: color-mix(in lch, canvasText, transparent 70%);
    content: '';
    height: 100vh;
    width: 100vw;
    position: fixed;
    background: linear-gradient(
          90deg,
          var(--line) 1px,
          transparent 1px var(--size)
        )
        50% 50% / var(--size) var(--size),
      linear-gradient(var(--line) 1px, transparent 1px var(--size)) 50% 50% /
        var(--size) var(--size);
    -webkit-mask: linear-gradient(-20deg, transparent 50%, white);
            mask: linear-gradient(-20deg, transparent 50%, white);
    top: 0;
    transform-style: flat;
    pointer-events: none;
    z-index: -1;
  }

  /* Utilities */
  .sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border-width: 0;
  }

  div.tp-dfwv {
    width: 280px;
  }

  .tab__indicator {
    position: absolute;
    height: 100%;
    width: 100%;
    container-type: inline-size;
    pointer-events: none;
    z-index: -1;
  }

  .indicator {
    translate: cal.........完整代码请登录后点击上方下载按钮下载查看

网友评论0