好久没发布关于HTML5和CSS3动画的文章了,近期一直折腾vue和react等项目。闲余之时,突然想分享一个HTML5应用:CSS3画一个可爱动漫宠物。先看下效果图:
HTML代码:
<label for="toggle">Toggle body overflow</label>
<input id="toggle" type="checkbox"/>
<div class="jigglypuff">
<div class="jigglypuff__left-arm"></div>
<div class="jigglypuff__left-foot"></div>
<div class="jigglypuff__right-foot"></div>
<div class="jigglypuff__ear-left">
<div class="jigglypuff__ear-left-inner"></div>
</div>
<div class="jigglypuff__ear-right">
<div class="jigglypuff__ear-right-inner"></div>
</div>
<div class="jigglypuff__body"></div>
<div class="jigglypuff__right-arm"></div>
<div class="jigglypuff__mouth"></div>
<div class="jigglypuff__eye-left">
<div class="jigglypuff__eye-left-pupil"></div>
</div>
<div class="jigglypuff__eye-right">
<div class="jigglypuff__eye-right-pupil"></div>
</div>
<div class="jigglypuff__tuft-container">
<div class="jigglypuff__tuft"></div>
<div class="jigglypuff__tuft-line"></div>
</div>
</div>
CSS代码:
*,
*:after,
*:before {
box-sizing: border-box;
}
:root {
--size: 50;
--unit: calc((var(--size) / 853) * 1vmin);
--pink: #efc7d0;
--pink-dark: #daa4ae;
--glare: radial-gradient(circle at center, rgba(255,255,255,0.5) 50%, rgba(255,255,255,0.15) 80%);
--inner-ear: #161922;
--border: #262626;
--eye-light: #4c9cae;
--eye-dark: #0e7486;
--pupil-backdrop: #053747;
}
body {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
min-height: 100vh;
background: #b9f;
}
.jigglypuff {
height: calc(805 * var(--unit));
width: calc(853 * var(--unit));
position: relative;
}
.jigglypuff * {
position: absolute;
}
.jigglypuff__body {
background: var(--pink-dark);
left: 9.5%;
top: 15%;
height: 77.25%;
width: 73%;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 60% 53% 61% 58%/53% 58% 58% 61%;
overflow: hidden;
}
.jigglypuff__body:before {
content: '';
background: var(--pink);
width: 239%;
height: 210%;
left: 57%;
bottom: 20%;
border-radius: 50%/0 0 100% 100%;
transform: translate(-50%, 0) rotate(4deg);
position: absolute;
transform-origin: bottom center;
}
.jigglypuff__left-arm {
top: 56%;
left: 0.75%;
height: 15%;
border: calc(5 * var(--unit)) solid var(--border);
width: 27%;
background: var(--pink-dark);
border-radius: 70% 0 0 100%/25% 0 0 75%;
transform-origin: 100% 50%;
transform: rotate(1deg);
overflow: hidden;
}
.jigglypuff__left-arm:before {
content: '';
position: absolute;
height: 100%;
width: 41%;
border-radius: 0 0 60% 0/0 0 83% 0;
background: radial-gradient(circle at 0 50%, var(--pink) 70%, var(--pink-dark) 90%);
left: -5%;
top: 50%;
transform: translate(0, -50%);
}
.jigglypuff__left-arm:after {
content: '';
top: 20%;
left: 7%;
height: 19%;
width: 15%;
background: var(--glare);
position: absolute;
border-radius: 50%;
}
.jigglypuff__right-arm {
top: 77%;
left: 58.5%;
background: var(--pink-dark);
width: 11%;
border: calc(5 * var(--unit)) solid var(--border);
height: 12%;
transform: rotate(-10deg);
border-radius: 0 0 50% 50%/0 0 100% 100%;
border-top: 0;
}
.jigglypuff__right-arm:before {
content: '';
position: absolute;
bottom: 20%;
left: 50%;
transform: translate(-50%, 0);
background: var(--pink);
height: 100%;
width: 80%;
border-radius: 0 0 50% 50%/0 0 100% 100%;
z-index: 2;
}
.jigglypuff__right-arm:after {
content: '';
position: absolute;
background: var(--glare);
height: 40%;
width: 25%;
border-radius: 50%;
left: 21%;
bottom: 57%;
z-index: 3;
transform: rotate(-10deg);
}
.jigglypuff__left-foot {
height: 26%;
width: 12%;
background: var(--pink-dark);
bottom: 0%;
left: 17%;
transform: rotate(70deg);
border-radius: 29% 70% 50% 50%/24% 39% 67% 55%;
border: calc(5 * var(--unit)) solid var(--border);
overflow: hidden;
}
.jigglypuff__left-foot:after {
content: '';
position: absolute;
bottom: -7%;
height: 60%;
width: 150%;
border-radius: 50%;
background: radial-gradient(circle at 50% 75%, var(--pink) 50%, var(--pink-dark));
}
.jigglypuff__left-foot:before {
content: '';
position: absolute;
bottom: 9%;
left: 20%;
height: 25%;
width: 30%;
background: var(--glare);
border-radius: 50%;
transform: rotate(-10deg);
z-index: 2;
}
.jigglypuff__right-foot {
height: 25%;
width: 13%;
background: var(--pink-dark);
border: calc(5 * var(--unit)) solid var(--border);
bottom: 0;
left: 61%;
border-radius: 25% 39% 45% 101%/50% 64% 56% 97%;
transform-origin: 0 100%;
transform: rotate(-51deg) translate(0, 29%);
overflow: hidden;
}
.jigglypuff__right-foot:before {
content: '';
position: absolute;
bottom: -10%;
background: radial-gradient(var(--pink) 50%, var(--pink-dark));
width: 165%;
height: 62%;
border-radius: 50%;
left: 50%;
transform: translate(-50%, 0);
}
.jigglypuff__right-foot:after {
content: '';
position: absolute;
height: 15%;
width: 35%;
background: var(--glare);
border-radius: 50%;
bottom: 20%;
right: 10%;
transform: rotate(50deg);
filter: blur(2px);
}
.jigglypuff__ear-left {
height: 30%;
width: 25%;
background: var(--pink);
left: 24%;
top: 0%;
transform-origin: 0 0;
transform: rotate(19deg);
border-radius: 9% 85% 25% 26%/17% 30% 0 50%;
border: calc(5 * var(--unit)) solid var(--border);
}
.jigglypuff__ear-left:after {
content: '';
height: 50%;
width: 75%;
background: var(--inner-ear);
position: absolute;
bottom: 91%;
left: 8%;
border: calc(5 * var(--unit)) solid var(--border);
transform-origin: 0 100%;
transform: rotate(28deg) translate(0, 100%);
border-radius: 50%/15%;
-webkit-clip-path: inset(0 0 90% 0);
clip-path: inset(0 0 90% 0);
}
.jigglypuff__ear-left-inner {
height: 80%;
width: 58%;
background: var(--inner-ear);
left: 10%;
top: 8%;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 15% 0 0 44%/20% 0 0 70%;
overflow: hidden;
-webkit-clip-path: polygon(0 9%, 100% 43%, 100% 100%, 0 100%);
clip-path: polygon(0 9%, 100% 43%, 100% 100%, 0 100%);
}
.jigglypuff__ear-left-inner:before {
content: '';
height: 42%;
width: 70%;
border-radius: 50%;
bottom: 0;
left: -11%;
position: absolute;
background: var(--glare);
}
.jigglypuff__ear-right {
height: 35%;
width: 31%;
border: calc(5 * var(--unit)) solid var(--border);
background: var(--pink);
right: 0%;
top: 35%;
transform-origin: 100% 0;
transform: rotate(30deg);
border-radius: 100% 5% 56% 0/51% 5% 65% 0;
}
.jigglypuff__ear-right:after {
content: '';
background: var(--inner-ear);
width: 61%;
height: 68%;
right: 4%;
top: 11%;
position: absolute;
border-top: calc(5 * var(--unit)) solid var(--border);
-webkit-clip-path: inset(0 0 97% 80%);
clip-path: inset(0 0 97% 80%);
}
.jigglypuff__ear-right-inner {
background: var(--inner-ear);
width: 61%;
height: 68%;
right: 8%;
top: 11%;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 95% 5% 46% 0/76% 5% 70% 0;
overflow: hidden;
box-shadow: calc(15 * var(--unit)) 0 calc(2 * var(--unit)) 0 var(--pink-dark);
}
.jigglypuff__ear-right-inner:before {
content: '';
z-index: 2;
background: var(--glare);
height: 50%;
width: 67%;
border-radius: 50%;
bottom: 4%;
right: -20%;
position: absolute;
}
.jigglypuff__mouth {
top: 47%;
left: 33%;
transform-origin: 0 50%;
height: 15%;
width: 18%;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 50%;
transform: rotate(16deg);
-webkit-clip-path: polygon(50% 10%, 91% 100%, 5% 100%);
clip-path: polygon(50% 10%, 91% 100%, 5% 100%);
}
.jigglypuff__tuft-container {
top: 11%;
left: 34%;
height: 37%;
width: 37%;
}
.jigglypuff__tuft-container:after {
content: '';
position: absolute;
bottom: 0;
left: 6%;
height: 50%;
width: 54%;
border-radius: 50%;
border: calc(5 * var(--unit)) solid var(--border);
background: var(--pink);
-webkit-clip-path: polygon(100% 23%, 47% 100%, 100% 100%);
clip-path: polygon(100% 23%, 47% 100%, 100% 100%);
}
.jigglypuff__tuft {
background: var(--pink);
height: 100%;
width: 100%;
border-radius: 85% 50% 50% 39%/80% 52% 50% 55%;
border: calc(5 * var(--unit)) solid var(--border);
-webkit-clip-path: polygon(0 0, 100% 0, 100% 43%, 33% 100%, 0 100%);
clip-path: polygon(0 0, 100% 0, 100% 43%, 33% 100%, 0 100%);
}
.jigglypuff__tuft-line {
height: 25%;
width: 34%;
top: 62%;
left: 40%;
border-radius: 95% 0 0 0/61% 0 0 0;
border-top: calc(5 * var(--unit)) solid var(--border);
}
.jigglypuff__eye-left {
height: 24%;
width: 21%;
border: calc(5 * var(--unit)) solid var(--border);
background: #fff;
top: 34%;
left: 16%;
border-radius: 55% 45% 60% 40%/58% 41% 61% 42%;
}
.jigglypuff__eye-left:after {
content: '';
position: absolute;
right: 13%;
top: 41%;
height: 13%;
width: 14%;
background: #fff;
-webkit-clip-path: polygon(20% 87%, 50% 66%, 80% 87%, 67% 54%, 96% 35%, 60% 35%, 50% 5%, 40% 35%, 4% 35%, 33% 54%);
clip-path: polygon(20% 87%, 50% 66%, 80% 87%, 67% 54%, 96% 35%, 60% 35%, 50% 5%, 40% 35%, 4% 35%, 33% 54%);
-webkit-animation: twinkle 1.5s 0.75s infinite;
animation: twinkle 1.5s 0.75s infinite;
}
.jigglypuff__eye-left-pupil {
border: calc(5 * var(--unit)) solid var(--border);
height: 77%;
width: 78%;
right: 2%;
top: 10%;
border-radius: 55% 45% 60% 40%/58% 41% 61% 42%;
background: radial-gradient(circle at 50% 120%, var(--eye-light) 40%, transparent 50%), radial-gradient(circle at 85% 34%, var(--pupil-backdrop), transparent), var(--eye-dark);
}
.jigglypuff__eye-left-pupil:after {
content: '';
position: absolute;
top: 11%;
right: 10%;
height: 25%;
width: 26%;
background: radial-gradient(#fff 75%, transparent);
border-radius: 50%;
}
.jigglypuff__eye-left-pupil:before {
content: '';
height: 20%;
width: 28%;
bottom: 5%;
left: 18%;
background: var(--glare);
border-radius: 50%;
position: absolute;
z-index: 2;
}
.jigglypuff__eye-right {
border: calc(5 * var(--unit)) solid var(--border);
top: 46%;
left: 51%;
height: 25%;
width: 21%;
border-radius: 61% 48% 56% 50%/50% 50% 58% 50%;
background: #fff;
}
.jigglypuff__eye-right:after {
content: '';
position: absolute;
right: 13%;
top: 41%;
height: 13%;
width: 14%;
background: #fff;
-webkit-clip-path: polygon(20% 87%, 50% 66%, 80% 87%, 67% 54%, 96% 35%, 60% 35%, 50% 5%, 40% 35%, 4% 35%, 33% 54%);
clip-path: polygon(20% 87%, 50% 66%, 80% 87%, 67% 54%, 96% 35%, 60% 35%, 50% 5%, 40% 35%, 4% 35%, 33% 54%);
-webkit-animation: twinkle 2s infinite;
animation: twinkle 2s infinite;
}
.jigglypuff__eye-right-pupil {
height: 79%;
width: 81%;
right: 2%;
top: 10%;
overflow: hidden;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 61% 48% 56% 50%/50% 50% 58% 50%;
background: radial-gradient(circle at 50% 120%, var(--eye-light) 40%, transparent 50%), radial-gradient(circle at 71% 24%, var(--pupil-backdrop), transparent), var(--eye-dark);
}
.jigglypuff__eye-right-pupil:after {
content: '';
position: absolute;
top: 7%;
right: 15%;
height: 24%;
width: 27%;
border-radius: 50%;
background: radial-gradient(#fff 75%, transparent);
}
.jigglypuff__eye-right-pupil:before {
content: '';
position: absolute;
bottom: 5%;
left: 18%;
border-radius: 50%;
height: 20%;
width: 37%;
background: var(--glare);
z-index: 2;
}
label {
margin-bottom: 1rem;
z-index: 3;
}
:checked {
z-index: 3;
}
:checked ~ .jigglypuff .jigglypuff__body {
overflow: visible;
}
@-webkit-keyframes twinkle {
0% {
transform: rotate(0deg) scale(0);
}
50% {
transform: rotate(540deg) scale(1.2);
}
100% {
transform: rotate(1080deg) scale(0);
}
}
@keyframes twinkle {
0% {
transform: rotate(0deg) scale(0);
}
50% {
transform: rotate(540deg) scale(1.2);
}
100% {
transform: rotate(1080deg) scale(0);
}
}
完整代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>HTML5:CSS3画一个可爱动漫宠物 | Web前端之家www.jiangweishan.com</title>
<style>
*,
*:after,
*:before {
box-sizing: border-box;
}
:root {
--size: 50;
--unit: calc((var(--size) / 853) * 1vmin);
--pink: #efc7d0;
--pink-dark: #daa4ae;
--glare: radial-gradient(circle at center, rgba(255,255,255,0.5) 50%, rgba(255,255,255,0.15) 80%);
--inner-ear: #161922;
--border: #262626;
--eye-light: #4c9cae;
--eye-dark: #0e7486;
--pupil-backdrop: #053747;
}
body {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
min-height: 100vh;
background: #b9f;
}
.jigglypuff {
height: calc(805 * var(--unit));
width: calc(853 * var(--unit));
position: relative;
}
.jigglypuff * {
position: absolute;
}
.jigglypuff__body {
background: var(--pink-dark);
left: 9.5%;
top: 15%;
height: 77.25%;
width: 73%;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 60% 53% 61% 58%/53% 58% 58% 61%;
overflow: hidden;
}
.jigglypuff__body:before {
content: '';
background: var(--pink);
width: 239%;
height: 210%;
left: 57%;
bottom: 20%;
border-radius: 50%/0 0 100% 100%;
transform: translate(-50%, 0) rotate(4deg);
position: absolute;
transform-origin: bottom center;
}
.jigglypuff__left-arm {
top: 56%;
left: 0.75%;
height: 15%;
border: calc(5 * var(--unit)) solid var(--border);
width: 27%;
background: var(--pink-dark);
border-radius: 70% 0 0 100%/25% 0 0 75%;
transform-origin: 100% 50%;
transform: rotate(1deg);
overflow: hidden;
}
.jigglypuff__left-arm:before {
content: '';
position: absolute;
height: 100%;
width: 41%;
border-radius: 0 0 60% 0/0 0 83% 0;
background: radial-gradient(circle at 0 50%, var(--pink) 70%, var(--pink-dark) 90%);
left: -5%;
top: 50%;
transform: translate(0, -50%);
}
.jigglypuff__left-arm:after {
content: '';
top: 20%;
left: 7%;
height: 19%;
width: 15%;
background: var(--glare);
position: absolute;
border-radius: 50%;
}
.jigglypuff__right-arm {
top: 77%;
left: 58.5%;
background: var(--pink-dark);
width: 11%;
border: calc(5 * var(--unit)) solid var(--border);
height: 12%;
transform: rotate(-10deg);
border-radius: 0 0 50% 50%/0 0 100% 100%;
border-top: 0;
}
.jigglypuff__right-arm:before {
content: '';
position: absolute;
bottom: 20%;
left: 50%;
transform: translate(-50%, 0);
background: var(--pink);
height: 100%;
width: 80%;
border-radius: 0 0 50% 50%/0 0 100% 100%;
z-index: 2;
}
.jigglypuff__right-arm:after {
content: '';
position: absolute;
background: var(--glare);
height: 40%;
width: 25%;
border-radius: 50%;
left: 21%;
bottom: 57%;
z-index: 3;
transform: rotate(-10deg);
}
.jigglypuff__left-foot {
height: 26%;
width: 12%;
background: var(--pink-dark);
bottom: 0%;
left: 17%;
transform: rotate(70deg);
border-radius: 29% 70% 50% 50%/24% 39% 67% 55%;
border: calc(5 * var(--unit)) solid var(--border);
overflow: hidden;
}
.jigglypuff__left-foot:after {
content: '';
position: absolute;
bottom: -7%;
height: 60%;
width: 150%;
border-radius: 50%;
background: radial-gradient(circle at 50% 75%, var(--pink) 50%, var(--pink-dark));
}
.jigglypuff__left-foot:before {
content: '';
position: absolute;
bottom: 9%;
left: 20%;
height: 25%;
width: 30%;
background: var(--glare);
border-radius: 50%;
transform: rotate(-10deg);
z-index: 2;
}
.jigglypuff__right-foot {
height: 25%;
width: 13%;
background: var(--pink-dark);
border: calc(5 * var(--unit)) solid var(--border);
bottom: 0;
left: 61%;
border-radius: 25% 39% 45% 101%/50% 64% 56% 97%;
transform-origin: 0 100%;
transform: rotate(-51deg) translate(0, 29%);
overflow: hidden;
}
.jigglypuff__right-foot:before {
content: '';
position: absolute;
bottom: -10%;
background: radial-gradient(var(--pink) 50%, var(--pink-dark));
width: 165%;
height: 62%;
border-radius: 50%;
left: 50%;
transform: translate(-50%, 0);
}
.jigglypuff__right-foot:after {
content: '';
position: absolute;
height: 15%;
width: 35%;
background: var(--glare);
border-radius: 50%;
bottom: 20%;
right: 10%;
transform: rotate(50deg);
filter: blur(2px);
}
.jigglypuff__ear-left {
height: 30%;
width: 25%;
background: var(--pink);
left: 24%;
top: 0%;
transform-origin: 0 0;
transform: rotate(19deg);
border-radius: 9% 85% 25% 26%/17% 30% 0 50%;
border: calc(5 * var(--unit)) solid var(--border);
}
.jigglypuff__ear-left:after {
content: '';
height: 50%;
width: 75%;
background: var(--inner-ear);
position: absolute;
bottom: 91%;
left: 8%;
border: calc(5 * var(--unit)) solid var(--border);
transform-origin: 0 100%;
transform: rotate(28deg) translate(0, 100%);
border-radius: 50%/15%;
-webkit-clip-path: inset(0 0 90% 0);
clip-path: inset(0 0 90% 0);
}
.jigglypuff__ear-left-inner {
height: 80%;
width: 58%;
background: var(--inner-ear);
left: 10%;
top: 8%;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 15% 0 0 44%/20% 0 0 70%;
overflow: hidden;
-webkit-clip-path: polygon(0 9%, 100% 43%, 100% 100%, 0 100%);
clip-path: polygon(0 9%, 100% 43%, 100% 100%, 0 100%);
}
.jigglypuff__ear-left-inner:before {
content: '';
height: 42%;
width: 70%;
border-radius: 50%;
bottom: 0;
left: -11%;
position: absolute;
background: var(--glare);
}
.jigglypuff__ear-right {
height: 35%;
width: 31%;
border: calc(5 * var(--unit)) solid var(--border);
background: var(--pink);
right: 0%;
top: 35%;
transform-origin: 100% 0;
transform: rotate(30deg);
border-radius: 100% 5% 56% 0/51% 5% 65% 0;
}
.jigglypuff__ear-right:after {
content: '';
background: var(--inner-ear);
width: 61%;
height: 68%;
right: 4%;
top: 11%;
position: absolute;
border-top: calc(5 * var(--unit)) solid var(--border);
-webkit-clip-path: inset(0 0 97% 80%);
clip-path: inset(0 0 97% 80%);
}
.jigglypuff__ear-right-inner {
background: var(--inner-ear);
width: 61%;
height: 68%;
right: 8%;
top: 11%;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 95% 5% 46% 0/76% 5% 70% 0;
overflow: hidden;
box-shadow: calc(15 * var(--unit)) 0 calc(2 * var(--unit)) 0 var(--pink-dark);
}
.jigglypuff__ear-right-inner:before {
content: '';
z-index: 2;
background: var(--glare);
height: 50%;
width: 67%;
border-radius: 50%;
bottom: 4%;
right: -20%;
position: absolute;
}
.jigglypuff__mouth {
top: 47%;
left: 33%;
transform-origin: 0 50%;
height: 15%;
width: 18%;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 50%;
transform: rotate(16deg);
-webkit-clip-path: polygon(50% 10%, 91% 100%, 5% 100%);
clip-path: polygon(50% 10%, 91% 100%, 5% 100%);
}
.jigglypuff__tuft-container {
top: 11%;
left: 34%;
height: 37%;
width: 37%;
}
.jigglypuff__tuft-container:after {
content: '';
position: absolute;
bottom: 0;
left: 6%;
height: 50%;
width: 54%;
border-radius: 50%;
border: calc(5 * var(--unit)) solid var(--border);
background: var(--pink);
-webkit-clip-path: polygon(100% 23%, 47% 100%, 100% 100%);
clip-path: polygon(100% 23%, 47% 100%, 100% 100%);
}
.jigglypuff__tuft {
background: var(--pink);
height: 100%;
width: 100%;
border-radius: 85% 50% 50% 39%/80% 52% 50% 55%;
border: calc(5 * var(--unit)) solid var(--border);
-webkit-clip-path: polygon(0 0, 100% 0, 100% 43%, 33% 100%, 0 100%);
clip-path: polygon(0 0, 100% 0, 100% 43%, 33% 100%, 0 100%);
}
.jigglypuff__tuft-line {
height: 25%;
width: 34%;
top: 62%;
left: 40%;
border-radius: 95% 0 0 0/61% 0 0 0;
border-top: calc(5 * var(--unit)) solid var(--border);
}
.jigglypuff__eye-left {
height: 24%;
width: 21%;
border: calc(5 * var(--unit)) solid var(--border);
background: #fff;
top: 34%;
left: 16%;
border-radius: 55% 45% 60% 40%/58% 41% 61% 42%;
}
.jigglypuff__eye-left:after {
content: '';
position: absolute;
right: 13%;
top: 41%;
height: 13%;
width: 14%;
background: #fff;
-webkit-clip-path: polygon(20% 87%, 50% 66%, 80% 87%, 67% 54%, 96% 35%, 60% 35%, 50% 5%, 40% 35%, 4% 35%, 33% 54%);
clip-path: polygon(20% 87%, 50% 66%, 80% 87%, 67% 54%, 96% 35%, 60% 35%, 50% 5%, 40% 35%, 4% 35%, 33% 54%);
-webkit-animation: twinkle 1.5s 0.75s infinite;
animation: twinkle 1.5s 0.75s infinite;
}
.jigglypuff__eye-left-pupil {
border: calc(5 * var(--unit)) solid var(--border);
height: 77%;
width: 78%;
right: 2%;
top: 10%;
border-radius: 55% 45% 60% 40%/58% 41% 61% 42%;
background: radial-gradient(circle at 50% 120%, var(--eye-light) 40%, transparent 50%), radial-gradient(circle at 85% 34%, var(--pupil-backdrop), transparent), var(--eye-dark);
}
.jigglypuff__eye-left-pupil:after {
content: '';
position: absolute;
top: 11%;
right: 10%;
height: 25%;
width: 26%;
background: radial-gradient(#fff 75%, transparent);
border-radius: 50%;
}
.jigglypuff__eye-left-pupil:before {
content: '';
height: 20%;
width: 28%;
bottom: 5%;
left: 18%;
background: var(--glare);
border-radius: 50%;
position: absolute;
z-index: 2;
}
.jigglypuff__eye-right {
border: calc(5 * var(--unit)) solid var(--border);
top: 46%;
left: 51%;
height: 25%;
width: 21%;
border-radius: 61% 48% 56% 50%/50% 50% 58% 50%;
background: #fff;
}
.jigglypuff__eye-right:after {
content: '';
position: absolute;
right: 13%;
top: 41%;
height: 13%;
width: 14%;
background: #fff;
-webkit-clip-path: polygon(20% 87%, 50% 66%, 80% 87%, 67% 54%, 96% 35%, 60% 35%, 50% 5%, 40% 35%, 4% 35%, 33% 54%);
clip-path: polygon(20% 87%, 50% 66%, 80% 87%, 67% 54%, 96% 35%, 60% 35%, 50% 5%, 40% 35%, 4% 35%, 33% 54%);
-webkit-animation: twinkle 2s infinite;
animation: twinkle 2s infinite;
}
.jigglypuff__eye-right-pupil {
height: 79%;
width: 81%;
right: 2%;
top: 10%;
overflow: hidden;
border: calc(5 * var(--unit)) solid var(--border);
border-radius: 61% 48% 56% 50%/50% 50% 58% 50%;
background: radial-gradient(circle at 50% 120%, var(--eye-light) 40%, transparent 50%), radial-gradient(circle at 71% 24%, var(--pupil-backdrop), transparent), var(--eye-dark);
}
.jigglypuff__eye-right-pupil:after {
content: '';
position: absolute;
top: 7%;
right: 15%;
height: 24%;
width: 27%;
border-radius: 50%;
background: radial-gradient(#fff 75%, transparent);
}
.jigglypuff__eye-right-pupil:before {
content: '';
position: absolute;
bottom: 5%;
left: 18%;
border-radius: 50%;
height: 20%;
width: 37%;
background: var(--glare);
z-index: 2;
}
label {
margin-bottom: 1rem;
z-index: 3;
}
:checked {
z-index: 3;
}
:checked ~ .jigglypuff .jigglypuff__body {
overflow: visible;
}
@-webkit-keyframes twinkle {
0% {
transform: rotate(0deg) scale(0);
}
50% {
transform: rotate(540deg) scale(1.2);
}
100% {
transform: rotate(1080deg) scale(0);
}
}
@keyframes twinkle {
0% {
transform: rotate(0deg) scale(0);
}
50% {
transform: rotate(540deg) scale(1.2);
}
100% {
transform: rotate(1080deg) scale(0);
}
}
</style>
</head>
<body>
<label for="toggle">Toggle body overflow</label>
<input id="toggle" type="checkbox"/>
<div class="jigglypuff">
<div class="jigglypuff__left-arm"></div>
<div class="jigglypuff__left-foot"></div>
<div class="jigglypuff__right-foot"></div>
<div class="jigglypuff__ear-left">
<div class="jigglypuff__ear-left-inner"></div>
</div>
<div class="jigglypuff__ear-right">
<div class="jigglypuff__ear-right-inner"></div>
</div>
<div class="jigglypuff__body"></div>
<div class="jigglypuff__right-arm"></div>
<div class="jigglypuff__mouth"></div>
<div class="jigglypuff__eye-left">
<div class="jigglypuff__eye-left-pupil"></div>
</div>
<div class="jigglypuff__eye-right">
<div class="jigglypuff__eye-right-pupil"></div>
</div>
<div class="jigglypuff__tuft-container">
<div class="jigglypuff__tuft"></div>
<div class="jigglypuff__tuft-line"></div>
</div>
</div>
</body>
</html>