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

纯CSS绘制3D西瓜edit icon

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

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

BUG反馈
嵌入
设置
下载
HTML
格式化
支持Emmet,输入 p 后按 Tab键试试吧!
<head> ...
展开
</head>
<body>
            
            <label class="watermelon">
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <i></i>
  <div class="shadow"></div>
  <div class="slice"></div>
  <input type="checkbox" style="opacity: 0;" />
</label>
        
</body>
CSS
格式化
            
            body {
  position: relative;
  margin: 0;
  min-height: 100vh;
  perspective: 1000px;
}

@keyframes rotate {
  0% { transform: translate(-50%, -50%) rotateY(0deg)  }
  100% { transform: translate(-50%, -50%) rotateY(360deg)  }
}

.watermelon {
  font-size: 1vmin;
  position: absolute;
  width: 40em;
  aspect-ratio: 2;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) rotateY(-45deg);
  transform-style: preserve-3d;
  animation: rotate 4s linear infinite;

  .shadow {
    position: absolute;
    width: 80%;
    height: 60%;
    background: #0002;
    border-radius: 50%;
    top: 0;
    left: 10%;
    transform-origin: 50% 0;
    transform: rotateX(90deg) translateY(-50%) translateZ(-25em);
    filter: blur(3em)
  }

  .slice {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    transform-origin: 50% 0;
    transform: rotateY(90deg);
    border-radius: 50% / 0 0 100% 100%;
    transform-style: preserve-3d;
    background: 
      conic-gradient(at 50% 0, #0000 168.5deg, #0007 0, #0000 191.5deg, #0000 0),
      conic-gradient(at 50% 0, #0000 168.5deg, #582 0 191.5deg, #0000 0);
  }

  & i {
    --bg: radial-gradient(circle at 30% 30%, #000 0.7em, #0000 0.75em),
      radial-gradient(circle at 70% 50%, #000 2%, #0000 2.1%),
      radial-gradient(circle at 40% 70%, #000 2%, #0000 2.1%),
      radial-gradient(circle at 60% 15%, #000 2%, #0000 2.1%),
      radial-gradient(circle at 50% 50%, #000 3%, #0000 3.1%),
      radial-gradient(circle at 86% 20%, #000 2%, #0000 2.1%),
      radial-gradient(circle at 15% 10%, #000 2%, #0000 2.1%),
      radial-gradient(farthest-side at 50% 0, #e32 90%, #ffd 0 92%, #583 0);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    border-radius: 50% / 0 0 100% 100%;
    transform-origin: 50% 0;
    transform: rotate3d(1,0,0, var(--deg));
    transform-style: preserve-3d;
    background: var(--bg);
    box-shadow: inset 0 0 0 100vmax var(--shade);

    :has(input:checked) & {
      & {
        mask: 
          radial-gradient(circle at 35% 5%, #0000 8%, #000 0),
          radial-gradient(circle at 28% 3%, #0000 6%, #000 0),
          radial-gradient(circle at 40% 3%, #0000 5%, #000 0);
        mask-composite: intersect;
      }
    }

    &:nth-child(1)  { --deg: -12deg; --shade: #00000000; }
    &:nth-child(2)  { --deg: -10deg; --shade: #00000070; }
    &:nth-child(3)  { --deg:  -8deg; --shade: #00000068; }
    &:nth-child(4)  { --deg:  -6deg; --shade: #00000060; }
    &:nth-child(5)  { --deg:  -4deg; --shade: #00000058; }
    &:nth-child(6)  { --deg:  -2deg; --shade: #00000050; }
    &:nth-child(7)  { --deg:   0deg; --shade: #00000048; }
    &:nth-child(8)  { --deg:   2deg; --shade: #00000040; }
    &:nth-child(9)  { --deg:   4deg; --shade: #00000038; }
    &:nth-child(10) { --deg:   6deg; --shade: #00000030; }
    &:nth-child(11) { --deg:   8deg; --shade: #00000028; }
    &:nth-child(12) { --deg:  10deg; --shade: #00000020; }
    &:nth-child(13) { --deg:  12deg; --shade: #00000000; }
    /* to hide the edges */
    &:nth-child(14) { --deg: -11.8deg; --shade: #00000070; }
    &:nth-child(15) { --deg:  11.8deg; --shade: #00000000; }

    &:not(:nth-of-type(1)):not(:nth-of-type(13)) {
      background: radial-gradient(circle at 35% 5%, #e32 18%, #583 0);
    }
    
    &:first-of-type {
      --shading: #0000;
    }
  }
}

@media (prefers-reduced-motion) {
  .watermelon {
    animation: none;
  }
}
        
JS
格式化
            
            
        
预览
控制台