<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>
HTML
格式化
支持Emmet,输入 p 后按 Tab键试试吧!
<head> ... </head>
<body>
</body>
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;
}
}