Owl by
Stela
On: 12 Oct 2016
<div class="owl-cont">
<div class="owl-head">
<div class="head left">
<div class="eye left">
<div class="pupil"></div>
</div>
</div>
<div class="head right">
<div class="eye right">
<div class="pupil"></div>
</div>
</div>
<div class="beak"></div>
</div>
<div class="owl-body">
<div class="feathers">
<div class="feather"></div>
<div class="feather"></div>
<div class="feather"></div>
<div class="feather"></div>
</div>
<div class="feathers">
<div class="feather"></div>
<div class="feather"></div>
<div class="feather"></div>
</div>
<div class="feathers">
<div class="feather"></div>
<div class="feather"></div>
</div>
<div class="wing left">
<div class="feather"></div>
<div class="feather"></div>
<div class="feather"></div>
</div>
<div class="wing right">
<div class="feather"></div>
<div class="feather"></div>
<div class="feather"></div>
</div>
<div class="tree-branch"></div>
</div>
</div>
/* mixins */
.abs(@top: 0; @left: 0) {
position: absolute;
top: @top;
left: @left;
}
.animation(@prop) {
-webkit-animation: @prop;
-moz-animation: @prop;
-o-animation: @prop;
animation: @prop;
}
.box(@p) {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: @p;
}
.size(@h: 0; @w: 0) {
height: @h;
width: @w;
}
.trim {
margin: 0;
padding: 0;
}
/* colours */
@blue5: #210634;
@blue4: #1F214E;
@blue3: #104F76;
@blue2: #206A8A;
@blue1: #018A8B;
body {
.trim;
.size(100vh, 100vw);
background: radial-gradient(@blue2, @blue4);
}
.owl-cont {
.size(500px; 500px);
margin: 0 auto;
position: relative;
.owl-head {
.abs(120px; 140px);
.animation(7s ease-out 0s infinite alternate turn);
background: radial-gradient(@blue2, @blue5);
border-radius: 50%;
border-bottom-left-radius: 50px 100px;
border-bottom-right-radius: 50px 100px;
height: 60px;
display: flex;
z-index: 10;
.head {
.size(60px; 60px);
background-color: @blue5;
border-radius: 50%;
position: relative;
&:before {
.size;
.abs(-36px; 0);
content: "";
display: block;
border-left: 30px solid transparent;
border-right: 30px solid transparent;
border-bottom: 60px solid @blue5;
z-index: -1;
}
.eye {
.size(40px; 40px;);
.abs(10px; 10px);
background: radial-gradient(white 10px, @blue1);
border-radius: 50%;
& * {
border-radius: 50%;
}
.pupil {
.size(10px; 10px;);
.abs(15px; 15px);
background-color: @blue5;
}
}
&.left {
-webkit-transform: rotate(-30deg);
-moz-transform: rotate(-30deg);
-ms-transform: rotate(-30deg);
-o-transform: rotate(-30deg);
transform: rotate(-30deg);
}
&.right {
-webkit-transform: rotate(30deg);
-moz-transform: rotate(30deg);
-ms-transform: rotate(30deg);
-o-transform: rotate(30deg);
transform: rotate(30deg);
}
}
.beak {
.size;
.abs(40px; 52px);
border-left: 8px solid transparent;
border-right: 8px solid transparent;
border-top: 20px solid red;
}
}
.owl-body {
.size(170px; 60px);
.abs(150px; 200px);
background: radial-gradient(farthest-corner at 40px 10px, @blue4, @blue3);
border-bottom-right-radius: 100px 200px;
border-top-right-radius: 50px;
&:before {
.size(170px; 60px);
.abs(0; -60px);
background: radial-gradient(farthest-corner at 10px 30px, @blue4, @blue3);
border-bottom-left-radius: 100px 200px;
border-top-left-radius: 50px;
display: block;
content: "";
}
.feathers {
.abs(50px; -35px;);
display: flex;
justify-content: center;
&:nth-child(2) {
margin-top: 25px;
margin-left: 9px;
}
&:nth-child(3) {
margin-top: 50px;
margin-left: 18px;
}
.feather {
.size(15px; 8px);
background: radial-gradient(@blue2, @blue1);
border-radius: 50%;
margin: 5px;
}
}
.wing {
position: relative;
z-index: -1;
.feather {
.size(50px; 25px);
border-top-right-radius: 30px;
border-bottom-right-radius: 30px;
background: radial-gradient(@blue2, @blue4);
&:first-child {
.abs(10px; -70px);
}
&:nth-child(2) {
.abs(35px; -77px);
}
&:last-child {
.abs(60px; -70px);
}
}
&.left {
.feather {
-webkit-transform: rotate(180deg);
-moz-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}
}
&.right {
left: 115px;
.feather {
&:nth-child(2) {
.abs(30px; -63px);
}
}
}
}
}
.tree-branch {
.size(30px, 150px);
.abs(180px; -75px);
background: @blue5;
border-radius: 30px 10px;
}
}
/* keyframes */
@-webkit-keyframes turn {
0% {
-webkit-transfrom: rotate(-20px) translateY(0);
-moz-transfrom: rotate(-20px) translateY(0);
-ms-transfrom: rotate(-20px) translateY(0);
-o-transfrom: rotate(-20px) translateY(0);
transfrom: rotate(-20px) translateY(0);
}
30% {
-webkit-transform: rotate(90deg) translateY(-15px);
-moz-transform: rotate(90deg) translateY(-15px);
-ms-transform: rotate(90deg) translateY(-15px);
-o-transform: rotate(90deg) translateY(-15px);
transform: rotate(90deg) translateY(-15px);
}
60% {
-webkit-transform: rotate(90deg) translateY(-15px);
-moz-transform: rotate(90deg) translateY(-15px);
-ms-transform: rotate(90deg) translateY(-15px);
-o-transform: rotate(90deg) translateY(-15px);
transform: rotate(90deg) translateY(-15px);
}
100% {
-webkit-transform: rotate(-60deg);
-moz-transform: rotate(-60deg);
-ms-transform: rotate(-60deg);
-o-transform: rotate(-60deg);
transform: rotate(-60deg);
}
}
@-moz-keyframes turn {
0% {
-webkit-transfrom: rotate(-20px) translateY(0);
-moz-transfrom: rotate(-20px) translateY(0);
-ms-transfrom: rotate(-20px) translateY(0);
-o-transfrom: rotate(-20px) translateY(0);
transfrom: rotate(-20px) translateY(0);
}
30% {
-webkit-transform: rotate(90deg) translateY(-15px);
-moz-transform: rotate(90deg) translateY(-15px);
-ms-transform: rotate(90deg) translateY(-15px);
-o-transform: rotate(90deg) translateY(-15px);
transform: rotate(90deg) translateY(-15px);
}
60% {
-webkit-transform: rotate(90deg) translateY(-15px);
-moz-transform: rotate(90deg) translateY(-15px);
-ms-transform: rotate(90deg) translateY(-15px);
-o-transform: rotate(90deg) translateY(-15px);
transform: rotate(90deg) translateY(-15px);
}
100% {
-webkit-transform: rotate(-60deg);
-moz-transform: rotate(-60deg);
-ms-transform: rotate(-60deg);
-o-transform: rotate(-60deg);
transform: rotate(-60deg);
}
}
@-o-keyframes turn {
0% {
-webkit-transfrom: rotate(-20px) translateY(0);
-moz-transfrom: rotate(-20px) translateY(0);
-ms-transfrom: rotate(-20px) translateY(0);
-o-transfrom: rotate(-20px) translateY(0);
transfrom: rotate(-20px) translateY(0);
}
30% {
-webkit-transform: rotate(90deg) translateY(-15px);
-moz-transform: rotate(90deg) translateY(-15px);
-ms-transform: rotate(90deg) translateY(-15px);
-o-transform: rotate(90deg) translateY(-15px);
transform: rotate(90deg) translateY(-15px);
}
60% {
-webkit-transform: rotate(90deg) translateY(-15px);
-moz-transform: rotate(90deg) translateY(-15px);
-ms-transform: rotate(90deg) translateY(-15px);
-o-transform: rotate(90deg) translateY(-15px);
transform: rotate(90deg) translateY(-15px);
}
100% {
-webkit-transform: rotate(-60deg);
-moz-transform: rotate(-60deg);
-ms-transform: rotate(-60deg);
-o-transform: rotate(-60deg);
transform: rotate(-60deg);
}
}
@keyframes turn {
0% {
-webkit-transfrom: rotate(-20px) translateY(0);
-moz-transfrom: rotate(-20px) translateY(0);
-ms-transfrom: rotate(-20px) translateY(0);
-o-transfrom: rotate(-20px) translateY(0);
transfrom: rotate(-20px) translateY(0);
}
30% {
-webkit-transform: rotate(90deg) translateY(-15px);
-moz-transform: rotate(90deg) translateY(-15px);
-ms-transform: rotate(90deg) translateY(-15px);
-o-transform: rotate(90deg) translateY(-15px);
transform: rotate(90deg) translateY(-15px);
}
60% {
-webkit-transform: rotate(90deg) translateY(-15px);
-moz-transform: rotate(90deg) translateY(-15px);
-ms-transform: rotate(90deg) translateY(-15px);
-o-transform: rotate(90deg) translateY(-15px);
transform: rotate(90deg) translateY(-15px);
}
100% {
-webkit-transform: rotate(-60deg);
-moz-transform: rotate(-60deg);
-ms-transform: rotate(-60deg);
-o-transform: rotate(-60deg);
transform: rotate(-60deg);
}
}
9