Если вы уходите и вас никто не зовёт обратно – вы идете в верном направлении.
22-сентября-2023, 20:31 3 0
Осень не заметно пролетит как наступят холода и конечно же долгожданные зимние праздники. А какие же праздники без украшений?! Сегодня я хочу с вами поделится оригинальным украшением для сайта, а именно снежным шаром с котиком. Снежный шар имеет переключатель при нажатии на который начинает идти снег и вскоре кота заносит снегом , остается только силуэт и красивые глазки которые следят за курсором мышки. Снежный шар с котом станет отличным дополнением для украшения вашего сайта или блога к Новому году. Установка не замысловата , приступим. Кстати если Вам понадобятся еще какие либо украшения для сайта , просто кликните по тегу внизу поста и Вам откроется масса интересных решений как для Нового года, так и для других подобных моментов.
HTML
<div class="snow-globe">
<div class="globe-wrapper">
<div class="globe">
<div class="globe-inner">
<div class="snow-storm"></div>
<div class="tree">
<span class="star">☆</span>
<span class="bulbs">
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
<span class="bulb"></span>
</span>
<div class="tree-section">
<div class="tree-leaves"></div>
<div class="tree-snow"></div>
</div>
<div class="tree-section">
<div class="tree-leaves"></div>
<div class="tree-snow"></div>
</div>
<div class="tree-section">
<div class="tree-leaves"></div>
<div class="tree-snow"></div>
</div>
<div class="tree-section">
<div class="tree-leaves"></div>
<div class="tree-snow"></div>
</div>
<div class="tree-section">
<div class="tree-leaves"></div>
<div class="tree-snow"></div>
</div>
</div>
<div class="snowman">
<div class="buddy">
<div class="head">
<div class="ear left">
<div class="hat"></div>
</div>
<div class="ear right"></div>
<div class="face">
<div class="eyes">
<div class="eyefix right"></div>
<div class="eyefix left"></div>
<div class="eye left">
<div class="eyelid top"></div>
<div class="eyelid bottom"></div>
<div class="pupil"></div>
</div>
<div class="eye right">
<div class="eyelid top"></div>
<div class="eyelid bottom"></div>
<div class="pupil"></div>
</div>
</div>
<div class="snoot"></div>
<div class="mouth">
<div class="whisker-pad left">
<div class="whiskers">
<div class="whisker"></div>
<div class="whisker"></div>
<div class="whisker"></div>
</div>
</div>
<div class="whisker-pad right">
<div class="whiskers">
<div class="whisker"></div>
<div class="whisker"></div>
<div class="whisker"></div>
</div>
</div>
</div>
<div class="snow-face"></div>
</div>
</div>
<div class="body">
<div class="chest"></div>
<div class="back-leg left"></div>
<div class="back-leg right"></div>
<div class="front-leg left">
<div class="foot left">
<div class="bean"></div>
<div class="bean"></div>
<div class="bean"></div>
</div>
</div>
<div class="front-leg right">
<div class="foot right">
<div class="bean"></div>
<div class="bean"></div>
<div class="bean"></div>
</div>
</div>
</div>
<div class="tail"></div>
<div class="snow-pile-head"></div>
<div class="snow-pile-upper-body"></div>
<div class="snow-pile-lower-body"></div>
<div class="snow-pile-feet left"></div>
<div class="snow-pile-feet right"></div>
</div>
</div>
<div class="hill front-mask"></div>
<div class="hill front"></div>
<div class="hill middle"></div>
<div class="hill back"></div>
</div>
</div>
</div>
<div class="base">
<div class="base-top">
<div class="plate-top"></div>
<div class="plate-sides"></div>
<div class="plate-bottom"></div>
</div>
<div class="base-middle">
<div class="plate-top"></div>
<div class="plate-sides">
<label class="switch">
<input type="checkbox" name="globe-switch">
<span class="button round"></span>
</label>
</div>
<div class="plate-bottom"></div>
</div>
<div class="base-bottom">
<div class="plate-top"></div>
<div class="plate-sides"></div>
<div class="plate-bottom"></div>
</div>
</div>
</div>
CSS
/*************************/
/******* SNOW GLOBE ******/
/*************************/
.snow-globe {
margin: auto;
transform-origin: top;
transform: scale(0.5);
position: relative;
left: -50%;
width: 200%;
height: 480px;
}
@media (max-width: 768px){
.snow-globe {
transform: scale(0.3);
left: -100%;
width: 300%;
height: 290px;
}
}
@media (max-width: 500px){
.snow-globe {
transform: scale(0.2);
left: -200%;
width: 500%;
height: 200px;
}
}
.globe-wrapper {
display: flex;
z-index: 1;
margin: auto;
width: 800px;
height: 800px;
position: relative;
overflow: hidden;
clip-path: ellipse(85% 47% at 50% 48%);
}
.globe {
display: flex;
z-index: 1;
border-radius: 50%;
margin: auto;
width: 95%;
height: 95%;
top: 10px;
position: relative;
background-color: #BFE2FF;
border-bottom: 3px solid white;
border-top: 1px solid white;
}
.globe-inner {
width: 95%;
height: 95%;
padding: 10px;
position: relative;
margin: auto;
border-radius: 50%;
overflow: hidden;
z-index: 1;
}
.globe-inner:after {
content: '';
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 999;
border-radius: 50%;
background: radial-gradient(circle, rgba(255, 255, 255, 0) 50%, #cef0ff 100%);
}
/*************************/
/******* LANDSCAPE *******/
/*************************/
.hill {
border-radius: 50%;
width: 130%;
height: 60%;
position: absolute;
overflow: hidden;
background: #7fc885;
}
.frosty .hill {
animation: snowy-fields-main 19s;
animation-fill-mode: forwards;
}
.hill.front {
bottom: -210px;
right: -260px;
z-index: 4;
}
.hill.front:after {
content: '';
position: absolute;
background: linear-gradient(-15deg, rgba(255, 255, 255, 0) 84%, #538257 100%);
width: 100%;
height: 100%;
}
.frosty .hill.front:after {
animation: snowy-fields-highlights-front 1s 11s;
animation-fill-mode: forwards;
}
.hill.front-mask {
z-index: 11;
bottom: -305px;
right: -260px;
z-index: 11;
background: #7fc885;
border-radius: 0;
transform: rotate(-8deg);
box-shadow: 5px 10px 21px 20px #7fc885;
}
.frosty .hill.front-mask {
animation: snowy-fields-main 19s, border-fix 19s;
animation-fill-mode: forwards;
}
.hill.front-mask:after {
content: '';
position: absolute;
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 50%, #538257 100%);
bottom: 245px;
right: 40px;
border-radius: 50% 50% 50% 50%;
width: 99%;
height: 60%;
transform: rotate(-3deg);
}
.frosty .hill.front-mask:after {
animation: snowy-fields-highlights-front-mask 1s 11s;
animation-fill-mode: forwards;
}
.hill.middle {
bottom: -180px;
right: 200px;
z-index: 3;
}
.hill.middle:after {
content: '';
position: absolute;
background: linear-gradient(171deg, rgba(255, 255, 255, 0) 24%, #538257 100%);
width: 100%;
height: 100%;
}
.frosty .hill.middle:after {
animation: snowy-fields-highlights-middle 1s 11s;
animation-fill-mode: forwards;
}
.hill.back {
bottom: -120px;
right: -310px;
width: 90%;
z-index: 2;
}
.hill.back:after {
content: '';
position: absolute;
background: linear-gradient(207deg, rgba(255, 255, 255, 0) 24%, #538257 100%);
width: 100%;
height: 100%;
}
.frosty .hill.back:after {
animation: snowy-fields-highlights-back 1s 11s;
animation-fill-mode: forwards;
}
/*************************/
/********* TREE **********/
/*************************/
.tree {
position: absolute;
width: 27%;
height: 50%;
z-index: 10;
bottom: 30%;
left: 10%;
z-index: 3;
}
.tree-section {
width: 30%;
height: 30%;
margin: 0 auto;
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
.tree-section:nth-of-type(1) {
z-index: 1;
height: 30%;
bottom: 2%;
width: 95%;
}
.tree-section:nth-of-type(2) {
z-index: 2;
height: 30%;
width: 80%;
bottom: 14%;
}
.tree-section:nth-of-type(3) {
z-index: 3;
height: 30%;
width: 60%;
bottom: 27%;
}
.tree-section:nth-of-type(4) {
z-index: 4;
height: 30%;
width: 50%;
bottom: 39%;
}
.tree-section:nth-of-type(5) {
z-index: 5;
height: 25%;
width: 36%;
bottom: 52%;
}
.tree-snow {
z-index: 10;
position: absolute;
border-radius: 130% 120% 100% 70%;
margin: 0 auto;
transform-origin: top;
background: linear-gradient(180deg, rgba(255,255,255,1) 0%, #c9f6ff 86%, rgba(0,212,255,1) 100%);
background-size: 400% 400%;
background-position: 16% -80%;
height: 7%;
border-radius: 50% 60% 30% 30%;
width: 100%;
left: 0;
right: 0;
bottom: -2%;
opacity: 0;
}
.frosty .tree-snow {
animation: all-the-snow 1s 11s;
animation-fill-mode: forwards;
}
.tree-leaves {
background: linear-gradient(0deg, #6ba770 0%, #538257 80%, #365539 100%);
-webkit-clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
height: 100%;
}
.tree-section:nth-of-type(5) .tree-leaves {
background: #6ba770;
background: linear-gradient(0deg, #6ba770 0%, #7fc885 100%);
}
.bulbs {
position: absolute;
top: 22%;
left: 16%;
right: 16%;
bottom: 0;
z-index: 7;
opacity: 0;
}
.frosty .bulbs {
animation: all-the-snow 1s 11s;
animation-fill-mode: forwards;
}
.bulb {
width: 15px;
height: 15px;
position: absolute;
border-radius: 50%;
top: 40px;
left: 25px;
z-index: 1;
}
.bulb:nth-child(3n+1) {
background: lightblue;
animation: colours-one 2s ease-in-out infinite;
}
.bulb:nth-child(3n+2) {
background: gold;
animation: colours-two 2s ease-in-out infinite;
}
.bulb:nth-child(3n+3) {
background: purple;
animation: colours-three 2s ease-in-out infinite;
}
.bulb:nth-child(1) {
top: 35px;
left: 61px;
}
.bulb:nth-child(2) {
top: 65px;
left: 55px;
}
.bulb:nth-child(3) {
top: 122px;
left: 84px;
}
.bulb:nth-child(4) {
top: 105px;
left: 65px;
}
.bulb:nth-child(5) {
top: 120px;
left: 40px;
}
.bulb:nth-child(6) {
top: 155px;
left: 30px;
}
.bulb:nth-child(7) {
top: 165px;
left: 58px;
}
.bulb:nth-child(8) {
top: 155px;
left: 90px;
}
.bulb:nth-child(9) {
top: 215px;
left: 110px;
}
.bulb:nth-child(10) {
top: 215px;
left: 60px;
}
.bulb:nth-child(11) {
top: 215px;
left: 10px;
}
.bulb:nth-child(12) {
top: 200px;
left: 30px;
}
.bulb:nth-child(13) {
top: 200px;
left: 90px;
}
.star {
font-size: 70px;
color: gold;
display: inline-block;
position: absolute;
left: 0;
right: 0;
margin: 0 auto;
width: 35%;
text-align: center;
bottom: 69%;
z-index: 10;
font-weight: bold;
opacity: 0;
}
.frosty .star {
animation: all-the-snow 1s 11s;
animation-fill-mode: forwards;
}
/*************************/
/******** SNOWMAN ********/
/*************************/
.snowman {
position: absolute;
width: 200px;
height: 400px;
right: 30%;
bottom: 25%;
margin: auto;
z-index: 5;
}
/*************************/
/********* SNOW **********/
/*************************/
.flake {
position: absolute;
cursor: default;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
user-select: none;
opacity: 0;
animation: snow-fade-in 0.5s 0.5s;
animation-fill-mode: forwards;
}
.snow-storm {
width: 500%;
height: 100%;
background: orange;
position: absolute;
left: -500%;
right: 0;
top: 0;
bottom: 0;
z-index: 20;
background: white;
background: linear-gradient(90deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.4178046218) 15%, #ddf9ff 40%, #ddf9ff 60%, rgba(255, 255, 255, 0.4514180672) 85%, rgba(255, 255, 255, 0) 100%);
}
.frosty .snow-storm {
animation: snow-storm 12s 8.75s ease-out;
animation-fill-mode: forwards;
}
.buddy {
margin: auto;
position: relative;
}
.head {
position: relative;
display: inline-block;
margin: auto;
z-index: 3;
}
.ear {
width: 100px;
height: 90px;
background: grey;
border-radius: 111% 58% 0% 0%;
position: absolute;
top: -10px;
border-radius: 70px 14px;
}
.ear.right {
right: -5px;
rotate: 45deg;
border-top: 3px solid lightgrey;
}
.ear.left {
left: -5px;
transform: rotate(-90deg);
border-right: 3px solid lightgrey;
}
.frosty .ear {
animation: snowy-floof 1s 11s;
animation-fill-mode: forwards;
}
.face {
width: 200px;
height: 200px;
background: grey;
border-radius: 50% 50% 50% 50%;
z-index: 2;
position: relative;
border-left: 2px solid lightgrey;
border-right: 2px solid lightgrey;
border-bottom: 0.5px solid lightgrey;
border-top: 6px solid grey;
}
.frosty .face {
animation: snowy-floof 1s 11s, snowy-borders 1s 11s;
animation-fill-mode: forwards;
}
.eyes {
display: grid;
width: 80%;
justify-content: space-around;
margin: 0 auto;
left: 0;
right: 0;
top: 25%;
position: absolute;
grid-template-columns: 1fr 1fr;
grid-template-rows: 1fr;
justify-items: center;
z-index: 1;
}
.eyefix {
position: absolute;
z-index: 999;
border: 6px solid grey;
z-index: 999;
border-radius: 50%;
width: 68px;
height: 68px;
margin: auto;
left: 0;
right: 0;
top: 0;
bottom: 0;
}
.eyefix.left {
grid-column: 1 / span 1;
}
.eyefix.right {
grid-column: 2 / span 1;
}
.frosty .eyefix {
animation: snowy-floof-eye-fix 1s 11s;
animation-fill-mode: forwards;
}
.eye {
width: 70px;
height: 70px;
display: flex;
border-radius: 50%;
position: relative;
overflow: hidden;
grid-column: 1 / span 1;
}
.eye.right {
grid-column: 2 / span 1;
}
.eye:before {
content: '';
width: 100%;
top: 0;
right: 0;
bottom: 0;
left: 0;
background: gold;
position: absolute;
border-radius: 50%;
}
.eye:after {
content: '';
width: 10px;
height: 10px;
background: white;
border-radius: 50%;
position: absolute;
left: 10px;
right: 0;
margin: auto;
top: 10px;
}
.eyelid {
position: absolute;
width: 100%;
z-index: 10;
animation: blink 5s ease-out infinite;
background: grey;
}
.hunter .eyelid {
animation: none;
}
.eyelid.top {
top: -1px;
border-bottom: 1px solid #444444;
}
.eyelid.bottom {
bottom: -1px;
border-top: 1px solid #444444;
}
.pupil {
width: 20px;
height: 40px;
background: #000;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
transition: height .4s, width .2s ease-in-out;
}
.hunter .pupil {
width: 55px;
height: 55px;
}
.snoot {
position: absolute;
transform: rotate(45deg);
width: 18px;
height: 18px;
border-radius: 100% 20% 50% 20%;
top: 112px;
background-color: #444444;
left: 0;
right: 0;
margin: auto;
z-index: 2;
}
.frosty .snoot {
animation: icy-background 1s 11s;
animation-fill-mode: forwards;
}
.mouth {
position: absolute;
top: 110px;
left: 0;
right: 0;
margin: auto;
display: flex;
justify-content: center;
}
.mouth .whisker-pad {
position: relative;
width: 40px;
height: 40px;
border-radius: 50%;
border-bottom: 5px solid #444444;
}
.frosty .mouth .whisker-pad {
animation: icy-borders 1s 11s;
animation-fill-mode: forwards;
}
.whisker {
width: 70px;
height: 10px;
margin: auto;
border-radius: 50%;
border-top: 2px solid lightgrey;
position: absolute;
}
.whisker:nth-of-type(1) {
transform: rotate(5deg);
left: -52px;
top: 17px;
}
.right .whisker:nth-of-type(1) {
transform: rotate(-5deg);
left: 25px;
}
.whisker:nth-of-type(2) {
top: 25px;
transform: rotate(0deg);
left: -48px;
}
.right .whisker:nth-of-type(2) {
transform: rotate(0deg);
left: 21px;
}
.whisker:nth-of-type(3) {
top: 36px;
transform: rotate(-12deg);
left: -26px;
width: 50px;
}
.right .whisker:nth-of-type(3) {
transform: rotate(12deg);
left: 20px;
}
.frosty .whisker {
animation: icy-borders 1s 11s;
animation-fill-mode: forwards;
}
.body {
width: 160px;
height: 240px;
background: grey;
border-radius: 44%;
margin: -40px auto 0;
position: relative;
z-index: 1;
}
.chest {
background: grey;
position: absolute;
z-index: 3;
width: 120px;
height: 90px;
margin: 0 auto;
left: 0;
right: 0;
top: 10px;
border-radius: 50%;
}
.back-leg {
background: grey;
width: 100px;
height: 180px;
bottom: 0;
position: absolute;
}
.back-leg.left {
border-radius: 60% 0px 33% 50%;
left: -30px;
border-left: 2px solid lightgrey;
}
.back-leg.right {
border-radius: 0px 60% 50% 33%;
right: -30px;
border-right: 2px solid lightgrey;
}
.front-leg {
background: grey;
width: 50px;
height: 240px;
bottom: 0;
position: absolute;
border: 2px solid lightgrey;
}
.front-leg.left {
border-radius: 113% 50% 85% 120%;
left: -10px;
}
.front-leg.right {
border-radius: 50% 113% 85% 120%;
right: -10px;
}
.foot {
width: 60px;
height: 30px;
display: flex;
position: absolute;
bottom: 0;
left: -3px;
}
.bean {
background: grey;
width: 30px;
height: 30px;
border: 2px solid lightgrey;
border-top: 0;
position: absolute;
bottom: -8px;
}
.right .bean {
border-radius: 40% 72% 50% 80%;
border-left-color: grey;
transform: rotate(5deg);
}
.right .bean:nth-of-type(1) {
left: 20px;
top: 4px;
}
.right .bean:nth-of-type(2) {
top: 7px;
left: 14px;
}
.right .bean:nth-of-type(3) {
left: 5px;
border-left-color: lightgrey;
}
.left .bean {
border-radius: 72% 40% 80% 50%;
border-right-color: grey;
transform: rotate(5deg);
}
.left .bean:nth-of-type(1) {
left: 0px;
top: 4px;
}
.left .bean:nth-of-type(2) {
top: 7px;
left: 6px;
}
.left .bean:nth-of-type(3) {
left: 14px;
border-right-color: lightgrey;
}
.tail {
width: 25px;
height: 200px;
background: grey;
position: absolute;
bottom: 20px;
border: 3px solid lightgrey;
border-radius: 100% 100% 60% 60%;
left: 60px;
transform: rotate(-45deg);
transform-origin: bottom right;
animation: tail 5s ease-out infinite;
}
.hunter .tail {
animation: none;
}
.frosty .tail {
animation: snowy-floof 1s 11s;
animation-fill-mode: forwards;
}
.snow-pile-head {
z-index: 3;
position: absolute;
transform: rotate(230deg);
width: 0px;
height: 0px;
border-radius: 150% 30% 100% 30%;
background-color: #444444;
left: 0;
right: 0;
top: 20px;
margin: 0 auto;
transform-origin: top;
background: linear-gradient(-50deg, rgba(255,255,255,1) 54%, rgba(0,212,255,1) 100%);
background-size: 400% 400%;
background-position: 6% -42%;
}
.frosty .snow-pile-head {
animation: snow-animation-head 12s 1.5s ease-in;
animation-fill-mode: forwards;
}
.snow-pile-feet {
z-index: 3;
position: absolute;
width: 50px;
height: 50px;
opacity: 0;
border-radius: 130% 120% 100% 70%;
background-color: #444444;
left: 8px;
bottom: 14px;
margin: 0 auto;
transform-origin: center bottom;
transform: scale(0, 0);
background: linear-gradient(170deg, rgba(255,255,255,1) 54%, rgba(0,212,255,1) 100%);
background-size: 400% 400%;
background-position: 16% -80%;
}
.snow-pile-feet.right {
left: auto;
right: 10px;
}
.frosty .snow-pile-feet {
animation: snow-animation-feet 12s 1.5s ease-in;
animation-fill-mode: forwards;
}
.snow-face {
position: absolute;
width: 100%;
height: 100%;
border-radius: 50%;
z-index: -1;
background: linear-gradient(170deg, rgba(255,255,255,1) 54%, rgba(0,212,255,1) 100%);
background-size: 400% 400%;
background-position: 16% -70%;
opacity: 0;
}
.frosty .snow-face {
animation: all-the-snow 1s 11s;
animation-fill-mode: forwards;
}
.snow-pile-lower-body {
z-index: 1;
position: absolute;
width: 120%;
height: 205px;
border-radius: 50% 50% 40% 40%;
border-bottom: 2px solid rgba(173, 216,230,1);
border-left: 1px solid rgba(173, 216,230,1);
border-right: 1px solid rgba(173, 216,230,1);
background-color: #444444;
left: -10%;
right: -10%;
bottom: -10px;
margin: 0 auto;
transform-origin: top;
background: linear-gradient(170deg, rgba(255,255,255,1) 54%, rgba(0,212,255,1) 100%);
background-size: 400% 400%;
background-position: 16% -70%;
opacity: 0;
}
.frosty .snow-pile-lower-body {
animation: all-the-snow 1s 11s;
animation-fill-mode: forwards;
}
.snow-pile-upper-body {
z-index: 2;
position: absolute;
width: 200px;
height: 150px;
border-radius: 50% 50% 45% 45%;
left: 0;
right: 0;
bottom: 130px;
margin: 0 auto;
transform-origin: top;
background: linear-gradient(170deg, rgba(255,255,255,1) 54%, rgba(0,212,255,1) 100%);
border-bottom: 2px solid rgba(173, 216,230,1);
border-left: 1px solid rgba(173, 216,230,1);
border-right: 1px solid rgba(173, 216,230,1);
background-size: 400% 400%;
background-position: 16% -73%;
opacity: 0;
}
.frosty .snow-pile-upper-body {
animation: all-the-snow 1s 11s;
animation-fill-mode: forwards;
}
.base {
bottom: 91px;
z-index: 0;
position: relative;
margin: 0 auto;
display: flex;
flex-direction: column;
align-items: center;
width: 860px;
}
.plate-top {
width: 100%;
height: 60px;
background: linear-gradient(87deg, rgba(140,140,140,1) 55%, rgba(208,208,208,1) 92%);
border-radius: 50%;
position: relative;
z-index: 3;
}
.plate-sides {
content: '';
width: 100%;
height: 20px;
display: block;
position: absolute;
bottom: 10px;
left: 0;
right: 0;
background: linear-gradient(87deg, rgba(140,140,140,1) 0%, rgba(208,208,208,1) 8%, rgba(140,140,140,1) 50%, rgba(208,208,208,1) 92%, rgba(140,140,140,1) 100%);
z-index: 2;
}
.plate-bottom {
content: '';
width: 100%;
height: 60px;
display: block;
position: absolute;
bottom: -19px;
left: 0;
right: 0;
background: linear-gradient(87deg, rgba(140,140,140,1) 0%, rgba(208,208,208,1) 8%, rgba(140,140,140,1) 50%, rgba(208,208,208,1) 92%, rgba(140,140,140,1) 100%);
border-radius: 50%;
z-index: 1;
}
.base-top {
position: relative;
z-index: 3;
width: 60%;
}
.base-middle {
position: relative;
z-index: 2;
width: 70%;
top: -30px;
}
.base-middle .plate-top {
height: 70px;
}
.base-middle .plate-sides {
height: 90px;
bottom: -55px;
display: flex;
align-items: center;
justify-content: center;
}
.base-middle .plate-bottom {
bottom: -85px;
}
.base-bottom {
position: relative;
z-index: 1;
width: 80%;
top: 10px;
}
.base-bottom .plate-top {
height: 70px;
bottom: 5px;
}
.base-bottom .plate-sides {
bottom: 20px;
}
.base-bottom .plate-bottom {
bottom: -10px;
}
.switch {
position: relative;
display: inline-block;
width: 100px;
height: 40px;
margin: 60px auto 0;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.button {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: radial-gradient(circle, black 57%, #8c8c8c 120%);
-webkit-transition: .4s;
transition: .4s;
border-radius: 34px;
}
.button:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 5px;
bottom: 5px;
background: radial-gradient(circle, white 0%, #ddb900 23%);
background-size: 200% 200%;
background-position: 41% 66%;
transition: all .26s ease-in-out;
border-radius: 50%;
border: 2px solid black;
}
input:checked + .button:before {
transform: translateX(60px);
}
.hat {
width: 70px;
height: 75px;
background: linear-gradient(87deg, black 0%, #4e4e4e 81%, #6e6e6e 100%);
position: absolute;
top: -27px;
z-index: 10;
left: 64px;
transform: rotate(54deg);
border-radius: 10px 10px 0 0;
opacity: 0;
}
.hat:before {
content: '';
background: linear-gradient(87deg, #ac0101 0%, red 44%, #ff5656 100%);
position: absolute;
width: 102%;
left: -1%;
right: -1%;
height: 10px;
bottom: 0;
}
.hat:after {
content: '';
background: linear-gradient(87deg, black 0%, #4e4e4e 81%, #6e6e6e 100%);
position: absolute;
width: 160%;
left: -30%;
right: -30%;
height: 10px;
bottom: -10px;
border-radius: 4px;
}
.frosty .hat {
animation: all-the-snow 1s 11s;
animation-fill-mode: forwards;
}
/*************************/
/**** ANIMATIONS HERE ****/
/*************************/
@keyframes blink {
0% {
height: 0;
}
3% {
height: 50%;
}
9% {
height: 0;
}
100% {
height: 0%;
}
}
@keyframes tail {
0% {
transform: rotate(-45deg);
}
50% {
transform: rotate(-45deg);
}
53% {
transform: rotate(-20deg);
}
56% {
transform: rotate(-45deg);
}
59% {
transform: rotate(-20deg);
}
62% {
transform: rotate(-45deg);
}
100% {
transform: rotate(-45deg);
}
}
@keyframes snow-animation-feet {
2% {
opacity: 1;
}
70% {
width: 60px;
opacity: 1;
background-position: 16% -60%;
transform: scale(1, 1);
border-radius: 80px 80px 60px 60px;
}
72% {
opacity: 1;
}
76% {
opacity: 0;
}
100% {
width: 60px;
background-position: 16% -60%;
transform: scale(1, 1);
border-radius: 80px 80px 60px 60px;
opacity: 0;
}
}
@keyframes snow-animation-head {
70% {
background-position: 6% -60%;
width: 80px;
height: 83px;
border-radius: 100% 20% 40% 20%;
left: -67px;
top: 50px;
opacity: 1;
}
72% {
opacity: 1;
}
76% {
opacity: 0;
}
100% {
background-position: 6% -60%;
width: 80px;
height: 83px;
border-radius: 100% 20% 40% 20%;
left: -67px;
top: 50px;
opacity: 0;
}
}
@keyframes snow-storm {
0% {
left: -500%;
}
100% {
left: 500%;
}
}
@keyframes all-the-snow {
100% {
opacity: 1;
}
}
@keyframes snowy-fields-main {
100% {
background: rgba(255,255,255,1);
}
}
@keyframes snowy-fields-highlights-front {
0% {
background: linear-gradient(-15deg, rgba(255, 255, 255, 0) 84%, rgba(0,212,255,1) 100%);
}
100% {
background: linear-gradient(-15deg, rgba(255, 255, 255, 0) 84%, rgba(0,212,255,1) 100%);
}
}
@keyframes snowy-fields-highlights-front-mask {
0% {
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 50%, rgba(0,212,255,1) 100%);
}
100% {
background: linear-gradient(180deg, rgba(255, 255, 255, 0) 50%, rgba(0,212,255,1) 100%);
}
}
@keyframes snowy-fields-highlights-middle {
0% {
background: linear-gradient(171deg, rgba(255, 255, 255, 0) 24%, rgba(0,212,255,1) 100%);
}
100% {
background: linear-gradient(171deg, rgba(255, 255, 255, 0) 24%, rgba(0,212,255,1) 100%);
}
}
@keyframes snowy-fields-highlights-back {
0% {
background: linear-gradient(207deg, rgba(255, 255, 255, 0) 24%, rgba(0,212,255,1) 100%);
}
100% {
background: linear-gradient(207deg, rgba(255, 255, 255, 0) 24%, rgba(0,212,255,1) 100%);
}
}
@keyframes snowy-floof {
0% {
background: rgba(255,255,255,1);
border-color: rgba(173, 216,230,1);
}
100% {
background: rgba(255,255,255,1);
border-color: rgba(173, 216,230,1);
}
}
@keyframes snowy-floof-eye-fix {
0% {
border-color: rgba(255,255,255,1);
}
100% {
border-color: rgba(255,255,255,1);
}
}
@keyframes snowy-borders {
0% {
border-color: rgba(255,255,255,1);
}
100% {
border-color: rgba(255,255,255,1);
}
}
@keyframes icy-borders {
0% {
border-color: rgba(173, 216,230,1);
}
100% {
border-color: rgba(173, 216,230,1);
}
}
@keyframes icy-background {
0% {
background: rgba(173, 216,230,1);
}
100% {
background: rgba(173, 216,230,1);
}
}
@keyframes border-fix {
0% {
box-shadow: 5px 10px 21px 20px #7fc885;
}
100% {
box-shadow: 5px 10px 21px 20px white;
}
}
@keyframes snow-fade-in {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes colours-one {
0% {
background: lightblue;
}
50% {
background: teal;
}
100% {
background: lightblue;
}
}
@keyframes colours-two {
0% {
background: gold;
}
50% {
background: hotpink;
}
100% {
background: gold;
}
}
@keyframes colours-three {
0% {
background: purple;
}
50% {
background: yellow;
}
100% {
background: purple;
}
}
JS
const pupils = document.querySelectorAll('.pupil');
const buddy = document.querySelector('.buddy');
const eyeTrigger = document.querySelectorAll('.switch');
const eyeTracking = (e) => {
var x = event.clientX * 100 / window.innerWidth + "%";
var y = event.clientY * 100 / window.innerHeight + "%";
pupils.forEach(pupil => {
pupil.style.left = x;
pupil.style.top = y;
pupil.style.transform = `translate(-${x}, -${y})`;
});
};
window.addEventListener('mousemove', eyeTracking);
eyeTrigger.forEach(trigger => {
trigger.addEventListener('mouseenter', e => {
buddy.classList.add('hunter');
});
trigger.addEventListener('mouseleave', e => {
buddy.classList.remove('hunter');
});
});
// SNOW! based on kurisu brooks' snow.js
// Settings
// let snowMax = 100; SET IN THE TOGGLE.
const snowColor = ["#DDD", "#EEE"];
const snowEntity = "•";
const snowSpeed = 0.3;
const snowMinSize = 8;
const snowMaxSize = 40;
const snowRefresh = 10;
let snow = [],
pos = [],
coords = [],
lefr = [],
marginBottom,
marginRight;
const randomise = range => {
rand = Math.floor(range * Math.random());
return rand;
}
const initSnow = () => {
if(snowMax > 0) {
const globeypls = document.querySelector('.globe-inner');
for (i = 0; i <= snowMax; i++) {
const flake = document.createElement('span');
flake.innerHTML = `${snowEntity}`;
flake.classList.add(`flake`, `flake${i}`);
globeypls.appendChild(flake);
}
let snowSize = snowMaxSize - snowMinSize;
marginBottom = document.body.scrollHeight - 5;
marginRight = document.body.clientWidth - 15;
for (i = 0; i <= snowMax; i++) {
coords[i] = 0;
lefr[i] = Math.random() * 15;
pos[i] = 0.03 + Math.random() / 10;
snow[i] = document.querySelector(".flake" + i);
snow[i].style.fontFamily = "inherit";
snow[i].size = randomise(snowSize) + snowMinSize;
snow[i].style.fontSize = snow[i].size + "px";
snow[i].style.color = snowColor[randomise(snowColor.length)];
snow[i].style.zIndex = Math.round(Math.random() * 10);
snow[i].sink = snowSpeed * snow[i].size / 5;
snow[i].posX = randomise(marginRight - snow[i].size);
snow[i].posY = randomise(2 * marginBottom - marginBottom - 2 * snow[i].size);
snow[i].style.left = snow[i].posX + "px";
snow[i].style.top = snow[i].posY + "px";
}
moveSnow();
}
}
const resize = () => {
marginBottom = document.body.scrollHeight - 5;
marginRight = document.body.clientWidth - 15;
}
const moveSnow = () => {
if(snowMax > 0) {
for (i = 0; i <= snowMax; i++) {
coords[i] += pos[i];
snow[i].posY += snow[i].sink;
snow[i].style.left = snow[i].posX + lefr[i] * Math.sin(coords[i]) + "px";
snow[i].style.top = snow[i].posY + "px";
if (snow[i].posY >= marginBottom - 2 * snow[i].size || parseInt(snow[i].style.left) > (marginRight - 3 * lefr[i])) {
snow[i].posX = randomise(marginRight - snow[i].size);
snow[i].posY = 0;
}
}
setTimeout("moveSnow()", snowRefresh);
}
}
// GLOBE CONTROL
const checkbox = document.querySelector("input[name=globe-switch]");
const globe = document.querySelector('.globe');
checkbox.addEventListener( 'change', function() {
if(this.checked) {
snowMax = 100;
initSnow();
globe.classList.add('frosty');
buddy.classList.remove('hunter');
} else {
globe.classList.remove('frosty');
snowMax = 0;
snow = [];
pos = [];
coords = [];
lefr = [];
let flakeQty = document.querySelectorAll('.flake');
flakeQty.forEach(flake => {
flake.remove();
});
}
});