今回は、読み込み中にグルグル回るやつをCSSだけで作ってみました。
実際の動きはデモでご覧ください。
素材探すのが面倒とか、画像やWebアイコンの使用を極力さけたいなどの理由があってCSSで実装したい人は、どうぞご活用ください。
実装方法
まずはHTML。シンプルに。
<div class="wrapper">
<div class="balls-guruguru">
<span class="ball ball-1"></span>
<span class="ball ball-2"></span>
<span class="ball ball-3"></span>
<span class="ball ball-4"></span>
<span class="ball ball-5"></span>
<span class="ball ball-6"></span>
<span class="ball ball-7"></span>
<span class="ball ball-8"></span>
</div>
</div>
お次はCSS。
.wrapper {
height: 100vh;
position: relative;
}
.balls-guruguru {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 100px;
height: 100px;
background-color: #fff;
}
.ball {
width: 50%;
height: 20px;
position: absolute;
top: calc(50% - 10px);
transform-origin: 100% 50%;
left: 0;
}
.ball::before {
content: '';
display: block;
width: 20px;
height: 20px;
border-radius: 50%;
background-color: #333;
position: absolute;
left: 0;
top: 50%;
transform: translateY(-50%);
}
.ball-1::before {
animation: ball-guruguru 1s linear 0s infinite;
}
.ball-2 {
transform: rotate(45deg);
}
.ball-2::before {
animation: ball-guruguru 1s linear -0.125s infinite;
}
.ball-3 {
transform: rotate(90deg);
}
.ball-3::before {
animation: ball-guruguru 1s linear -0.25s infinite;
}
.ball-4 {
transform: rotate(135deg);
}
.ball-4::before {
animation: ball-guruguru 1s linear -0.375s infinite;
}
.ball-5 {
transform: rotate(180deg);
}
.ball-5::before {
animation: ball-guruguru 1s linear -0.5s infinite;
}
.ball-6 {
transform: rotate(225deg);
}
.ball-6::before {
animation: ball-guruguru 1s linear -0.625s infinite;
}
.ball-7 {
transform: rotate(270deg);
}
.ball-7::before {
animation: ball-guruguru 1s linear -0.75s infinite;
}
.ball-8 {
transform: rotate(315deg);
}
.ball-8::before {
animation: ball-guruguru 1s linear -0.875s infinite;
}
@keyframes ball-guruguru {
0% {
width: 20px;
height: 20px;
opacity: 1;
}
100% {
width: 6px;
height: 6px;
opacity: .2;
margin-left: 7px;
}
}
ちょっと長いですが、Sassとか使えばもっとスッキリ書けると思います。
.ball の部分が意味不明かもしれないので、背景色をつけてアニメーションを止めてみましょう。
ボールを均等に配置するために、横幅50%にして45°(360°÷8)ずつ回転させています。
transform-originで、回転の軸を右にずらしています。
つまり、↓この要素を45°ずつ回転させたのを8つ作って、アニメーションのタイミングを0.125秒(1秒÷8)ずつずらしているのです。
複雑そうですが、仕組みが分かれば簡単ですね。
改めて、完成形のデモ。
こんな感じです。
色とかサイズを変えて試してみて下さい。