framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
170 lines (168 loc) • 4.06 kB
text/less
.md {
.preloader {
@easing: cubic-bezier(.8,.0,.4,.8);
@speed: 1320ms; // animation time for each loop
@loops: 5; // number of points where the arc meets
animation: md-preloader-outer @speed * @loops / 2 linear infinite;
@keyframes md-preloader-outer {
0% {
transform: rotate(0);
}
100% {
transform: rotate(360deg);
}
}
}
.preloader-inner {
@preloader-inner-ease: cubic-bezier(0.35, 0, 0.25, 1);
@preloader-inner-duration: 5.25s;
@preloader-inner-circle-duration: @preloader-inner-duration * 0.25;
@preloader-inner-outer-duration: @preloader-inner-duration * (5/9);
@border-width: 4px;
position: relative;
display: block;
width: 100%;
height: 100%;
animation: md-preloader-inner-rotate @preloader-inner-duration @preloader-inner-ease infinite;
.preloader-inner-gap {
position: absolute;
width: 2px;
left: 50%;
margin-left: -1px;
top: 0;
bottom: 0;
box-sizing: border-box;
border-top: @border-width solid var(--f7-preloader-color);
}
.preloader-inner-left, .preloader-inner-right {
position: absolute;
top: 0;
height: 100%;
width: 50%;
overflow: hidden;
}
.preloader-inner-half-circle {
position: absolute;
top: 0;
height: 100%;
width: 200%;
box-sizing: border-box;
border: @border-width solid var(--f7-preloader-color);
border-bottom-color: transparent ;
border-radius: 50%;
animation-iteration-count: infinite;
animation-duration: (@preloader-inner-duration * 0.25);
animation-timing-function: @preloader-inner-ease;
}
.preloader-inner-left {
left: 0;
.preloader-inner-half-circle {
left: 0;
border-right-color: transparent ;
animation-name: md-preloader-left-rotate;
}
}
.preloader-inner-right {
right: 0;
.preloader-inner-half-circle {
right: 0;
border-left-color: transparent ;
animation-name: md-preloader-right-rotate;
}
}
}
.preloader.color-multi {
.preloader-inner-left {
.preloader-inner-half-circle {
animation-name: md-preloader-left-rotate-multicolor;
}
}
.preloader-inner-right {
.preloader-inner-half-circle {
animation-name: md-preloader-right-rotate-multicolor;
}
}
}
@keyframes md-preloader-left-rotate {
0%, 100% {
transform: rotate(130deg);
}
50% {
transform: rotate(-5deg);
}
}
@keyframes md-preloader-right-rotate {
0%, 100% {
transform: rotate(-130deg);
}
50% {
transform: rotate(5deg);
}
}
@keyframes md-preloader-inner-rotate {
12.5% {
transform: rotate(135deg);
}
25% {
transform: rotate(270deg);
}
37.5% {
transform: rotate(405deg);
}
50% {
transform: rotate(540deg);
}
62.5% {
transform: rotate(675deg);
}
75% {
transform: rotate(810deg);
}
87.5% {
transform: rotate(945deg);
}
100% {
transform: rotate(1080deg);
}
}
@keyframes md-preloader-left-rotate-multicolor {
0%,
100% {
border-left-color: #4285F4;
transform: rotate(130deg);
}
75% {
border-left-color: #1B9A59;
border-top-color: #1B9A59;
}
50% {
border-left-color: #F7C223;
border-top-color: #F7C223;
transform: rotate(-5deg);
}
25% {
border-left-color: #DE3E35;
border-top-color: #DE3E35;
}
}
@keyframes md-preloader-right-rotate-multicolor {
0%,
100% {
border-right-color: #4285F4;
transform: rotate(-130deg);
}
75% {
border-right-color: #1B9A59;
border-top-color: #1B9A59;
}
50% {
border-right-color: #F7C223;
border-top-color: #F7C223;
transform: rotate(5deg);
}
25% {
border-top-color: #DE3E35;
border-right-color: #DE3E35;
}
}
}