Котику не спится - html & svg & css

Красочный анимированный элемент страницы на котором котику совсем не спится, а ведь на часах уже три часа ночи, он сидит на краю кровати и щёлкает светом. Элемент состоит из html и css, прорисовка элементов выполнена тегами svg.

Немного о работе кота

Сама картина происходящего происходит в блоке <div class="bedroom">, элементы html позиционируются свойствами css, так-же css создаёт анимацию. В позиционируемых элементах находятся компоненты svg, они прорисовывают общую картину отдельными частями. Если вы захотите изменить цвета элементов, замена производится в тегах svg.

Код для установки кота

Обратите внимание, здесь указаны параметры для body {, при помещении в отдельный блок нужно изменить параметры, установив их исходя из обстоятельств положения.

<style>
body {
 display: flex;
 align-items: center;
 margin: 0;
 min-width: 320px;
 height: 100vh;
}

.bedroom {
 width: 100%;
 height: 100%;
 display: flex;
 justify-content: center;
 align-items: flex-end;
 flex-direction: row-reverse;
 background-color: #32303e;
 overflow: hidden;
 animation: bedroom-color 6s step-end infinite;
}
.nightstand {
 position: relative;
 flex: 0 0 40%;
 max-width: 400px;
 min-height: 147px;
 height: calc(100% * 147 / 476);
}
.bed {
 position: relative;
 flex: 0 0 60%;
 min-height: 213px;
 height: calc(100% * 213 / 476);
}

.lamp-light-svg {
 position: absolute;
 height: calc(100% * 1290 / 147);
 transform: translate(calc(-100% * 597 / 1290), calc(-100% * 722 / 1290));
}
.lamp-glow-svg {
 position: absolute;
 height: calc(100% * 210 / 147);
 transform: translate(calc(-100% * 206 / 499), calc(-100% * 328 / 210));
}
.lamp-shadow-svg {
 position: absolute;
 height: 100%;
 transform: translate(calc(-100% * 500 / 900), 0);
}
.lamp-svg {
 position: absolute;
 height: calc(100% * 107 / 147);
 transform: translate(calc(100% * 6 / 92), -100%);
 z-index: 1;
}
.clock-svg {
 position: absolute;
 height: calc(100% * 34 / 147);
 transform: translate(calc(100% * 78 / 75), -100%)
}
.clock-front {
 animation: clock-front-color 6s step-end infinite;
}
.nightstand-svg {
 position: absolute;
 bottom: 0;
 height: 100%;
 transform: translate(calc(100% * 8 / 153), 0);
}

.bed-svg {
 position: absolute;
 right: 0;
 bottom: 0;
 height: 100%;
}
.cat {
 position: absolute;
 right: 0;
 bottom: 0;
 min-width: 112px;
 width: calc(100vh * 112 / 476);
 height: calc(100% * 159 / 213);
 transform: translate(calc(-100% * 64 / 112), calc(-100% * 112 / 164));
}
.cat-svg {
 position: absolute;
 height: 100%;
}
.cat-eye {
 animation: cat-eye-color 6s step-end infinite;
}
.cat-paw-svg {
 position: absolute;
 top: calc(100% * 72 / 159);
 left: calc(100% * 96 / 112);
 height: calc(100% * 47 / 159);
 transform-origin: 0 0;
 z-index: 1;
 animation: 3s cat-paw 2.75s linear infinite;
}
.lamp-switch-1-svg {
 position: absolute;
 top: calc(100% * 57 / 159);
 left: calc(100% * 163 / 112);
 height: calc(100% * 49 / 159);
 animation: 3s lamp-switch-1 2.75s linear infinite;
}
.lamp-switch-2-svg {
 position: absolute;
 top: calc(100% * 106 / 159);
 left: calc(100% * 163 / 112);
 width: calc(100% / 112);
 height: calc(100% * 18 / 159);
 animation: 3s lamp-switch-2 2.75s linear infinite;
}
.blanket-svg {
 position: absolute;
 right: 0;
 transform: translate(calc(-100% * 2 / 417), calc(100% * 26 / 144));
 height: calc(100% * 144 / 213);
 z-index: 1;
}

.lamp-light-svg,
.lamp-glow-svg,
.lamp-shadow-svg,
.blanket-shadow,
.bed-back-shadow,
.bed-pillow-shadow,
.lamp-switch-shadow,
.lamp-stem-glow,
.lamp-shade,
.clock-button-shadow,
.cat-eye-pupil {
 animation: hide 6s step-end infinite;
}
.lamp-shade-dark {
 animation: show 6s step-end infinite;
}
.bed-front-shadow,
.bed-matress-shadow,
.bed-back-shadow-2,
.blanket-shadow-2,
.bed-pillow-shadow-2,
.lamp-stem-shadow,
.lamp-switch-shadow-2,
.nightstand-shadow {
 animation: darken 6s step-end infinite;
}

@keyframes bedroom-color {
 50% {
 background-color: #080810;
 }
}
@keyframes clock-front-color {
 50% {
 fill: #000;
 }
}
@keyframes cat-eye-color {
 50% {
 fill: #fffdb2;
 }
}
@keyframes hide {
 50% {
 fill-opacity: 0;
 }
}
@keyframes show {
 50% {
 fill-opacity: 1;
 }
}
@keyframes darken {
 50% {
 fill-opacity: .86;
 }
}
@keyframes cat-paw {
 0%, 10% {
 transform: rotate(0deg);
 }
 5% {
 transform: rotate(10deg);
 }
}
@keyframes lamp-switch-1 {
 0%, 10% {
 transform: translate(0, 0);
 }
 5% {
 transform: translate(0, calc(100% * 6 / 49));
 }
}
@keyframes lamp-switch-2 {
 0%, 10% {
 transform: translate(0, 0);
 }
 5% {
 transform: translate(calc(-100% * 9), calc(100% * 10 / 18));
 }
}
<style>

<div class="bedroom">
 <div class="nightstand">
 <svg class="lamp-light-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1290 1290">
 <defs>
 <radialGradient id="lamp-light-a" r="49.605%" fx="50%" fy="50%">
 <stop stop-color="#FFE89E" offset="0%"/>
 <stop stop-color="#000000" stop-opacity="0" offset="100%"/>
 </radialGradient>
 </defs>
 <circle cx="753" cy="257" r="650" fill="url(#lamp-light-a)" fill-rule="evenodd" transform="translate(-108 388)"/>
 </svg>
 <svg class="lamp-glow-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 499 210">
 <defs>
 <radialGradient id="lamp-glow-a" cy="117.609%" r="113.761%" fx="50%" fy="117.609%">
 <stop stop-color="#FFFBEA" stop-opacity=".372" offset="0%"/>
 <stop stop-color="#FFFFFF" stop-opacity="0" offset="100%"/>
 </radialGradient>
 </defs>
 <path fill="url(#lamp-glow-a)" fill-rule="evenodd"
 d="M1,1 C1,1 143,210 250,210 C393,210 499,1 500,1 L1,1 Z"/>
 </svg>
 <svg class="lamp-shadow-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 147">
 <polygon fill="#32303E" fill-rule="evenodd" points="861 329 1100 476 200 476 200 355.67 650 447 708 329"
 transform="translate(-200 -329)"/>
 </svg>
 <svg class="lamp-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 92 107"
 xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
 <radialGradient id="lamp-b" cy="0%" r="100%" fx="50%" fy="0%">
 <stop stop-color="#FFFFFF" offset="0%"/>
 <stop stop-color="#FDFDFD" stop-opacity=".724" offset="89.281%"/>
 <stop stop-color="#000000" stop-opacity="0" offset="89.547%"/>
 <stop stop-color="#000000" stop-opacity="0" offset="100%"/>
 </radialGradient>
 <path id="lamp-a"
 d="M42.9354839,32 L48.4516129,32 C48.4516129,32 48.4516129,107 65,107 C49.6774194,107 45.5163342,107 27,107 C42.9354839,107 42.9354839,32 42.9354839,32 Z"/>
 <radialGradient id="lamp-c" cy="46.094%" r="152.299%" fx="50%" fy="46.094%">
 <stop stop-color="#FFFFFF" offset="0%"/>
 <stop stop-color="#FFFFFF" offset="25.465%"/>
 <stop stop-color="#FDD65E" stop-opacity=".602" offset="100%"/>
 </radialGradient>
 <polygon id="lamp-d" points="23 0 66 0 92 70 0 70"/>
 </defs>
 <g fill="none" fill-rule="evenodd">
 <use fill="#B3A120" xlink:href="#lamp-a"/>
 <use class="lamp-stem-shadow" fill="#000000" fill-opacity="0" xlink:href="#lamp-a"/>
 <use class="lamp-stem-glow" fill="url(#lamp-b)" xlink:href="#lamp-a"/>
 <use class="lamp-shade" xlink:href="#lamp-d" fill="url(#lamp-c)"/>
 <use class="lamp-shade-dark" xlink:href="#lamp-d" fill="#191919" fill-opacity="0"/>
 </g>
 </svg>
 <svg class="clock-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 75 34"
 xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
 <path id="clock-a"
 d="M1,2 C2.99997449,2.55149503e-05 21,0 23,2.06366656 C23.9070772,2.999619 24,3 24,3 L3.55271368e-15,3 C3.55271368e-15,3 3.55271368e-15,3 1,2 Z"/>
 </defs>
 <g fill="none" fill-rule="evenodd">
 <rect width="61" height="31" x="14" y="3" fill="#000000" rx="8"/>
 <rect class="clock-front" width="61" height="31" y="3" fill="#151515" rx="8"/>
 <text textLength="45" x="8" y="23" fill="#17CBF6" font-family="Courier New, Courier, Lucida Sans Typewriter, Lucida Typewriter, monospace" font-size="17">
 03:00
 </text>
 <g transform="translate(21)">
 <mask id="clock-b" fill="white">
 <use xlink:href="#clock-a"/>
 </mask>
 <use fill="#000000" xlink:href="#clock-a"/>
 <polygon class="clock-button-shadow" fill="#FFEAB9" fill-opacity=".72" points="1 4 27 -4 -15 -4" mask="url(#clock-b)"/>
 </g>
 </g>
 </svg>
 <svg class="nightstand-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 153 147"
 xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
 <path id="nightstand-a"
 d="M0,0 L153,0 L153,127 L0,127 L0,0 Z M0,127 L5,127 L5,147 L0,147 L0,127 Z M148,127 L153,127 L153,147 L148,147 L148,127 Z"/>
 </defs>
 <g fill="none" fill-rule="evenodd">
 <use fill="#8B572A" xlink:href="#nightstand-a"/>
 <use class="nightstand-shadow" fill="#000000" fill-opacity=".72" xlink:href="#nightstand-a"/>
 <rect width="143" height="27.646" x="5" y="5.184" fill="#000000"/>
 </g>
 </svg>
 </div>
 <div class="bed">
 <svg class="bed-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 213"
 xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
 <path id="bed-a"
 d="M1.13686838e-13,0 C102,0 100,27.6431925 149,27.6431925 C182.692708,27.6431925 216.385417,7.77464789 250,7.77464789 C284.385417,7.77464789 318.692708,27.6431925 353,27.6431925 C401,27.6431925 402,0 500,0 L500,184 L1.13686838e-13,184 L1.13686838e-13,0 Z"/>
 <rect id="bed-c" width="500" height="47" y="137"/>
 <rect id="bed-d" width="482" height="37" x="9" y="100"/>
 <path id="bed-e"
 d="M8,21 C22.2006643,-4.71601034 180.841009,-6.93690898 199,21 C212,41 199,94 199,94 L8,94 C8,94 -9,51.7853327 8,21 Z"/>
 <path id="bed-g"
 d="M45,75.7002306 C60.6841676,53.0891905 209.205967,55.9879193 236,75.7002306 C250,86 236,100 236,100 L45,100 C45,100 33,93 45,75.7002306 Z"/>
 </defs>
 <g fill="none" fill-rule="evenodd">
 <mask id="bed-b" fill="white">
 <use xlink:href="#bed-a"/>
 </mask>
 <use fill="#8B572A" xlink:href="#bed-a"/>
 <polygon class="bed-back-shadow" fill="#000000" fill-opacity=".72"
 points="-25 -38 381 -38 381 137 478 137 547 -3 540 184 381 184 -25 184" mask="url(#bed-b)"/>
 <use class="bed-back-shadow-2" fill="#000000" fill-opacity="0" xlink:href="#bed-a"/>
 <use fill="#8B572A" xlink:href="#bed-c"/>
 <use class="bed-front-shadow" fill="#000000" fill-opacity=".72" xlink:href="#bed-c"/>
 <use fill="#D8D8D8" xlink:href="#bed-d"/>
 <use class="bed-matress-shadow" fill="#000000" fill-opacity=".82" xlink:href="#bed-d"/>
 <polygon fill="#000000" points="39 184 54 184 46.5 213 31.5 213"/>
 <polygon fill="#000000" points="449 184 464 184 456.5 213 441.5 213" transform="matrix(-1 0 0 1 911.5 0)"/>
 <g transform="translate(277 6)">
 <mask id="bed-f" fill="white">
 <use xlink:href="#bed-e"/>
 </mask>
 <use fill="#E9E9E9" xlink:href="#bed-e"/>
 <rect class="bed-pillow-shadow" width="131" height="125" x="-27" y="-19" fill="#000000" fill-opacity=".72" mask="url(#bed-f)"/>
 <use class="bed-pillow-shadow-2" fill="#000000" fill-opacity="0" xlink:href="#bed-e"/>
 </g>
 <g>
 <use class="bed-pillow" fill="#E9E9E9" xlink:href="#bed-g"/>
 <use class="bed-pillow-shadow-2" fill="#000000" fill-opacity=".72" xlink:href="#bed-g"/>
 </g>
 </g>
 </svg>
 <div class="cat">
 <svg class="cat-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 112 159">
 <g fill="none" fill-rule="evenodd" transform="translate(0 -5)">
 <path fill="#000000"
 d="M56,163 C86.927946,163 112,165.421356 112,124 C112,82.5786438 86.927946,59.4443359 56,59.4443359 C25.072054,59.4443359 0,82.5786438 0,124 C0,165.421356 25.072054,163 56,163 Z"/>
 <g transform="translate(6)">
 <path fill="#000000"
 d="M50.5,96 C71.2106781,96 88,73.7689435 88,50.9153079 C88,28.0616722 71.2106781,18 50.5,18 C29.7893219,18 13,28.0616722 13,50.9153079 C13,73.7689435 29.7893219,96 50.5,96 Z"/>
 <polygon fill="#000000" points="24.395 6 18 34 37 21.805"/>
 <polygon fill="#000000" points="72.929 5 81 32 61 20.983"/>
 <g transform="translate(32 51)">
 <circle class="cat-eye" cx="6" cy="6" r="6" fill="#F8E81C"/>
 <circle class="cat-eye-pupil" cx="6" cy="6" r="4" fill="#000000"/>
 </g>
 <g transform="translate(59 51)">
 <circle class="cat-eye" cx="6" cy="6" r="6" fill="#F8E81C"/>
 <circle class="cat-eye-pupil" cx="6" cy="6" r="4" fill="#000000"/>
 </g>
 </g>
 </g>
 </svg>
 <svg class="lamp-switch-1-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 59 49"
 xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
 <linearGradient id="lamp-switch-1-b" x1="92.157%" x2="1.715%" y1="12.265%" y2="100%">
 <stop stop-color="#FFFFFF" offset="0%"/>
 <stop stop-color="#FFFFFF" stop-opacity=".189" offset="100%"/>
 </linearGradient>
 <path id="lamp-switch-1-a"
 d="M0,89 C0,89 17,78 31,67 C45,56 58,40 58,40 L59,41 C59,41 45.2697658,56.1905386 31,68 C16.7302342,79.8094614 1,89 1,89 L0,89 Z"/>
 </defs>
 <g fill="none" fill-rule="evenodd" transform="translate(0 -40)">
 <use fill="#D5AF35" xlink:href="#lamp-switch-1-a"/>
 <use class="lamp-switch-shadow" fill="url(#lamp-switch-1-b)" xlink:href="#lamp-switch-1-a"/>
 <use class="lamp-switch-shadow-2" fill="#000000" fill-opacity="0" xlink:href="#lamp-switch-1-a"/>
 </g>
 </svg>
 <svg class="lamp-switch-2-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 18">
 <defs>
 <polygon id="lamp-switch-2-a" fill-rule="evenodd"
 points="0 89 1 89 1 107 0 107" transform="translate(0 -89)"/>
 </defs>
 <use fill="#D5AF35" xlink:href="#lamp-switch-2-a"/>
 <use class="lamp-switch-shadow-2" fill="#000000" fill-opacity="0" xlink:href="#lamp-switch-2-a"/>
 </svg>
 <svg class="cat-paw-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 76 47">
 <title>Cat paw</title>
 <polygon fill="#000000" fill-rule="evenodd"
 points="96 77 121 95 155 107 163 103 172 114 165 124 155 121 121 116 105 109"
 transform="translate(-96 -77)"/>
 </svg>
 </div>
 <svg class="blanket-svg"
 xmlns="http://www.w3.org/2000/svg" viewBox="0 0 417 144"
 xmlns:xlink="http://www.w3.org/1999/xlink">
 <defs>
 <path id="blanket-a"
 d="M150.34209,74 C160.79206,73.1282516 229.085398,65.9416395 242.316406,26.1914119 C254.513672,-10.4531194 347.838819,-4.13007698 356,24 C365.7631,57.6515937 409,65 414,71 C416.874107,74.4489279 416,111 416,111 L410,111 L410,74.1015681 L389.467493,74.1015681 L23,144 L0,74 L150.34209,74 Z"/>
 </defs>
 <g fill="none" fill-rule="evenodd">
 <mask id="blanket-b" fill="white">
 <use xlink:href="#blanket-a"/>
 </mask>
 <use fill="#4990E2" xlink:href="#blanket-a"/>
 <path class="blanket-shadow" fill="#000000" fill-opacity=".72"
 d="M295,1 C295,1 334,1 333,61 C333,74 423,74 423,74 L423,158 L-5,158 L-5,1 L295,1 Z" mask="url(#blanket-b)"/>
 <use class="blanket-shadow-2" fill="#000000" fill-opacity="0" xlink:href="#blanket-a"/>
 </g>
 </svg>
 </div>
</div>

Посмотрите демо котика

Для просмотра примера, нажмите здесь

murchimru

murchimru

  • 🐱Категория:Кошки html
  • 🐱Версия:1.0.1
  • 🐱Рекомендовано: Для любого возраста
  • 🐱Источник: Перейти
  • 🐱Прикрепление: Смотреть
  • 🐱Скачать: Файл
  • 🐱Размер файла: 5.1 Kb
  • 🐱Скачали: 3 раз
  • 🐱Просмотров: 96
  • 🐱Рейтинг: 5.0 из 2 голосов
  • 🐱Добавлено: 13-04-2020 в 10:47:38
  • 🐱Теги: кошки svg, эффект для сайта, кошки css, анимация для сайта, кошки html, кот для сайта
Мы в соц сетях
Похожие темы
Комментарии
Всего комментариев: 0
avatar