今天来分享些CSS3动画的应用:宠物躺着招手动画特效。上次我也分享过类似的动画效果,没看过的可以先看看。
先下我们今天要分享的宠物动画预览图:
原理解析
对于宠物动画,第一步我们需要先用CSS3画宠物的形状和涂色。
这个是一个比较复杂的活,我们需要把宠物分很多小块去实现。比如:
<div class="snorlax">
<div class="snorlax__head">
<div class="snorlax__head-outline"></div>
<div class="snorlax__ear snorlax__ear--left"></div>
<div class="snorlax__ear snorlax__ear--right"></div>
<div class="snorlax__brow snorlax__brow--left"></div>
<div class="snorlax__brow snorlax__brow--right"></div>
<div class="snorlax__eye snorlax__eye--left"></div>
<div class="snorlax__eye snorlax__eye--right"></div>
<div class="snorlax__mouth">
<div class="snorlax__tooth snorlax__tooth--left"></div>
<div class="snorlax__tooth snorlax__tooth--right"></div>
</div>
</div>
<div class="snorlax__arm-left">
<div class="snorlax__arm-wrapper">
<div class="snorlax__claws--left"></div>
<div class="snorlax__arm-left-arm"></div>
</div>
</div>
<div class="snorlax__arm-right">
<div class="snorlax__claws--right"></div>
<div class="snorlax__arm-right-arm"></div>
<div class="snorlax__claw"></div>
</div>
<div class="snorlax__body">
<div class="snorlax__body-shade"></div>
<div class="snorlax__belly">
<div class="snorlax__belly-segment snorlax__belly-segment--one"></div>
<div class="snorlax__belly-segment snorlax__belly-segment--two"></div>
</div>
</div>
<div class="snorlax__left-foot">
<div class="snorlax__left-foot-foot"></div>
<div class="snorlax__foot-claw snorlax__foot-claw--one">
<div></div>
</div>
<div class="snorlax__foot-claw snorlax__foot-claw--two">
<div></div>
</div>
<div class="snorlax__foot-claw snorlax__foot-claw--three">
<div></div>
</div>
</div>
<div class="snorlax__right-foot">
<div class="snorlax__right-foot-foot"></div>
<div class="snorlax__foot-claw snorlax__foot-claw--four">
<div></div>
</div>
<div class="snorlax__foot-claw snorlax__foot-claw--five">
<div></div>
</div>
<div class="snorlax__foot-claw snorlax__foot-claw--six">
<div></div>
</div>
</div>
</div>
然后针对每一小块进行CSS3编译。
*,
*:after,
*:before {
box-sizing: border-box;
}
:root {
--size: 60;
--unit: calc((var(--size) / 300) * 1vmin);
--belly: #f1debb;
--dark-belly: #b59c78;
--body: #355a50;
--dark-body: #162c37;
--foot: #965b3c;
--claws: #fafafa;
}
body {
min-height: 100vh;
display: flex;
align-items: center;
background: #177082;
justify-content: center;
}
.snorlax {
height: calc(237 * var(--unit));
width: calc(300 * var(--unit));
position: relative;
}
.snorlax *,
.snorlax *:after,
.snorlax *:before {
position: absolute;
}
.snorlax:before {
content: '';
position: absolute;
bottom: 0;
width: 100%;
height: 20%;
border-radius: 50%;
filter: blur(10px);
opacity: 0.5;
background: #111;
transform: translate(-50%, 25%);
left: 50%;
}
.snorlax__body {
border-radius: 50% 45% 50% 50%/68% 50% 28% 30%;
height: 74%;
width: 79%;
border: calc(2 * var(--unit)) solid #000;
background: var(--body);
overflow: hidden;
top: 60%;
left: 47%;
transform: translate(-50%, -50%);
}
.snorlax__body-shade {
background: var(--dark-body);
height: 30%;
width: 80%;
bottom: 0;
border-radius: 50%;
left: 50%;
transform: translate(-50%, 50%);
}
.snorlax__body-shade:after {
content: '';
position: absolute;
width: 25%;
height: 150%;
border-radius: 50%;
background: var(--dark-body);
left: 9%;
bottom: 24%;
transform: rotate(-22deg);
}
.snorlax__brow {
background: var(--belly);
}
.snorlax__brow--left {
width: 50%;
height: 100%;
left: 5%;
top: 11%;
border-radius: 65% 47% 0 50%/70% 39% 0 44%;
}
.snorlax__brow--right {
width: 54%;
height: 100%;
right: 4%;
top: 10%;
overflow: hidden;
border-radius: 45% 80% 0 50%/72% 77% 0 44%;
}
.snorlax__brow--right:before {
content: '';
right: 0;
height: 100%;
width: 32%;
bottom: 0;
background: var(--dark-belly);
z-index: 2;
}
.snorlax__brow--right:after {
content: '';
right: 16%;
height: 100%;
width: 32%;
bottom: 36%;
background: var(--belly);
z-index: 3;
border-radius: 0 0 75% 0/0 0 36% 0;
}
.snorlax__eye {
height: calc(2 * var(--unit));
width: 15%;
background: #000;
top: 33%;
z-index: 5;
}
.snorlax__eye--left {
left: 21%;
}
.snorlax__eye--right {
right: 25%;
}
.snorlax__mouth {
height: calc(2 * var(--unit));
width: 30%;
background: #000;
top: 52%;
left: 48%;
transform: translate(-50%, 0);
}
.snorlax__tooth {
background: #000;
height: 235%;
width: 20%;
bottom: 100%;
-webkit-clip-path: polygon(0 100%, 50% 0, 100% 100%);
clip-path: polygon(0 100%, 50% 0, 100% 100%);
}
.snorlax__tooth:after {
content: '';
background: var(--claws);
height: 100%;
width: 100%;
-webkit-clip-path: polygon(0 100%, 50% 0, 100% 100%);
clip-path: polygon(0 100%, 50% 0, 100% 100%);
transform-origin: bottom center;
transform: scale(0.65);
}
.snorlax__tooth--left {
left: 0;
}
.snorlax__tooth--right {
right: 0;
}
.snorlax__head {
height: 30%;
width: 45%;
left: 50%;
top: 5%;
transform: translate(-50%, 0);
}
.snorlax__head-outline {
background: var(--body);
height: 100%;
width: 100%;
border: calc(2 * var(--unit)) solid #000;
border-radius: 75% 75% 25% 25%/110% 110% 0% 0%;
overflow: hidden;
}
.snorlax__head-outline:after {
content: '';
right: -5%;
height: 110%;
width: 15%;
border-radius: 50%/50%;
top: -5%;
background: var(--dark-body);
}
.snorlax__ear {
height: 64%;
border: calc(2 * var(--unit)) solid #000;
background: var(--body);
top: -14%;
width: 35%;
position: absolute;
overflow: hidden;
border-radius: 15% 85% 0 10%/20% 100% 0 80%;
-webkit-clip-path: polygon(0 0, 100% 0, 100% 18%, 0 90%);
clip-path: polygon(0 0, 100% 0, 100% 18%, 0 90%);
}
.snorlax__ear:before {
content: '';
top: 0;
left: 0;
background: var(--body);
position: absolute;
z-index: 2;
height: 100%;
width: 15%;
border-radius: 28%;
transform-origin: top center;
transform: rotate(-67deg) translate(11%, 23%);
}
.snorlax__ear--left {
left: 4%;
}
.snorlax__ear--right {
right: 4%;
top: -15%;
transform: rotateY(180deg);
}
.snorlax__ear--right:after {
content: '';
left: -10%;
width: 25%;
background: var(--dark-body);
height: 100%;
top: -10%;
border-radius: 50%/50%;
}
.snorlax__belly {
position: absolute;
height: 50%;
width: 82%;
left: 50%;
top: 0;
transform: translate(-49%, 0%);
}
.snorlax__belly:after {
content: '';
position: absolute;
width: 58%;
height: 50%;
border-top: calc(10 * var(--unit)) solid var(--belly);
top: 90%;
left: 50%;
-webkit-clip-path: polygon(5% 0, 79% 0, 90% 100%, 5% 100%);
clip-path: polygon(5% 0, 79% 0, 90% 100%, 5% 100%);
transform: translate(-50%, -26%);
z-index: 3;
border-radius: 50% 50% 0 0/50% 50% 50% 50%;
}
.snorlax__belly-segment--one {
height: 83%;
width: 100%;
bottom: 0%;
left: 0%;
background: var(--belly);
transform-origin: 0 100%;
transform: translate(6.5%, 13%) rotate(-20deg);
border-radius: 40% 55% 0 17%/60% 100% 0% 40%;
-webkit-clip-path: polygon(0 0, 75% 0, 75% 100%, 0 100%);
clip-path: polygon(0 0, 75% 0, 75% 100%, 0 100%);
z-index: 2;
}
.snorlax__belly-segment--one:before {
content: '';
position: absolute;
top: 100%;
background: var(--belly);
left: 50%;
height: 80%;
width: 80%;
border-radius: 10%;
transform: translate(-50%, -81%) rotate(10deg);
}
.snorlax__belly-segment--two {
height: 90%;
width: 100%;
bottom: 0%;
right: 0%;
transform-origin: 100% 100%;
background: var(--dark-belly);
transform: translate(-7%, 14%) rotate(20deg);
border-radius: 0% 34% 34% 0/0% 60% 40% 0%;
-webkit-clip-path: polygon(30% 0, 100% 0, 100% 150%, 30% 150%);
clip-path: polygon(30% 0, 100% 0, 100% 150%, 30% 150%);
}
.snorlax__belly-segment--two:after {
content: '';
position: absolute;
right: 10%;
top: -4%;
width: 100%;
height: 102%;
transform-origin: right bottom;
transform: rotate(-2deg);
background: var(--belly);
z-index: 3;
border-radius: 0 14% 19% 0/0 50% 50% 0;
}
.snorlax__belly-segment--two:before {
content: '';
background: var(--belly);
position: absolute;
z-index: 2;
height: 50%;
width: 50%;
bottom: 0;
left: 50%;
transform: translate(-50%, 31%) rotate(-20deg);
}
.snorlax__arm-left {
height: 85%;
width: 24%;
left: 12%;
top: 14%;
transform: rotate(-21deg);
}
.snorlax__claws--left {
background: #000;
top: -4%;
width: 60%;
height: 10%;
left: 48%;
-webkit-clip-path: polygon(7% 100%, 7% 39%, 25% 73%, 22% 11%, 39% 42%, 49% 0, 61% 46%, 74% 11%, 79% 58%, 95% 44%, 90% 100%);
clip-path: polygon(7% 100%, 7% 39%, 25% 73%, 22% 11%, 39% 42%, 49% 0, 61% 46%, 74% 11%, 79% 58%, 95% 44%, 90% 100%);
transform: translate(-50%, 0);
}
.snorlax__claws--left:after {
content: '';
width: 100%;
height: 100%;
-webkit-clip-path: polygon(7% 100%, 7% 39%, 25% 73%, 22% 11%, 39% 42%, 49% 0, 61% 46%, 74% 11%, 79% 58%, 95% 44%, 90% 100%);
clip-path: polygon(7% 100%, 7% 39%, 25% 73%, 22% 11%, 39% 42%, 49% 0, 61% 46%, 74% 11%, 79% 58%, 95% 44%, 90% 100%);
transform-origin: bottom center;
background: #fff;
transform: scaleY(0.8) scaleX(0.95);
}
.snorlax__arm-left-arm {
background: var(--body);
height: 68%;
width: 100%;
top: 0;
left: 0;
border-radius: 44% 54% 50% 50%/50% 60% 40% 50%;
transform-origin: 50% 60%;
transform: rotate(0deg);
overflow: hidden;
border: calc(2 * var(--unit)) solid #000;
}
.snorlax__arm-left-arm:after {
content: '';
right: 0;
width: 50%;
background: var(--dark-body);
height: 120%;
top: 50%;
transform: translate(56%, -50%) rotate(-15deg);
border-radius: 50%;
-webkit-clip-path: inset(0 50% 0 0);
clip-path: inset(0 50% 0 0);
-webkit-animation: fade 6s infinite linear;
animation: fade 6s infinite linear;
}
@-webkit-keyframes fade {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
@keyframes fade {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
.snorlax__arm-wrapper {
-webkit-animation: wave 6s infinite ease;
animation: wave 6s infinite ease;
height: 100%;
width: 100%;
transform-origin: 56% 41%;
}
@-webkit-keyframes wave {
0, 100% {
transform: rotate(0deg);
}
50% {
transform: rotate(-100deg);
}
}
@keyframes wave {
0, 100% {
transform: rotate(0deg);
}
50% {
transform: rotate(-100deg);
}
}
.snorlax__arm-right {
height: 50%;
width: 17%;
right: 7%;
top: 28%;
transform: rotate(-39deg);
}
.snorlax__claw {
bottom: 0;
width: 15%;
height: 9%;
background: #000;
transform: translate(109%, 19%) rotate(45deg);
-webkit-clip-path: polygon(0 0, 100% 0, 50% 100%);
clip-path: polygon(0 0, 100% 0, 50% 100%);
}
.snorlax__claw:after {
content: '';
-webkit-clip-path: polygon(0 0, 100% 0, 50% 100%);
clip-path: polygon(0 0, 100% 0, 50% 100%);
height: 100%;
width: 100%;
background: #fff;
transform: scale(0.5);
}
.snorlax__arm-right-arm {
height: 100%;
width: 100%;
border-radius: 25% 75% 65% 35%/56% 60% 40% 30%;
background: var(--dark-body);
overflow: hidden;
border: calc(2 * var(--unit)) solid #000;
}
.snorlax__arm-right-arm:after {
content: '';
height: 100%;
width: 130%;
border-radius: 50%;
background: var(--body);
bottom: 8%;
left: -9%;
}
.snorlax__claws--right {
bottom: -6%;
left: 25%;
height: 22%;
width: 57%;
background: #000;
-webkit-clip-path: polygon(20% 0, 16% 100%, 35% 78%, 55% 97%, 63% 69%, 85% 78%, 85% 56%, 100% 66%, 100% 0);
clip-path: polygon(20% 0, 16% 100%, 35% 78%, 55% 97%, 63% 69%, 85% 78%, 85% 56%, 100% 66%, 100% 0);
}
.snorlax__claws--right:after {
height: 100%;
width: 100%;
content: '';
background: #fff;
-webkit-clip-path: polygon(20% 0, 16% 100%, 35% 78%, 55% 97%, 63% 69%, 85% 78%, 85% 56%, 100% 66%, 100% 0);
clip-path: polygon(20% 0, 16% 100%, 35% 78%, 55% 97%, 63% 69%, 85% 78%, 85% 56%, 100% 66%, 100% 0);
transform-origin: top center;
transform: scaleY(0.85) scaleX(0.85);
}
.snorlax__left-foot {
height: 34%;
width: 29%;
bottom: 0;
left: 2.5%;
}
.snorlax__left-foot-foot {
height: 100%;
width: 100%;
top: 0;
left: 0;
background: var(--belly);
border-radius: 60% 40% 55% 40%/60% 45% 55% 40%;
border: calc(2 * (var(--unit))) solid #000;
overflow: hidden;
}
.snorlax__left-foot-foot:after,
.snorlax__left-foot-foot:before {
content: '';
}
.snorlax__left-foot-foot:after {
border: calc(2 * var(--unit)) solid #000;
height: 38%;
width: 49%;
border-radius: 50%;
background: var(--foot);
left: 38%;
bottom: 11%;
transform: rotate(-36deg);
}
.snorlax__left-foot-foot:before {
background: var(--dark-belly);
height: 73%;
width: 100%;
left: 32%;
bottom: 0;
transform-origin: left center;
border-radius: 61% 20% 20% 37%/73% 50% 50% 50%;
transform: rotate(10deg);
}
.snorlax__foot-claw {
top: 50%;
left: 50%;
width: 20%;
height: 30%;
}
.snorlax__foot-claw:after {
content: '';
background: var(--claws);
bottom: 12%;
height: 35%;
width: 67%;
left: 15%;
border-radius: 50%;
}
.snorlax__foot-claw:before {
content: '';
bottom: 2%;
left: 0;
width: 100%;
height: 56%;
border-radius: 50%;
background: var(--claws);
border: calc(3 * var(--unit)) solid #000;
}
.snorlax__foot-claw > div {
width: 100%;
height: 66%;
top: 0;
left: 0;
background: #000;
-webkit-clip-path: polygon(0 100%, calc(var(--clip-point) * 1%) 0, 100% 100%);
clip-path: polygon(0 100%, calc(var(--clip-point) * 1%) 0, 100% 100%);
}
.snorlax__foot-claw > div:after {
content: '';
height: 100%;
width: 100%;
background: var(--claws);
bottom: 0;
left: 0;
transform-origin: bottom center;
transform: scale(0.7);
-webkit-clip-path: polygon(0 100%, calc(var(--clip-point) * 1%) 0, 100% 100%);
clip-path: polygon(0 100%, calc(var(--clip-point) * 1%) 0, 100% 100%);
}
.snorlax__foot-claw--one {
--clip-point: 65;
left: -5%;
top: 52%;
transform: rotate(-90deg);
width: 15%;
height: 23%;
}
.snorlax__foot-claw--two {
--clip-point: 50;
top: 9%;
left: 3%;
height: 26%;
transform: rotate(-45deg);
}
.snorlax__foot-claw--three {
--clip-point: 20;
top: -10%;
left: 34%;
width: 21%;
height: 25%;
}
.snorlax__foot-claw--four {
--clip-point: 20;
top: -18%;
left: 49%;
width: 21%;
height: 34%;
transform: rotate(45deg);
}
.snorlax__foot-claw--five {
--clip-point: 50;
top: 0%;
left: 78%;
width: 21%;
height: 31%;
transform: rotate(40deg);
}
.snorlax__foot-claw--six {
--clip-point: 50;
top: 37%;
left: 95%;
width: 19%;
height: 27%;
transform: rotate(90deg);
}
.snorlax__right-foot {
bottom: 0;
right: 6.5%;
width: 28%;
height: 35%;
}
.snorlax__right-foot-foot {
height: 100%;
width: 100%;
border: calc(2 * var(--unit)) solid #000;
background: var(--belly);
overflow: hidden;
border-radius: 50% 50% 50% 50%/50% 45% 55% 50%;
}
.snorlax__right-foot-foot:before,
.snorlax__right-foot-foot:after {
content: '';
bottom: 0;
}
.snorlax__right-foot-foot:before {
left: 5%;
border-radius: 50%;
height: 62%;
width: 77%;
background: var(--dark-belly);
}
.snorlax__right-foot-foot:after {
left: 10%;
border-radius: 50%;
border: calc(2 * var(--unit)) solid #000;
bottom: 14%;
height: 42%;
background: var(--foot);
width: 55%;
}
最后我们,我们根据要求,对宠物需要做动画的部分设置动画效果。完整的DEMO代码如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CSS3动画:宠物躺着招手动画特效 | WEB前端之家https://www.jiangweishan.com</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <style> *, *:after, *:before { box-sizing: border-box; } :root { --size: 60; --unit: calc((var(--size) / 300) * 1vmin); --belly: #f1debb; --dark-belly: #b59c78; --body: #355a50; --dark-body: #162c37; --foot: #965b3c; --claws: #fafafa; } body { min-height: 100vh; display: flex; align-items: center; background: #177082; justify-content: center; } .snorlax { height: calc(237 * var(--unit)); width: calc(300 * var(--unit)); position: relative; } .snorlax *, .snorlax *:after, .snorlax *:before { position: absolute; } .snorlax:before { content: ''; position: absolute; bottom: 0; width: 100%; height: 20%; border-radius: 50%; filter: blur(10px); opacity: 0.5; background: #111; transform: translate(-50%, 25%); left: 50%; } .snorlax__body { border-radius: 50% 45% 50% 50%/68% 50% 28% 30%; height: 74%; width: 79%; border: calc(2 * var(--unit)) solid #000; background: var(--body); overflow: hidden; top: 60%; left: 47%; transform: translate(-50%, -50%); } .snorlax__body-shade { background: var(--dark-body); height: 30%; width: 80%; bottom: 0; border-radius: 50%; left: 50%; transform: translate(-50%, 50%); } .snorlax__body-shade:after { content: ''; position: absolute; width: 25%; height: 150%; border-radius: 50%; background: var(--dark-body); left: 9%; bottom: 24%; transform: rotate(-22deg); } .snorlax__brow { background: var(--belly); } .snorlax__brow--left { width: 50%; height: 100%; left: 5%; top: 11%; border-radius: 65% 47% 0 50%/70% 39% 0 44%; } .snorlax__brow--right { width: 54%; height: 100%; right: 4%; top: 10%; overflow: hidden; border-radius: 45% 80% 0 50%/72% 77% 0 44%; } .snorlax__brow--right:before { content: ''; right: 0; height: 100%; width: 32%; bottom: 0; background: var(--dark-belly); z-index: 2; } .snorlax__brow--right:after { content: ''; right: 16%; height: 100%; width: 32%; bottom: 36%; background: var(--belly); z-index: 3; border-radius: 0 0 75% 0/0 0 36% 0; } .snorlax__eye { height: calc(2 * var(--unit)); width: 15%; background: #000; top: 33%; z-index: 5; } .snorlax__eye--left { left: 21%; } .snorlax__eye--right { right: 25%; } .snorlax__mouth { height: calc(2 * var(--unit)); width: 30%; background: #000; top: 52%; left: 48%; transform: translate(-50%, 0); } .snorlax__tooth { background: #000; height: 235%; width: 20%; bottom: 100%; -webkit-clip-path: polygon(0 100%, 50% 0, 100% 100%); clip-path: polygon(0 100%, 50% 0, 100% 100%); } .snorlax__tooth:after { content: ''; background: var(--claws); height: 100%; width: 100%; -webkit-clip-path: polygon(0 100%, 50% 0, 100% 100%); clip-path: polygon(0 100%, 50% 0, 100% 100%); transform-origin: bottom center; transform: scale(0.65); } .snorlax__tooth--left { left: 0; } .snorlax__tooth--right { right: 0; } .snorlax__head { height: 30%; width: 45%; left: 50%; top: 5%; transform: translate(-50%, 0); } .snorlax__head-outline { background: var(--body); height: 100%; width: 100%; border: calc(2 * var(--unit)) solid #000; border-radius: 75% 75% 25% 25%/110% 110% 0% 0%; overflow: hidden; } .snorlax__head-outline:after { content: ''; right: -5%; height: 110%; width: 15%; border-radius: 50%/50%; top: -5%; background: var(--dark-body); } .snorlax__ear { height: 64%; border: calc(2 * var(--unit)) solid #000; background: var(--body); top: -14%; width: 35%; position: absolute; overflow: hidden; border-radius: 15% 85% 0 10%/20% 100% 0 80%; -webkit-clip-path: polygon(0 0, 100% 0, 100% 18%, 0 90%); clip-path: polygon(0 0, 100% 0, 100% 18%, 0 90%); } .snorlax__ear:before { content: ''; top: 0; left: 0; background: var(--body); position: absolute; z-index: 2; height: 100%; width: 15%; border-radius: 28%; transform-origin: top center; transform: rotate(-67deg) translate(11%, 23%); } .snorlax__ear--left { left: 4%; } .snorlax__ear--right { right: 4%; top: -15%; transform: rotateY(180deg); } .snorlax__ear--right:after { content: ''; left: -10%; width: 25%; background: var(--dark-body); height: 100%; top: -10%; border-radius: 50%/50%; } .snorlax__belly { position: absolute; height: 50%; width: 82%; left: 50%; top: 0; transform: translate(-49%, 0%); } .snorlax__belly:after { content: ''; position: absolute; width: 58%; height: 50%; border-top: calc(10 * var(--unit)) solid var(--belly); top: 90%; left: 50%; -webkit-clip-path: polygon(5% 0, 79% 0, 90% 100%, 5% 100%); clip-path: polygon(5% 0, 79% 0, 90% 100%, 5% 100%); transform: translate(-50%, -26%); z-index: 3; border-radius: 50% 50% 0 0/50% 50% 50% 50%; } .snorlax__belly-segment--one { height: 83%; width: 100%; bottom: 0%; left: 0%; background: var(--belly); transform-origin: 0 100%; transform: translate(6.5%, 13%) rotate(-20deg); border-radius: 40% 55% 0 17%/60% 100% 0% 40%; -webkit-clip-path: polygon(0 0, 75% 0, 75% 100%, 0 100%); clip-path: polygon(0 0, 75% 0, 75% 100%, 0 100%); z-index: 2; } .snorlax__belly-segment--one:before { content: ''; position: absolute; top: 100%; background: var(--belly); left: 50%; height: 80%; width: 80%; border-radius: 10%; transform: translate(-50%, -81%) rotate(10deg); } .snorlax__belly-segment--two { height: 90%; width: 100%; bottom: 0%; right: 0%; transform-origin: 100% 100%; background: var(--dark-belly); transform: translate(-7%, 14%) rotate(20deg); border-radius: 0% 34% 34% 0/0% 60% 40% 0%; -webkit-clip-path: polygon(30% 0, 100% 0, 100% 150%, 30% 150%); clip-path: polygon(30% 0, 100% 0, 100% 150%, 30% 150%); } .snorlax__belly-segment--two:after { content: ''; position: absolute; right: 10%; top: -4%; width: 100%; height: 102%; transform-origin: right bottom; transform: rotate(-2deg); background: var(--belly); z-index: 3; border-radius: 0 14% 19% 0/0 50% 50% 0; } .snorlax__belly-segment--two:before { content: ''; background: var(--belly); position: absolute; z-index: 2; height: 50%; width: 50%; bottom: 0; left: 50%; transform: translate(-50%, 31%) rotate(-20deg); } .snorlax__arm-left { height: 85%; width: 24%; left: 12%; top: 14%; transform: rotate(-21deg); } .snorlax__claws--left { background: #000; top: -4%; width: 60%; height: 10%; left: 48%; -webkit-clip-path: polygon(7% 100%, 7% 39%, 25% 73%, 22% 11%, 39% 42%, 49% 0, 61% 46%, 74% 11%, 79% 58%, 95% 44%, 90% 100%); clip-path: polygon(7% 100%, 7% 39%, 25% 73%, 22% 11%, 39% 42%, 49% 0, 61% 46%, 74% 11%, 79% 58%, 95% 44%, 90% 100%); transform: translate(-50%, 0); } .snorlax__claws--left:after { content: ''; width: 100%; height: 100%; -webkit-clip-path: polygon(7% 100%, 7% 39%, 25% 73%, 22% 11%, 39% 42%, 49% 0, 61% 46%, 74% 11%, 79% 58%, 95% 44%, 90% 100%); clip-path: polygon(7% 100%, 7% 39%, 25% 73%, 22% 11%, 39% 42%, 49% 0, 61% 46%, 74% 11%, 79% 58%, 95% 44%, 90% 100%); transform-origin: bottom center; background: #fff; transform: scaleY(0.8) scaleX(0.95); } .snorlax__arm-left-arm { background: var(--body); height: 68%; width: 100%; top: 0; left: 0; border-radius: 44% 54% 50% 50%/50% 60% 40% 50%; transform-origin: 50% 60%; transform: rotate(0deg); overflow: hidden; border: calc(2 * var(--unit)) solid #000; } .snorlax__arm-left-arm:after { content: ''; right: 0; width: 50%; background: var(--dark-body); height: 120%; top: 50%; transform: translate(56%, -50%) rotate(-15deg); border-radius: 50%; -webkit-clip-path: inset(0 50% 0 0); clip-path: inset(0 50% 0 0); -webkit-animation: fade 6s infinite linear; animation: fade 6s infinite linear; } @-webkit-keyframes fade { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } @keyframes fade { 0%, 100% { opacity: 1; } 50% { opacity: 0; } } .snorlax__arm-wrapper { -webkit-animation: wave 6s infinite ease; animation: wave 6s infinite ease; height: 100%; width: 100%; transform-origin: 56% 41%; } @-webkit-keyframes wave { 0, 100% { transform: rotate(0deg); } 50% { transform: rotate(-100deg); } } @keyframes wave { 0, 100% { transform: rotate(0deg); } 50% { transform: rotate(-100deg); } } .snorlax__arm-right { height: 50%; width: 17%; right: 7%; top: 28%; transform: rotate(-39deg); } .snorlax__claw { bottom: 0; width: 15%; height: 9%; background: #000; transform: translate(109%, 19%) rotate(45deg); -webkit-clip-path: polygon(0 0, 100% 0, 50% 100%); clip-path: polygon(0 0, 100% 0, 50% 100%); } .snorlax__claw:after { content: ''; -webkit-clip-path: polygon(0 0, 100% 0, 50% 100%); clip-path: polygon(0 0, 100% 0, 50% 100%); height: 100%; width: 100%; background: #fff; transform: scale(0.5); } .snorlax__arm-right-arm { height: 100%; width: 100%; border-radius: 25% 75% 65% 35%/56% 60% 40% 30%; background: var(--dark-body); overflow: hidden; border: calc(2 * var(--unit)) solid #000; } .snorlax__arm-right-arm:after { content: ''; height: 100%; width: 130%; border-radius: 50%; background: var(--body); bottom: 8%; left: -9%; } .snorlax__claws--right { bottom: -6%; left: 25%; height: 22%; width: 57%; background: #000; -webkit-clip-path: polygon(20% 0, 16% 100%, 35% 78%, 55% 97%, 63% 69%, 85% 78%, 85% 56%, 100% 66%, 100% 0); clip-path: polygon(20% 0, 16% 100%, 35% 78%, 55% 97%, 63% 69%, 85% 78%, 85% 56%, 100% 66%, 100% 0); } .snorlax__claws--right:after { height: 100%; width: 100%; content: ''; background: #fff; -webkit-clip-path: polygon(20% 0, 16% 100%, 35% 78%, 55% 97%, 63% 69%, 85% 78%, 85% 56%, 100% 66%, 100% 0); clip-path: polygon(20% 0, 16% 100%, 35% 78%, 55% 97%, 63% 69%, 85% 78%, 85% 56%, 100% 66%, 100% 0); transform-origin: top center; transform: scaleY(0.85) scaleX(0.85); } .snorlax__left-foot { height: 34%; width: 29%; bottom: 0; left: 2.5%; } .snorlax__left-foot-foot { height: 100%; width: 100%; top: 0; left: 0; background: var(--belly); border-radius: 60% 40% 55% 40%/60% 45% 55% 40%; border: calc(2 * (var(--unit))) solid #000; overflow: hidden; } .snorlax__left-foot-foot:after, .snorlax__left-foot-foot:before { content: ''; } .snorlax__left-foot-foot:after { border: calc(2 * var(--unit)) solid #000; height: 38%; width: 49%; border-radius: 50%; background: var(--foot); left: 38%; bottom: 11%; transform: rotate(-36deg); } .snorlax__left-foot-foot:before { background: var(--dark-belly); height: 73%; width: 100%; left: 32%; bottom: 0; transform-origin: left center; border-radius: 61% 20% 20% 37%/73% 50% 50% 50%; transform: rotate(10deg); } .snorlax__foot-claw { top: 50%; left: 50%; width: 20%; height: 30%; } .snorlax__foot-claw:after { content: ''; background: var(--claws); bottom: 12%; height: 35%; width: 67%; left: 15%; border-radius: 50%; } .snorlax__foot-claw:before { content: ''; bottom: 2%; left: 0; width: 100%; height: 56%; border-radius: 50%; background: var(--claws); border: calc(3 * var(--unit)) solid #000; } .snorlax__foot-claw > div { width: 100%; height: 66%; top: 0; left: 0; background: #000; -webkit-clip-path: polygon(0 100%, calc(var(--clip-point) * 1%) 0, 100% 100%); clip-path: polygon(0 100%, calc(var(--clip-point) * 1%) 0, 100% 100%); } .snorlax__foot-claw > div:after { content: ''; height: 100%; width: 100%; background: var(--claws); bottom: 0; left: 0; transform-origin: bottom center; transform: scale(0.7); -webkit-clip-path: polygon(0 100%, calc(var(--clip-point) * 1%) 0, 100% 100%); clip-path: polygon(0 100%, calc(var(--clip-point) * 1%) 0, 100% 100%); } .snorlax__foot-claw--one { --clip-point: 65; left: -5%; top: 52%; transform: rotate(-90deg); width: 15%; height: 23%; } .snorlax__foot-claw--two { --clip-point: 50; top: 9%; left: 3%; height: 26%; transform: rotate(-45deg); } .snorlax__foot-claw--three { --clip-point: 20; top: -10%; left: 34%; width: 21%; height: 25%; } .snorlax__foot-claw--four { --clip-point: 20; top: -18%; left: 49%; width: 21%; height: 34%; transform: rotate(45deg); } .snorlax__foot-claw--five { --clip-point: 50; top: 0%; left: 78%; width: 21%; height: 31%; transform: rotate(40deg); } .snorlax__foot-claw--six { --clip-point: 50; top: 37%; left: 95%; width: 19%; height: 27%; transform: rotate(90deg); } .snorlax__right-foot { bottom: 0; right: 6.5%; width: 28%; height: 35%; } .snorlax__right-foot-foot { height: 100%; width: 100%; border: calc(2 * var(--unit)) solid #000; background: var(--belly); overflow: hidden; border-radius: 50% 50% 50% 50%/50% 45% 55% 50%; } .snorlax__right-foot-foot:before, .snorlax__right-foot-foot:after { content: ''; bottom: 0; } .snorlax__right-foot-foot:before { left: 5%; border-radius: 50%; height: 62%; width: 77%; background: var(--dark-belly); } .snorlax__right-foot-foot:after { left: 10%; border-radius: 50%; border: calc(2 * var(--unit)) solid #000; bottom: 14%; height: 42%; background: var(--foot); width: 55%; }
</style> </head> <body> <div class="snorlax"> <div class="snorlax__head"> <div class="snorlax__head-outline"></div> <div class="snorlax__ear snorlax__ear--left"></div> <div class="snorlax__ear snorlax__ear--right"></div> <div class="snorlax__brow snorlax__brow--left"></div> <div class="snorlax__brow snorlax__brow--right"></div> <div class="snorlax__eye snorlax__eye--left"></div> <div class="snorlax__eye snorlax__eye--right"></div> <div class="snorlax__mouth"> <div class="snorlax__tooth snorlax__tooth--left"></div> <div class="snorlax__tooth snorlax__tooth--right"></div> </div> </div> <div class="snorlax__arm-left"> <div class="snorlax__arm-wrapper"> <div class="snorlax__claws--left"></div> <div class="snorlax__arm-left-arm"></div> </div> </div> <div class="snorlax__arm-right"> <div class="snorlax__claws--right"></div> <div class="snorlax__arm-right-arm"></div> <div class="snorlax__claw"></div> </div> <div class="snorlax__body"> <div class="snorlax__body-shade"></div> <div class="snorlax__belly"> <div class="snorlax__belly-segment snorlax__belly-segment--one"></div> <div class="snorlax__belly-segment snorlax__belly-segment--two"></div> </div> </div> <div class="snorlax__left-foot"> <div class="snorlax__left-foot-foot"></div> <div class="snorlax__foot-claw snorlax__foot-claw--one"> <div></div> </div> <div class="snorlax__foot-claw snorlax__foot-claw--two"> <div></div> </div> <div class="snorlax__foot-claw snorlax__foot-claw--three"> <div></div> </div> </div> <div class="snorlax__right-foot"> <div class="snorlax__right-foot-foot"></div> <div class="snorlax__foot-claw snorlax__foot-claw--four"> <div></div> </div> <div class="snorlax__foot-claw snorlax__foot-claw--five"> <div></div> </div> <div class="snorlax__foot-claw snorlax__foot-claw--six"> <div></div> </div> </div> </div> </body> </html>