Кот качается на шаре - анимация html & css
Красивый анимированный белый кот раскачивается на подвешенном шаре из стороны в сторону с разным потенциалом, прикольно выглядит и моргает глазками, для его визуализации используется только html и css.
Как работает анимированный кот
Анимация кота находится в блочном элементе <div class="all">
, высота блока height: 5rem;
и ширина тоже width: 5rem;
, при этом на раскачку от центра ему даётся transform-origin: center -20rem;
, а длинна верёвки составляет top: 10rem;
(длину верёвки можно уменьшить или увеличить, это не повлияет на весь процесс). Сам кот состоит из кода, это не рисунок. Средствами анимации и трансформации происходит изменение положения компонентов кота по времени, создавая визуально анимированный эффект качения.
<style>
.all-wrap {
animation: bob 7s cubic-bezier(0.5, 0, 0.5, 1) infinite both;
}
.all {
top: 10rem;
left: calc(50% - 2.5rem);
position: absolute;
width: 5rem;
height: 5rem;
transform-origin: center -20rem;
animation: swing 7s cubic-bezier(0.5, 0, 0.5, 1) infinite both;
}
.all:before {
height: 20rem;
width: 2px;
background-color: #DB242A;
left: calc(50% - 1px);
bottom: 20rem;
}
.yarn {
position: absolute;
top: 0;
left: 0;
width: 80px;
height: 80px;
border-radius: 50%;
background-image: radial-gradient(circle at top left, #e97c7f, #DB242A 50%, #af1d22);
z-index: 1;
}
.yarn:before, .yarn:after {
position: absolute;
width: 20px;
height: 20px;
border-radius: 50%;
background-color: white;
top: -1px;
}
.yarn:before {
left: calc(50% + 7px);
background-color: #b1bce6;
}
.yarn:after {
right: calc(50% + 7px);
background-color: #D5E8F8;
}
.cat-wrap {
position: absolute;
top: 0;
left: calc(50% - 45px);
width: 90px;
height: 130px;
animation: reverse-swing 7s cubic-bezier(0.5, 0, 0.5, 1) infinite both;
transform-origin: top center;
}
.cat {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
animation: swing 7s 0.2s infinite both;
transform-origin: top center;
}
.cat-upper {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
transform-origin: top center;
z-index: 1;
}
.cat-upper .cat-leg {
position: absolute;
width: 20px;
height: 100%;
background-color: white;
z-index: -1;
background-image: linear-gradient(to right, #D5E8F8, #D5E8F8 20%, #8B9BD9);
}
.cat-upper .cat-leg:nth-child(1) {
border-top-left-radius: 100px;
left: 10px;
}
.cat-upper .cat-leg:nth-child(1):after {
left: 50%;
}
.cat-upper .cat-leg:nth-child(2) {
border-top-left-radius: 0;
border-top-right-radius: 100px;
right: 10px;
}
.cat-upper .cat-leg:nth-child(2):after {
right: 50%;
}
.cat-lower-wrap {
height: 90%;
width: 100%;
position: absolute;
top: 100%;
width: 75px;
left: calc(50% - 37.5px);
animation: reverse-swing 7s 0.2s infinite both;
transform-origin: top center;
}
.cat-lower {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
animation: swing 7s 0.5s infinite both;
transform-origin: top center;
}
.cat-lower:after {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 100px;
background-image: radial-gradient(circle at 10px 50px, white, white 40%, #D5E8F8 65%, #8B9BD9);
z-index: 1;
}
.cat-lower .cat-leg, .cat-lower .cat-paw {
z-index: -1;
position: absolute;
height: 20px;
width: 20px;
animation: swing-leg 7s 0.3s infinite both;
z-index: 1;
transform-origin: top center;
border-top-left-radius: 20px;
border-top-right-radius: 20px;
background-image: linear-gradient(to right, white, #D5E8F8, #8B9BD9);
}
.cat-lower > .cat-leg {
bottom: 20px;
}
.cat-lower > .cat-leg .cat-leg {
top: 25%;
}
.cat-lower > .cat-leg + .cat-leg {
right: 0;
}
.cat-lower .cat-paw {
top: 50%;
border-radius: 50%;
background-color: #fff;
}
.cat-lower .cat-tail {
position: absolute;
height: 15px;
width: 10px;
animation: swing-tail 7s cubic-bezier(0.5, 0, 0.5, 1) infinite both;
transform-origin: top center;
z-index: 0;
background-image: linear-gradient(to right, white, #D5E8F8, #8B9BD9);
border-bottom-left-radius: 10px;
border-bottom-right-radius: 10px;
}
.cat-lower .cat-tail > .cat-tail {
top: 50%;
}
.cat-lower > .cat-tail {
left: calc(50% - 5px);
top: 95%;
}
.cat-head {
width: 90px;
height: 90px;
background-image: radial-gradient(circle at 10px 10px, white, white 40%, #D5E8F8 65%, #8B9BD9);
border-radius: 50%;
top: calc(100% - 45px);
}
.cat-face {
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
animation: face 7s cubic-bezier(0.5, 0, 0.5, 1) infinite both;
transform-style: preserve-3d;
perspective: 100px;
}
.cat-ears {
position: absolute;
top: 0;
left: 0;
height: 50%;
width: 100%;
z-index: -1;
}
.cat-ear {
width: 20px;
height: 100%;
position: absolute;
border-radius: 5px;
top: -10px;
}
.cat-ear:first-child {
left: 0;
transform-origin: top left;
transform: skewY(40deg);
background-color: white;
}
.cat-ear:first-child:before {
left: 0;
border-top-right-radius: 50%;
border-bottom-right-radius: 50%;
background-color: #D7EBFB;
}
.cat-ear:last-child {
right: 0;
transform-origin: top right;
transform: skewY(-40deg);
background-color: #d1e6f7;
}
.cat-ear:last-child:before {
right: 0;
border-top-left-radius: 50%;
border-bottom-left-radius: 50%;
background-color: #e0f0fc;
}
.cat-ear:before {
width: 60%;
height: 100%;
top: 10px;
position: absolute;
background-color: #fff;
}
.cat-eyes {
position: absolute;
top: 50%;
width: 100%;
height: 6px;
animation: blink 7s step-end infinite both;
}
.cat-eyes:before, .cat-eyes:after {
position: absolute;
height: 6px;
width: 6px;
border-radius: 50%;
background-color: #4B4D75;
}
.cat-eyes:before {
left: 20px;
}
.cat-eyes:after {
right: 20px;
}
.cat-mouth {
position: absolute;
width: 12px;
height: 8px;
background-color: #4B4D75;
top: 60%;
left: calc(50% - 6px);
border-top-left-radius: 50% 30%;
border-top-right-radius: 50% 30%;
border-bottom-left-radius: 50% 70%;
border-bottom-right-radius: 50% 70%;
transform: translateZ(10px);
}
.cat-mouth:before, .cat-mouth:after {
position: absolute;
width: 90%;
height: 100%;
border: 2px solid #9FA2CB;
top: 80%;
border-radius: 100px;
border-top-color: transparent;
z-index: -1;
}
.cat-mouth:before {
border-left-color: transparent;
right: calc(50% - 1px);
transform-origin: top right;
transform: rotate(10deg);
}
.cat-mouth:after {
border-right-color: transparent;
left: calc(50% - 1px);
transform-origin: top left;
transform: rotate(-10deg);
}
.cat-whiskers {
width: 50%;
height: 8px;
position: absolute;
bottom: 25%;
left: 25%;
transform-style: preserve-3d;
perspective: 60px;
}
.cat-whiskers:before, .cat-whiskers:after {
position: absolute;
height: 100%;
width: 30%;
border: 2px solid #9FA2CB;
border-left: none;
border-right: none;
}
.cat-whiskers:before {
right: 100%;
transform-origin: right center;
transform: rotateY(70deg) rotateZ(-10deg);
}
.cat-whiskers:after {
left: 100%;
transform-origin: left center;
transform: rotateY(-70deg) rotateZ(10deg);
}
@keyframes bob {
0% {
transform: translateY(0.4rem);
}
6.25% {
transform: translateY(-0.4rem);
}
12.5% {
transform: translateY(0.4rem);
}
18.75% {
transform: translateY(-0.4rem);
}
25% {
transform: translateY(0.4rem);
}
31.25% {
transform: translateY(-0.4rem);
}
37.5% {
transform: translateY(0.4rem);
}
43.75% {
transform: translateY(-0.4rem);
}
50% {
transform: translateY(0.4rem);
}
56.25% {
transform: translateY(-0.4rem);
}
62.5% {
transform: translateY(0.4rem);
}
68.75% {
transform: translateY(-0.4rem);
}
75% {
transform: translateY(0.4rem);
}
81.25% {
transform: translateY(-0.4rem);
}
87.5% {
transform: translateY(0.4rem);
}
93.75% {
transform: translateY(-0.4rem);
}
100% {
transform: translateY(0.4rem);
}
}
@keyframes swing {
0% {
transform: rotate(5deg);
}
12.5% {
transform: rotate(-10deg);
}
25% {
transform: rotate(10deg);
}
37.5% {
transform: rotate(-15deg);
}
50% {
transform: rotate(23deg);
}
62.5% {
transform: rotate(-23deg);
}
75% {
transform: rotate(15deg);
}
87.5% {
transform: rotate(-10deg);
}
100% {
transform: rotate(5deg);
}
}
@keyframes swing-leg {
0% {
transform: rotate(0.5deg);
}
12.5% {
transform: rotate(-1deg);
}
25% {
transform: rotate(1deg);
}
37.5% {
transform: rotate(-1.5deg);
}
50% {
transform: rotate(2.3deg);
}
62.5% {
transform: rotate(-2.3deg);
}
75% {
transform: rotate(1.5deg);
}
87.5% {
transform: rotate(-1deg);
}
100% {
transform: rotate(0.5deg);
}
}
@keyframes swing-tail {
0% {
transform: rotate(-2deg);
}
12.5% {
transform: rotate(4deg);
}
25% {
transform: rotate(-4deg);
}
37.5% {
transform: rotate(6deg);
}
50% {
transform: rotate(-9.2deg);
}
62.5% {
transform: rotate(9.2deg);
}
75% {
transform: rotate(-6deg);
}
87.5% {
transform: rotate(4deg);
}
100% {
transform: rotate(-2deg);
}
}
@keyframes reverse-swing {
0% {
transform: rotate(-5deg);
}
12.5% {
transform: rotate(10deg);
}
25% {
transform: rotate(-10deg);
}
37.5% {
transform: rotate(15deg);
}
50% {
transform: rotate(-23deg);
}
62.5% {
transform: rotate(23deg);
}
75% {
transform: rotate(-15deg);
}
87.5% {
transform: rotate(10deg);
}
100% {
transform: rotate(-5deg);
}
}
@keyframes face {
0% {
transform: translateX(-2.5px);
}
12.5% {
transform: translateX(5px);
}
25% {
transform: translateX(-5px);
}
37.5% {
transform: translateX(7.5px);
}
50% {
transform: translateX(-11.5px);
}
62.5% {
transform: translateX(11.5px);
}
75% {
transform: translateX(-7.5px);
}
87.5% {
transform: translateX(5px);
}
100% {
transform: translateX(-2.5px);
}
}
@keyframes fade-in {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
@keyframes blink {
from, to, 10%, 25%, 80% {
transform: scaleY(1);
}
8%, 23%, 78% {
transform: scaleY(0.1);
}
}
body, html {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
background-color: #1F1F3C;
overflow: hidden;
}
*, *:before, *:after {
box-sizing: border-box;
position: relative;
animation-timing-function: cubic-bezier(0.5, 0, 0.5, 1);
animation-fill-mode: both;
}
*:before, *:after {
content: '';
display: block;
}
</style>
<div class="all-wrap">
<div class="all">
<div class="yarn"></div>
<div class="cat-wrap">
<div class="cat">
<div class="cat-upper">
<div class="cat-leg"></div>
<div class="cat-leg"></div>
<div class="cat-head">
<div class="cat-ears">
<div class="cat-ear"></div>
<div class="cat-ear"></div>
</div>
<div class="cat-face">
<div class="cat-eyes"></div>
<div class="cat-mouth"></div>
<div class="cat-whiskers"></div>
</div>
</div>
</div>
<div class="cat-lower-wrap">
<div class="cat-lower">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-paw"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-leg">
<div class="cat-paw"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail">
<div class="cat-tail -end"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
Наглядный пример кота
Посмотрите как выглядит кот, мы уменьшили ему верёвку вдвое, нажмите здесь
murchimru
- 🐱Категория:Кошки html
- 🐱Версия:1.0.1
- 🐱Рекомендовано: Для любого возраста
- 🐱Источник: Перейти
- 🐱Прикрепление: Смотреть
- 🐱Скачать: Файл
- 🐱Размер файла: 2.4 Kb
- 🐱Скачали: 32 раз
- 🐱Просмотров: 1923
- 🐱Рейтинг: 5.0 из 3 голосов
- 🐱Добавлено: 27-03-2020 в 10:40:00
- 🐱Теги:
кот html, кошки html, кот анимация, кот css, анимированный кот, cat html
Похожие темы
Комментарии
Всего комментариев: 0 | |