今天在国外一个网站看到一个不错的CSS效果,一个纯CSS3实现的绘制动画效果,想弄出来这个效果,需要很大的耐心哟。先来看下效果图,如下:
废话不多说,直接上代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>分享一个纯CSS3实现的绘制动画效果:可爱宠物 - Web前端之家https://www.jiangweishan.com/</title>
<style>
* {
box-sizing: border-box;
}
:root {
--coefficient: 1vmin;
--size: 50;
--min-size: 200;
--unit: calc((var(--size) / 493) * var(--coefficient));
--stroke: #0d0d0d;
--lip-color: #ffb3b3;
--cheek-color: #ff8080;
--tongue-color: #f33;
--cap-color: #47c20a;
--leaf-color: #369108;
--backdrop: #0e8134;
--eye-shade: #4d3c33;
--fur-color: #b4a088;
--face: #f2f2f2;
--eye: #f2f2f2;
--outfit: #f2a60d;
--pupil: #0a3a5c;
--pot-color: #fc6;
--default-petal-color: #f00;
--cap-accent: #ffd500;
--peak-color: #2d7906;
--flower-core: #f2cc0d;
--stroke-border: calc(5 * var(--unit)) solid var(--stroke);
}
body {
min-height: 100vh;
background: #ffb3b3;
}
img,
.leif {
height: calc(511 * var(--unit));
width: calc(493 * var(--unit));
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.leif *,
.leif *:after,
.leif *:before {
position: absolute;
}
.leif__himself {
height: 100%;
width: 100%;
-webkit-clip-path: circle(50% at 50% 38%);
clip-path: circle(50% at 50% 38%);
}
.leif__container {
height: 100%;
width: 100%;
-webkit-animation: pop-in 0.5s 1s both cubic-bezier(0.58, 0.68, 0.71, 1.41);
animation: pop-in 0.5s 1s both cubic-bezier(0.58, 0.68, 0.71, 1.41);
}
.leif__eye-closed {
-webkit-animation: blink-closed 8s infinite steps(1);
animation: blink-closed 8s infinite steps(1);
border: calc(10 * var(--unit)) solid var(--stroke);
-webkit-clip-path: polygon(0 45%, 100% 60%, 100% 100%, 0 100%);
clip-path: polygon(0 45%, 100% 60%, 100% 100%, 0 100%);
border-radius: 50%;
}
.leif__eye-closed--left {
height: 18%;
left: 12%;
width: 14%;
bottom: 51%;
}
.leif__eye-closed--right {
height: 19%;
left: 48%;
width: 16%;
bottom: 45%;
}
.leif__arch {
height: 100%;
width: 100%;
border-radius: 50%;
background: var(--backdrop);
bottom: 12%;
border: var(--stroke-border);
}
.leif__eye-open {
-webkit-animation: blink-open 8s infinite steps(1);
animation: blink-open 8s infinite steps(1);
}
.leif__eye-open--left {
height: 18%;
left: 12%;
width: 14%;
border-radius: 50%;
background: var(--eye);
bottom: 51%;
}
.leif__eye-open--left:after {
content: '';
position: absolute;
top: 35%;
left: 60%;
height: 50%;
width: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
background: var(--pupil);
}
.leif__eye-open--right {
height: 19%;
left: 48%;
width: 16%;
border-radius: 50%;
background: var(--eye);
bottom: 45%;
}
.leif__eye-open--right:after {
content: '';
position: absolute;
top: 34%;
left: 39%;
height: 50%;
width: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
background: var(--pupil);
}
.leif__pot {
height: 17%;
width: 20%;
background: var(--stroke);
left: 32%;
top: 60%;
transform: rotate(-4deg);
-webkit-clip-path: polygon(0 -100%, 100% -100%, 100% 25%, 90% 25%, 70% 100%, 30% 100%, 10% 25%, 0 25%);
clip-path: polygon(0 -100%, 100% -100%, 100% 25%, 90% 25%, 70% 100%, 30% 100%, 10% 25%, 0 25%);
}
.leif__pot:after,
.leif__pot:before {
content: '';
background: var(--pot-color);
left: 50%;
transform: translate(-50%, 0);
z-index: 3;
}
.leif__pot:before {
height: 15%;
width: 90%;
top: 5%;
}
.leif__pot:after {
bottom: 5%;
height: 70%;
width: 90%;
-webkit-clip-path: polygon(0 -100%, 100% -100%, 100% 25%, 92% -10%, 70% 100%, 30% 100%, 8% -10%, 0 25%);
clip-path: polygon(0 -100%, 100% -100%, 100% 25%, 92% -10%, 70% 100%, 30% 100%, 8% -10%, 0 25%);
}
.leif__pot .flower__container {
width: 100%;
height: 100%;
left: 0;
bottom: 0;
-webkit-animation: grow 2s 2s linear both;
animation: grow 2s 2s linear both;
}
.leif__pot .flower__show {
height: 100%;
width: 100%;
left: 0;
bottom: 100%;
-webkit-clip-path: inset(0 0 0 0);
clip-path: inset(0 0 0 0);
}
.leif__pot .flower {
bottom: 0;
--size: 70;
--r: 40;
--hue: 210;
z-index: -2;
}
.leif__pot .flower:before {
content: '';
width: 10%;
height: 100%;
background: var(--stroke);
top: 50%;
left: 50%;
transform-origin: 50% 0;
transform: rotate(calc(var(--r) * -1deg)) translate(-50%, 0);
}
.leif__arm--right {
left: 56%;
top: 58%;
height: 15%;
transform: rotate(7deg);
width: 9%;
border: var(--stroke-border);
border-radius: 30% 70%;
background: var(--fur-color);
}
.leif__body {
height: 50%;
width: 27%;
background: var(--outfit);
top: 50%;
left: 36%;
border: var(--stroke-border);
border-radius: 40% 60% 50% 50%/62% 62% 30% 30%;
}
.leif__body:after,
.leif__body:before {
content: '';
}
.leif__body:before {
height: 20%;
width: 100%;
top: 15%;
left: 0;
background: var(--fur-color);
-webkit-clip-path: polygon(0 50%, 25% 0, 100% 0, 100% 100%, 0 100%);
clip-path: polygon(0 50%, 25% 0, 100% 0, 100% 100%, 0 100%);
}
.leif__body:after {
width: 25%;
height: 30%;
border: var(--stroke-border);
border-radius: 50%;
right: 10%;
top: 10%;
background: var(--outfit);
transform: rotate(12deg) translate(15%, 0);
}
.leif__forearm {
height: 8%;
width: 20%;
background: var(--fur-color);
border: var(--stroke-border);
top: 65.25%;
left: 42%;
transform-origin: 100% 50%;
transform: rotate(-8deg);
border-radius: 30% 0 0 30%/25% 0 0 25%;
-webkit-clip-path: polygon(-50% 0, 90% 0, 96% 100%, -50% 100%);
clip-path: polygon(-50% 0, 90% 0, 96% 100%, -50% 100%);
}
.leif__forearm .claw {
width: 35%;
height: 35%;
border-radius: 50%;
background: var(--stroke);
top: calc(var(--t, 5) * 1%);
right: 95%;
transform-origin: 100% 50%;
transform: rotate(calc(var(--r, 1) * 1deg));
-webkit-clip-path: polygon(0 50%, 100% 0, 100% 100%);
clip-path: polygon(0 50%, 100% 0, 100% 100%);
}
.leif__forearm .claw:nth-of-type(2) {
--t: 30;
--r: -3;
}
.leif__forearm .claw:nth-of-type(3) {
--t: 60;
--r: 2;
}
.leif__head {
top: 13.5%;
width: 62%;
height: 48%;
left: 51.5%;
transform: translate(-50%, 0%);
background: var(--fur-color);
border-radius: 50%/50%;
border: var(--stroke-border);
}
.leif__face {
bottom: 7%;
left: 3%;
height: 85%;
width: 83.5%;
border-radius: 47% 50% 61% 52%/48% 57% 54% 56%;
overflow: hidden;
}
.leif__face-border {
height: 100%;
width: 100%;
}
.leif__face-border div:nth-of-type(1) {
height: 74%;
width: 47%;
background: var(--face);
border-radius: 50%;
top: 6%;
left: -1%;
transform: rotate(17deg);
}
.leif__face-border div:nth-of-type(2) {
background: var(--face);
top: 4%;
transform: rotate(-44deg);
right: 4%;
border-radius: 50%;
height: 84%;
width: 51%;
}
.leif__face-border div:nth-of-type(3) {
height: 150%;
width: 200%;
top: 50%;
left: 50%;
background: var(--face);
transform: translate(-50%, 0);
}
.leif__face-patch {
height: 150%;
width: 100%;
top: 40%;
left: 50%;
background: var(--face);
transform: translate(-50%, 0);
-webkit-clip-path: polygon(0 15%, 8% 2%, 15% 9%, 26% 9%, 31% 0, 50% 0, 53% 11%, 68% 15%, 77% 8%, 100% 42%);
clip-path: polygon(0 15%, 8% 2%, 15% 9%, 26% 9%, 31% 0, 50% 0, 53% 11%, 68% 15%, 77% 8%, 100% 42%);
}
.leif__nose {
background: var(--lip-color);
top: 50%;
left: 27%;
border-radius: 50%/50%;
height: 16%;
width: 18%;
transform: rotate(10deg);
}
.leif__nose:after,
.leif__nose:before {
content: '';
width: 13%;
height: 34%;
background: #404040;
border-radius: 50%/25%;
}
.leif__nose:after {
left: 31%;
top: 35%;
}
.leif__nose:before {
left: 59%;
top: 37%;
}
.leif__cheek {
background: var(--cheek-color);
border-radius: 50% 50% 40% 60%/50% 50% 50% 50%;
}
.leif__cheek--left {
height: 20%;
width: 10%;
top: 52%;
left: 4%;
}
.leif__cheek--right {
height: 20%;
width: 16%;
top: 62%;
right: 18%;
}
.leif__mouth-patch {
width: 50%;
height: 5%;
background: var(--face);
bottom: 36%;
left: 14%;
transform-origin: 0 100%;
transform: rotate(5deg);
}
.leif__arm--left {
height: 30%;
width: 8%;
top: 56%;
background: var(--fur-color);
border: var(--stroke-border);
left: 40%;
border-radius: 100% 0 50% 50%/50%;
transform-origin: 50% 0;
transform: rotate(34deg);
}
.leif__arm--left .claw {
height: 13%;
width: 10%;
background: var(--stroke);
border-radius: 50%;
top: 95%;
left: calc(var(--x, 26) * 1%);
}
.leif__arm--left .claw:nth-of-type(2) {
--x: 37;
}
.leif__arm--left .claw:nth-of-type(3) {
--x: 50;
}
.leif__mouth {
width: 45%;
height: 26%;
background: var(--face);
bottom: 12%;
left: 14%;
-webkit-clip-path: polygon(0 5%, 100% 17%, 100% 100%, 0 100%);
clip-path: polygon(0 5%, 100% 17%, 100% 100%, 0 100%);
}
.leif__mouth > div:nth-of-type(1) {
background: var(--lip-color);
width: 150%;
height: 200%;
bottom: 0;
left: 50%;
transform-origin: bottom center;
transform: translate(-50%, 0) rotate(4deg);
border-radius: 0 0 50% 50%/0 0 100% 100%;
}
.leif__mouth > div:nth-of-type(2) {
background: #000;
bottom: 21%;
width: 133%;
height: 200%;
border-radius: 0 0 50% 50%/0 0 100% 100%;
left: 50%;
transform-origin: bottom center;
transform: translate(-50%, 0) rotate(4deg);
overflow: hidden;
-webkit-clip-path: polygon(50% 50%, 87% 100%, 10% 100%);
clip-path: polygon(50% 50%, 87% 100%, 10% 100%);
}
.leif__mouth > div:nth-of-type(2):after {
content: '';
height: 10%;
width: 26%;
border-radius: 50% 50% 0 0/100% 100% 0 0;
bottom: -2%;
left: 50%;
transform: translate(-50%, 0);
background: var(--tongue-color);
}
.leif__mouth > div:nth-of-type(3) {
background: var(--lip-color);
bottom: 43%;
width: 185%;
height: 200%;
left: 50%;
transform-origin: bottom center;
transform: translate(-50%, 0) rotate(4deg);
border-radius: 0 0 50% 50%/0 0 100% 100%;
}
.leif__mouth > div:nth-of-type(4) {
background: var(--face);
bottom: 62%;
width: 185%;
height: 200%;
left: 50%;
transform-origin: bottom center;
transform: translate(-50%, 0) rotate(4deg);
border-radius: 0 0 50% 50%/0 0 100% 100%;
}
.leif__mouth > div:nth-of-type(5) {
left: 0%;
top: 0;
height: 100%;
width: 21%;
border-top: calc(10 * var(--unit)) solid var(--face);
border-radius: 50%;
transform: rotate(-49deg) translate(27%, -5%);
}
.leif__mouth > div:nth-of-type(6) {
right: 0%;
top: 0;
height: 100%;
width: 24%;
border-top: calc(10 * var(--unit)) solid var(--face);
border-radius: 50%;
transform: rotate(52deg) translate(0%, 5%);
}
.leif__eye--left {
height: 40%;
width: 30%;
top: 22%;
background: var(--face);
overflow: hidden;
}
.leif__eye--left > div {
background: var(--eye-shade);
height: 111%;
width: 107%;
right: 0;
top: 0;
border-radius: 65% 30% 50% 50%/78% 36% 50% 0%;
}
.leif__eye--left > div > div:nth-of-type(1) {
background: var(--face);
height: 100%;
width: 100%;
border-radius: 65% 30% 50% 50%/78% 36% 50% 0%;
top: 29%;
left: 6%;
transform: rotate(4deg);
}
.leif__eye--left > div > div:nth-of-type(2) {
background: var(--eye-shade);
width: 68%;
height: 68%;
border-radius: 50%;
right: 0;
}
.leif__eye--right {
background: var(--face);
height: 45%;
width: 52%;
left: 50%;
top: 31%;
transform: rotate(52deg);
overflow: hidden;
}
.leif__eye--right > div {
background: var(--eye-shade);
height: 131%;
width: 138%;
left: 0;
top: 3%;
border-radius: 50% 50% 0 100%/50% 30% 0 55%;
}
.leif__eye--right > div > div:nth-of-type(1) {
background: var(--face);
height: 109%;
width: 87%;
transform: rotate(19deg) translate(10%, 19%);
border-radius: 50% 50% 0 0/100% 100% 0 0;
}
.leif__eye--right > div > div:nth-of-type(2) {
background: var(--eye-shade);
height: 57%;
width: 35%;
border-radius: 50%;
top: 16%;
left: 0;
}
.leif__eye--right > div > div:nth-of-type(2):after {
content: '';
height: 27%;
width: 36%;
border-radius: 50%;
border-top: calc(5 * var(--unit)) solid var(--eye-shade);
left: 92%;
top: 17%;
transform: rotate(-60deg);
}
.leif__cap {
height: 20%;
width: 30%;
left: 39%;
top: 1%;
}
.leif__cap > div:nth-of-type(1) {
right: 0;
top: 0;
width: 90%;
height: 150%;
border-radius: 50%;
border: var(--stroke-border);
background: var(--cap-color);
}
.leif__cap > div:nth-of-type(1) > div {
background: var(--cap-color);
height: 10%;
width: 17%;
border-radius: 50%;
top: 13%;
left: 31%;
}
.leif__cap > div:nth-of-type(1) > div:nth-of-type(1) {
z-index: 2;
}
.leif__cap > div:nth-of-type(1) > div:nth-of-type(2),
.leif__cap > div:nth-of-type(1) > div:nth-of-type(3),
.leif__cap > div:nth-of-type(1) > div:nth-of-type(4),
.leif__cap > div:nth-of-type(1) > div:nth-of-type(5),
.leif__cap > div:nth-of-type(1) > div:nth-of-type(6) {
background: var(--cap-accent);
transform: translate(calc(var(--x, 0) * 1%), calc(var(--y, 0) * 1%)) rotate(calc(var(--r, 0) * 1deg));
}
.leif__cap > div:nth-of-type(1) > div:nth-of-type(2) {
--x: -55;
--y: -5;
}
.leif__cap > div:nth-of-type(1) > div:nth-of-type(3) {
--x: 22;
--y: -70;
--r: 120;
height: 12%;
}
.leif__cap > div:nth-of-type(1) > div:nth-of-type(4) {
--x: 85;
--y: -5;
--r: -20;
height: 11%;
}
.leif__cap > div:nth-of-type(1) > div:nth-of-type(5) {
--x: 30;
--y: 80;
--r: 60;
height: 11%;
}
.leif__cap > div:nth-of-type(1) > div:nth-of-type(6) {
--x: -50;
--y: 80;
--r: 130;
height: 11%;
}
.leif__cap > div:nth-of-type(2) {
width: 107%;
height: 62%;
top: 48%;
border: var(--stroke-border);
border-radius: 50%;
transform: rotate(17deg) translate(-1%, 1%);
background: var(--peak-color);
}
.flower {
--petal-color: hsl(var(--hue), 100%, 50%);
height: calc(var(--size, 125) * var(--unit));
width: calc(var(--size, 125) * var(--unit));
bottom: 1%;
left: 50%;
transform: translate(-50%, 0) translate(calc(var(--x, 0) * 1%), calc(var(--y, 0) * 1%)) rotate(calc(var(--r, 0) * 1deg));
}
.flower__core {
top: 50%;
left: 50%;
height: 30%;
width: 30%;
border-radius: 50%;
border: var(--stroke-border);
transform: translate(-50%, -50%);
background: var(--flower-core);
transform-style: preserve-3d;
}
.flower__core:after,
.flower__core:before {
content: '';
height: 25%;
width: 220%;
background: var(--stroke);
border-radius: 5%/50%;
top: 50%;
left: 50%;
transform: translate3d(-50%, -50%, -1px);
}
.flower__core:after {
transform: translate3d(-50%, -50%, -1px) rotate(90deg);
}
.flower__petal {
height: 50%;
width: 50%;
top: 0;
left: 50%;
transform: translate(-50%, 0);
transform-origin: 50% 100%;
-webkit-clip-path: polygon(-50% 0, 50% 100%, 150% 0);
clip-path: polygon(-50% 0, 50% 100%, 150% 0);
}
.flower__petal:after {
content: '';
width: 60%;
left: 50%;
height: 100%;
border-radius: 50%;
border-top: calc(10 * var(--unit)) solid var(--petal-color, var(--default-petal-color));
transform-origin: 50% 0;
transform: translate(-50%, 0) rotate(180deg) translate(0, -34%);
-webkit-clip-path: inset(0 0 80% 0);
clip-path: inset(0 0 80% 0);
}
.flower__petal--0 {
transform: translate(-50%, 0) rotate(0deg);
}
.flower__petal--1 {
transform: translate(-50%, 0) rotate(90deg);
}
.flower__petal--2 {
transform: translate(-50%, 0) rotate(180deg);
}
.flower__petal--3 {
transform: translate(-50%, 0) rotate(270deg);
}
.flower__petal > div:nth-of-type(1) {
left: 50%;
width: 60%;
height: 100%;
bottom: 0;
border-radius: 50%/25%;
background: var(--stroke);
transform-origin: 50% 100%;
transform: translate(-50%, 0) rotate(-23deg) translate(0, 0);
}
.flower__petal > div:nth-of-type(2) {
left: 50%;
width: 60%;
height: 100%;
border-radius: 50%/25%;
background: var(--stroke);
transform-origin: 50% 100%;
transform: translate(-50%, 0) rotate(23deg) translate(0, 0);
}
.flower__petal > div:nth-of-type(2):after {
content: '';
height: 100%;
width: 100%;
border-top: calc(10 * var(--unit)) solid var(--stroke);
border-radius: 50%;
transform-origin: 50% 0;
transform: rotate(-23deg) rotate(-180deg) translate(65%, -18%);
-webkit-clip-path: inset(0 0 81% 0);
clip-path: inset(0 0 81% 0);
}
.flower__petal > div:nth-of-type(3) {
left: 50%;
width: 100%;
height: 100%;
bottom: 0;
transform: translate(-50%, 0);
-webkit-clip-path: polygon(-34% 0, 50% 90%, 134% 0);
clip-path: polygon(-34% 0, 50% 90%, 134% 0);
}
.flower__petal > div:nth-of-type(3):after,
.flower__petal > div:nth-of-type(3):before {
content: '';
height: 100%;
width: 43%;
left: 50%;
bottom: 0;
border-radius: 50%/25%;
background: var(--petal-color, var(--default-petal-color));
}
.flower__petal > div:nth-of-type(3):before {
transform: translate(-50%, 0) rotate(37deg) translate(27%, 0%);
}
.flower__petal > div:nth-of-type(3):after {
transform: translate(-50%, 0) rotate(-37deg) translate(-27%, 0%);
}
.flower--1 {
--hue: 190;
--x: 0;
--y: 0;
--size: 125;
--r: 0;
}
.flower--2 {
--hue: 320;
--x: 140;
--y: -75;
--size: 75;
--r: 40;
}
.flower--3 {
--hue: 30;
--x: -140;
--y: -75;
--size: 75;
--r: 80;
}
.flower--4 {
--hue: 0;
--x: -170;
--y: -85;
--size: 105;
--r: 85;
}
.flower--5 {
--hue: 260;
--x: 170;
--y: -85;
--size: 105;
--r: -85;
}
.leaf {
left: calc(var(--x) * 1%);
top: calc(var(--y) * 1%);
height: 14%;
width: 7%;
transform-origin: 50% 100%;
transform: rotate(calc(var(--r) * 1deg)) scale(var(--scale, 1)) rotateY(calc(var(--flip, 0) * 180deg));
}
.leaf > div:nth-of-type(1) {
border-radius: 90% 10% 50% 50%/75% 10% 50% 25%;
height: 100%;
width: 100%;
background: var(--stroke);
-webkit-clip-path: polygon(0 0, 103% 0, 50% 50%, 100% 100%, 0 100%);
clip-path: polygon(0 0, 103% 0, 50% 50%, 100% 100%, 0 100%);
}
.leaf > div:nth-of-type(2) {
background: var(--leaf-color);
width: 100%;
border-radius: 50%;
height: 100%;
border-radius: 90% 10% 50% 50%/75% 10% 50% 25%;
transform: scale(0.7) translate(6%, 0);
-webkit-clip-path: polygon(0 0, 90% 0, 75% 50%, 100% 100%, 0 100%);
clip-path: polygon(0 0, 90% 0, 75% 50%, 100% 100%, 0 100%);
}
.leaf > div:nth-of-type(3) {
height: 100%;
width: 100%;
left: 100%;
top: 0;
border-left: var(--stroke-border);
border-width: calc(10 * var(--unit));
transform-origin: bottom center;
border-radius: 90% 10% 50% 50%/75% 10% 50% 25%;
transform: translate(-15%, 0) rotate(-18deg);
-webkit-clip-path: polygon(0 0, 71% 0, 100% 41%, 9% 81%);
clip-path: polygon(0 0, 71% 0, 100% 41%, 9% 81%);
}
.leaf--1 {
--x: 8;
--y: 52;
--r: 5;
--flip: 0;
--scale: 1;
}
.leaf--2 {
--x: 9;
--y: 56;
--r: -45;
--flip: 1;
--scale: 1.1;
}
.leaf--3 {
--x: 23;
--y: 68;
--r: -85;
--flip: 0;
--scale: 1;
}
.leaf--4 {
--x: 26;
--y: 67;
--r: 70;
--flip: 1;
--scale: 1.05;
}
.leaf--5 {
--x: 24;
--y: 68;
--r: -140;
--flip: 0;
--scale: 1;
}
.leaf--6 {
--x: 66;
--y: 66;
--r: -65;
--flip: 0;
--scale: 1;
}
.leaf--7 {
--x: 71;
--y: 68;
--r: 145;
--flip: 1;
--scale: 1;
}
.leaf--8 {
--x: 71;
--y: 68;
--r: 90;
--flip: 1;
--scale: 1;
}
.leaf--9 {
--x: 84;
--y: 52;
--r: 5;
--flip: 1;
--scale: 1;
}
.leaf--10 {
--x: 86;
--y: 52;
--r: 40;
--flip: 1;
--scale: 1;
}
.star {
height: calc(20 * var(--unit));
width: calc(20 * var(--unit));
top: calc(var(--y, 50) * 1%);
left: calc(var(--x, 50) * 1%);
-webkit-animation: sparkle 2s calc(var(--d, 0) * 1s) infinite both;
animation: sparkle 2s calc(var(--d, 0) * 1s) infinite both;
}
.star:after,
.star:before {
content: '';
height: 100%;
width: 40%;
border-radius: 50%/25%;
background: #fff;
left: 50%;
top: 0;
transform: translate(-50%, 0) rotate(calc(var(--r, 0) * 1deg));
}
.star:after {
--r: 90;
}
.star--1 {
--x: 30;
--y: 90;
--d: 2.25;
}
.star--2 {
--x: 4;
--y: 51;
--d: 2;
}
.star--3 {
--x: 92;
--y: 49;
--d: 3;
}
.star--4 {
--x: 66;
--y: 92;
--d: 2.5;
}
@-webkit-keyframes pop-in {
from {
transform: translate(0, 100%);
}
}
@keyframes pop-in {
from {
transform: translate(0, 100%);
}
}
@-webkit-keyframes sparkle {
0%, 50%, 100% {
transform: scale(0) rotate(0);
}
25% {
transform: scale(1.2) rotate(450deg);
}
}
@keyframes sparkle {
0%, 50%, 100% {
transform: scale(0) rotate(0);
}
25% {
transform: scale(1.2) rotate(450deg);
}
}
@-webkit-keyframes grow {
from {
transform: translate(0, 100%);
}
}
@keyframes grow {
from {
transform: translate(0, 100%);
}
}
@-webkit-keyframes blink-open {
0%, 10%, 40%, 100% {
transform: scale(1);
}
25% {
transform: scale(0);
}
}
@keyframes blink-open {
0%, 10%, 40%, 100% {
transform: scale(1);
}
25% {
transform: scale(0);
}
}
@-webkit-keyframes blink-closed {
0%, 10%, 40%, 100% {
transform: scale(0);
}
25% {
transform: scale(1);
}
}
@keyframes blink-closed {
0%, 10%, 40%, 100% {
transform: scale(0);
}
25% {
transform: scale(1);
}
}
</style>
</head>
<body>
<div class="leif">
<div class="leif__arch"></div>
<div class="leif__himself">
<div class="leif__container">
<div class="leif__body"></div>
<div class="leif__arm--left">
<div class="claw"></div>
<div class="claw"></div>
<div class="claw"></div>
</div>
<div class="leif__arm--right"></div>
<div class="leif__cap">
<div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div></div>
</div>
<div class="leif__head">
<div class="leif__face">
<div class="leif__face-border">
<div></div>
<div></div>
<div></div>
</div>
<div class="leif__eye leif__eye--right">
<div>
<div></div>
<div></div>
</div>
</div>
<div class="leif__eye leif__eye--left">
<div>
<div></div>
<div></div>
</div>
</div>
<div class="leif__face-patch"></div>
<div class="leif__mouth">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="leif__mouth-patch"></div>
<div class="leif__nose"></div>
<div class="leif__cheek leif__cheek--left"></div>
<div class="leif__cheek leif__cheek--right"></div>
</div>
<div class="leif__eye-open leif__eye-open--left"></div>
<div class="leif__eye-open leif__eye-open--right"></div>
<div class="leif__eye-closed leif__eye-closed--left"></div>
<div class="leif__eye-closed leif__eye-closed--right"></div>
</div>
<div class="leif__pot">
<div class="flower__show">
<div class="flower__container">
<div class="flower flower--undefined">
<div class="flower__petal flower__petal--0">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--1">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--2">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--3">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__core"></div>
</div>
</div>
</div>
</div>
<div class="leif__forearm">
<div class="claw"></div>
<div class="claw"></div>
<div class="claw"></div>
</div>
</div>
</div>
<div class="leaf leaf--1">
<div></div>
<div></div>
<div></div>
</div>
<div class="leaf leaf--2">
<div></div>
<div></div>
<div></div>
</div>
<div class="leaf leaf--3">
<div></div>
<div></div>
<div></div>
</div>
<div class="leaf leaf--4">
<div></div>
<div></div>
<div></div>
</div>
<div class="leaf leaf--5">
<div></div>
<div></div>
<div></div>
</div>
<div class="leaf leaf--6">
<div></div>
<div></div>
<div></div>
</div>
<div class="leaf leaf--7">
<div></div>
<div></div>
<div></div>
</div>
<div class="leaf leaf--8">
<div></div>
<div></div>
<div></div>
</div>
<div class="leaf leaf--9">
<div></div>
<div></div>
<div></div>
</div>
<div class="leaf leaf--10">
<div></div>
<div></div>
<div></div>
</div>
<div class="flower flower--1">
<div class="flower__petal flower__petal--0">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--1">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--2">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--3">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__core"></div>
</div>
<div class="flower flower--2">
<div class="flower__petal flower__petal--0">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--1">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--2">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--3">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__core"></div>
</div>
<div class="flower flower--3">
<div class="flower__petal flower__petal--0">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--1">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--2">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--3">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__core"></div>
</div>
<div class="flower flower--4">
<div class="flower__petal flower__petal--0">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--1">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--2">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--3">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__core"></div>
</div>
<div class="flower flower--5">
<div class="flower__petal flower__petal--0">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--1">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--2">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__petal flower__petal--3">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="flower__core"></div>
</div>
<div class="star star--1"></div>
<div class="star star--2"></div>
<div class="star star--3"></div>
<div class="star star--4"></div>
</div>
<script>
const restart = () => {
const MARKUP = document.body.innerHTML
document.body.innerHTML = ''
requestAnimationFrame(() => (document.body.innerHTML = MARKUP))
}
document.body.addEventListener('click', restart)
</script>
</body>
</html>