client/src/components/busy-spinner/busy-spinner.scss (88 lines of code) (raw):
@import '../../style/palette';
:host {
display: block;
height: 65px;
width: 65px;
position: relative;
box-sizing: border-box;
> * {
box-sizing: border-box;
height: 13.3%;
width: 13.3%;
animation-duration: 2000ms;
top: 43.333%;
left: 43.333%;
position: absolute;
animation-iteration-count: infinite;
border-radius: 50%;
}
:nth-child(2n+0) {
margin-right: 0;
}
@for $i from 1 through 8 {
> *:nth-child(#{$i}) {
animation-name: busy-spinner-animation-child-#{$i};
animation-delay: calc(100ms * #{$i});
background-color: nth($theme-colors, $i % length($theme-colors) + 1);
}
}
> *:nth-child(9) {
height: calc(65px / 3);
width: calc(65px / 3);
animation-duration: 2000ms;
top: calc(65px / 3);
left: calc(65px / 3);
background-color: nth($theme-colors, 1);
animation: busy-spinner-animation-child-big 2s infinite;
animation-delay: 0.5s;
}
}
$sqrt-2: 1.414;
$child-base-distance: 325%;
$child-distance: calc($child-base-distance * $sqrt-2);
$child-diagonal-distance: calc($child-base-distance / $sqrt-2);
@keyframes busy-spinner-animation-child-1 {
50% {
transform: translate(0, -$child-distance);
}
}
@keyframes busy-spinner-animation-child-2 {
50% {
transform: translate($child-diagonal-distance, -$child-diagonal-distance);
}
}
@keyframes busy-spinner-animation-child-3 {
50% {
transform: translate($child-distance, 0);
}
}
@keyframes busy-spinner-animation-child-4 {
50% {
transform: translate($child-diagonal-distance, $child-diagonal-distance);
}
}
@keyframes busy-spinner-animation-child-5 {
50% {
transform: translate(0, $child-distance);
}
}
@keyframes busy-spinner-animation-child-6 {
50% {
transform: translate(-$child-diagonal-distance, $child-diagonal-distance);
}
}
@keyframes busy-spinner-animation-child-7 {
50% {
transform: translate(-$child-distance, 0);
}
}
@keyframes busy-spinner-animation-child-8 {
50% {
transform: translate(-$child-diagonal-distance, -$child-diagonal-distance);
}
}
@keyframes busy-spinner-animation-child-big {
50% {
transform: scale(0.5);
}
}