点击查看html编辑器说明文档

Toggle 花朵动画edit icon

|
|
Fork(复制)
|
|
作者:
穿越者X57

👉 新版编辑器已上线,点击进行体验吧!

BUG反馈
嵌入
设置
下载
HTML
格式化
支持Emmet,输入 p 后按 Tab键试试吧!
<head> ...
展开
</head>
<body>
            
            <input type="checkbox" role="switch" class="toggle" />
<input type="checkbox" role="switch" class="toggle" checked />
<input type="checkbox" role="switch" class="toggle indeterminate" />
<input type="checkbox" role="switch" class="toggle" disabled />
<input type="checkbox" role="switch" class="toggle" disabled checked />
        
</body>
CSS
格式化
            
            body {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  overflow: hidden;
  margin: 0;
  min-height: 100vh;
  font-size: 6vmin;
  gap: 0.25em;
}

@property --angle {
  syntax: '<angle>';
  initial-value: 20deg;
  inherits: true;
}

.toggle {
  --stem: #1a36;
  --flower: #fe0;
  --petal: #dad;
  --time: 0.4s;
  appearance: none;
  position: relative;
  font-size: 1em;
  box-sizing: content-box;
  height: 1em;
  width: 2.5em;
  border: max(1px, 0.05em) solid;
  border-radius: 2em;
  overflow: hidden;
  
  &::after {
    content: "";
    position: absolute;
    width: 0.7em;
    height: 0.7em;
    top: 50%;
    left: 0.5em;
    transform: translate(-50%, -50%);
    border-radius: 2em;
    border: 1px solid #0000;
    background: 
      radial-gradient(var(--flower) 0.15em, #0000 0),
      radial-gradient(circle at 50% 0.12em, var(--petal) 0.12em, #0000 0),
      radial-gradient(circle at 50% 0.58em, var(--petal) 0.12em, #0000 0),
      radial-gradient(circle at 0.12em 50%, var(--petal) 0.12em, #0000 0),
      radial-gradient(circle at 0.58em 50%, var(--petal) 0.12em, #0000 0),
      radial-gradient(circle at 0.18em 0.18em, var(--petal) 0.12em, #0000 0),
      radial-gradient(circle at 0.18em 0.52em, var(--petal) 0.12em, #0000 0),
      radial-gradient(circle at 0.52em 0.18em, var(--petal) 0.12em, #0000 0),
      radial-gradient(circle at 0.52em 0.52em, var(--petal) 0.12em, #0000 0);
    background-repeat: no-repeat;
    transition: left var(--time);
  }
  
  &::before {
    --angle: 20deg;
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background:
      /* stem */
      radial-gradient(farthest-side at 70% 100%, #0000 80%, var(--stem) 0 99%, #0000) 0.3em 100% / 0.4em 0.5em,
      radial-gradient(76% 45% at 50% 0%, #0000 70%, var(--stem) 0 99%, #0000) 0.7em 98% / 0.4em 0.5em,
      radial-gradient(73% 45% at 50% 100%, #0000 76%, var(--stem) 0 96%, #0000 0) 1.1em 0.06em / 0.6em 0.7em,
      radial-gradient(74% 35% at 50% 0%, #0000 65%, var(--stem) 0 96%, #0000 0) 1.7em 105% / 0.4em 0.5em,
      /* leaves */
      radial-gradient(50% 50% at 110% 50%, var(--stem) 99%, #0000) 0.85em 0.1em / 0.25em 0.5em,
      radial-gradient(50% 50% at -10% 50%, var(--stem) 99%, #0000) 1.08em 0.1em / 0.25em 0.5em,
      radial-gradient(50% 50% at 110% 50%, var(--stem) 99%, #0000) 1.5em 0.6em / 0.2em 0.35em,
      radial-gradient(50% 50% at -10% 50%, var(--stem) 99%, #0000) 1.69em 0.6em / 0.2em 0.35em;
    background-repeat: no-repeat;
    clip-path: polygon(0 0, 20% 0, 20% 100%, 0 100%);
    mask: conic-gradient(from -0.25turn at 50% 100%, red var(--angle), #0000 0);
    transition: clip-path var(--time), --angle var(--time);
  }
  
  &:checked {
    &::after {
      left: calc(100% - 0.5em);
    }
    
    &::before {
      --angle: 180deg;
      clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%);
      transition-duration: calc(var(--time) * 1.2)
    }
  }
  
  &:indeterminate {
    &::after {
      left: 50%;
    }
    &::before {
      --angle: 90deg;
      clip-path: polygon(0 0, 50% 0, 50% 100%, 0 100%);
    }
  }
  
  &[disabled] {
    opacity: 0.25;
  }
}

@media print {
  .toggle {
    &, &::before, &::after {
      -webkit-print-color-adjust: exact;
      print-color-adjust: exact;
    }
  }
}

@media (prefers-reduced-motion) {
  .toggle {
    &, &::before, &::after {
      transition: none !important;
      animation: none !important;
    }
  }
}
        
JS
格式化
            
            document.querySelector(".indeterminate").indeterminate = true;
        
预览
控制台