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