恵比寿のWebサイト制作・Webデザインチームのブログ。Webデザインやコーディング、SEO対策まで幅広く手掛けています。

恵比寿のデザイン制作チームのブログです。

Webデザイン、
Web制作、
SEO対策の
ご依頼・ご相談

Contact

HTMLとCSSだけでローディング画面(読み込み中)のグルグルを作る

投稿日:2018-08-15 更新日:




loading

今回は、読み込み中にグルグル回るやつを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)ずつずらしているのです。

複雑そうですが、仕組みが分かれば簡単ですね。

改めて、完成形のデモ。

こんな感じです。

色とかサイズを変えて試してみて下さい。




この記事をシェアする

  • Twitter
  • Facebook
  • BookmarkB!
  • Pocket

Related Entries

この記事を書いた人

TAC

TAC

Webデザイナー、フロントエンドエンジニア。 Webデザイン、HTML/CSS、JavaScript、PHP、SEOが専門です。