Skip to content

Instantly share code, notes, and snippets.

@annymosse
Created July 11, 2019 18:14
Show Gist options
  • Save annymosse/4d190dd4e791b445d6f1db8556f5ddc0 to your computer and use it in GitHub Desktop.
Save annymosse/4d190dd4e791b445d6f1db8556f5ddc0 to your computer and use it in GitHub Desktop.
Cog loading animation
.loader
.loader_overlay
.loader_cogs
.loader_cogs__top
-(1..3).each do
.top_part
.top_hole
.loader_cogs__left
-(1..3).each do
.left_part
.left_hole
.loader_cogs__bottom
-(1..3).each do
.bottom_part
.bottom_hole <!-- lol -->
%p loading
%h1 Cog loader
%h2 Created in pure css
/* Inspired by this super groovy dribbble shot https://dribbble.com/shots/946595-App-loader-GIF-animation?list=searches&tag=loader&offset=3 */
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
/* Fonts */
@import url(https://fonts.googleapis.com/css?family=Montserrat:400,700);
/* Variables */
$pink:#f98db9;
$blue:#97ddff;
$yellow:#ffcd66;
$font:'Montserrat', sans-serif;
$heading:rgb(87, 110, 129);
$sub:#F98DB9;
/* Mixins */
@mixin center{
position:absolute;
left:0;
right:0;
top:0;
bottom:0;
margin:auto;
}
@mixin hole{
border-radius:100%;
background:white;
position: absolute;
}
body{
height:100vh;
font-family:$font;
text-align:center;
overflow:hidden;
h1{
text-transform:uppercase;
font-size:30px;
color:$heading;
margin:30px 0px 0px 0px;
}
h2{
font-weight:normal;
font-size:18px;
color:$sub;
margin:10px 0px 0px 0px;
}
p{
margin:0 auto;
}
.loader{
height:100%;
position:relative;
margin:auto;
width:400px;
&_overlay{
width:150px;
height:150px;
background:transparent;
box-shadow:0px 0px 0px 1000px rgba(255, 255, 255, 0.67), 0px 0px 19px 0px rgba(0, 0, 0, 0.16) inset;
border-radius:100%;
z-index:-1;
@include center;
}
&_cogs{
z-index:-2;
width:100px;
height:100px;
top: -120px !important;
@include center;
&__top{
position:relative;
width:100px;
height:100px;
transform-origin: 50px 50px;
animation:rotate 10s infinite linear;
@for $i from 1 through 3{
div:nth-of-type(#{$i}){
transform:rotate($i * 30deg)
}
}
div.top_part{
width:100px;
border-radius:10px;
position:absolute;
height:100px;
background:$pink;
}
div.top_hole{
width:50px;
height:50px;
@include hole;
@include center;
}
}
&__left{
position: relative;
width: 80px;
transform: rotate(16deg);
top: 28px;
transform-origin: 40px 40px;
animation:rotate_left 10s .1s infinite reverse linear;
left: -24px;
height: 80px;
@for $i from 1 through 3{
div:nth-of-type(#{$i}){
transform:rotate($i * 30deg)
}
}
div.left_part{
width:80px;
border-radius:6px;
position:absolute;
height:80px;
background:$blue;
}
div.left_hole{
width:40px;
height:40px;
@include hole;
@include center;
}
}
&__bottom{
position: relative;
width: 60px;
top: -65px;
transform-origin: 30px 30px;
animation:rotate_left 10.2s .4s infinite linear;
transform: rotate(4deg);
left: 79px;
height: 60px;
@for $i from 1 through 3{
div:nth-of-type(#{$i}){
transform:rotate($i * 30deg)
}
}
div.bottom_part{
width:60px;
border-radius:5px;
position:absolute;
height:60px;
background:$yellow;
}
div.bottom_hole{
width:30px;
height:30px;
@include hole;
@include center;
}
}
}
}
}
/* Animations */
@keyframes rotate{
from{transform:rotate(0deg)}
to{transform:rotate(360deg)}
}
@keyframes rotate_left{
from{transform:rotate(16deg)}
to{transform:rotate(376deg)}
}
@keyframes rotate_right{
from{transform:rotate(4deg)}
to{transform:rotate(364deg)}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment