LoginSignup
8
2

はじめに

みなさん初めまして。🎅🏻

Qiita株式会社でUI/UXデザイナーとして、情報設計、体験設計(UX)、UIデザイン、フロントエンドまで携わっている @degudegu2510 です。

今年のQiita Advent Calenar 2022では、1つのアドベントカレンダーに1人で25記事を投稿しきった方 全員 に完走賞がおくられる企画を開催しています。🎉 🎉

Qiita運営として、ユーザー様だけに25記事完走してもらうのは、とても忍びないので、私も25記事完走しようと思います。

この記事は、そのカレンダーの18記事目です。

18記事目は、 「【完走賞ゲットだぜ!】CSSでタイマーボールを作る!」です。

タイマーボールは、ターン数がかかればかかるほどポケモンが捕まえやすくなるボールです。
そのため、捕まえるのに30ターン近くかかってしまったポケモンには積極的に使いたいボールです。

この記事では、CSSで作るタイマーボールを紹介しようと思います。

完成形

完成形は↓こちらです。
影やアニメーションを用いて、球体を表現しています。

See the Pen タイマーボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.

作成手順

では、早速作って行きましょう!

01. タイマーボールの外形を作る

まずは、↓このようなタイマーボールの外形を作って行きましょう!
image1.png

まず、この外形を作るために複数のグラデーションを重ねて作っていきます。

構造としては以下の画像のような形で、radial-gradientを使い、赤い部分を作成し、その上から、linear-gradientを使って色を重ねています。

image4.png

これをCSSで表現すると以下のようになり、
上から、グレーの線を作る左側の赤い部分右側の赤い部分 を表現しています。

sample.css
div {
  background:
    linear-gradient(#545351 22%, transparent 22% 46%, black 46% 54%, transparent 54%),
    radial-gradient(circle at 100% 60%, transparent 76%, #CE1C2C 76%),
    radial-gradient(circle at 0% 60%, #E6E3DA 76%, #CE1C2C 76%);
}

このようにすることで、以下のような形になります。

See the Pen タイマーボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.

02. タイマーボールの内部を作る

次に、↓このようなタイマーボールの内側の部分を作って行きましょう!
image2.png

タイマーボールの内部の模様は、.patternで上部の赤い部分を作成し、position: absolute;でいい感じの位置に配置しています。

また、タイマーボールが、立体的に見えるように、中のボタンにbox-shadowを使い2種類の影を使っています。
2種類の影の影を使うためのbox-shadowは以下のように、1種類の影ごとに,区切ると複数の影を使うことができます。

sample.css
div {
  box-shadow: 2px 2px 4px rgba(0,0,0,0.2), -3px -3px 4px rgba(255,255,255,0.2);
}

このように、box-shadowで2種類の影を使い、ボタン部分を作成して、内部の模様を作りました。

See the Pen タイマーボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.

※ ついでに、ボタンを押せるようにしてみました。

03. タイマーボールを立体的に見えるようにする

次に、↓このようにタイマーボールが立体的に見えるようにして行きましょう!
image3.png

box-shadowを使って、内側に影をつけて、上部の赤い部分にも影をつけてあげると、立体感が出ます。
内側に影を出すためには、 box-shadowinset を追加することで、内側になります。

sample.css
.base::after {
  content: "";
  box-shadow: -20px -10px 40px rgba(0, 0, 0, .5) inset;
  border-radius: 50%;
  height: 100%;
  position: absolute;
  width: 100%;
}

.pattern {
  box-shadow:
    2px 2px 4px rgba(255, 255, 255, 0.4) inset,
    -2px -2px 4px rgba(0, 0, 0, 0.4) inset;
}

このように::afterbox-shadowで影を作ることで、模様も含めて、影を追加することができます。

See the Pen タイマーボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.

完成. タイマーボールをアニメーションさせる

最後にアニメーションさせたら、完成です。

タイマーボールには、時計の針が進んでいるように見えるアニメーションを再現するため、
長針と短針のdivを用意して、回転するCSS Animationを追加します。

まずは以下のように、HTML と CSSを追加して、時計の針が進むアニメーションを作成していきます!
また、アニメーションする時間を長針と短針で変えることで、回転する速さを変えています。

sample.html
<div class="clock">
  <div class="long hand"></div>
  <div  class="short hand"></div>
</div>
sample.css
.long {
  height: 300px;
  clip-path: polygon(40% 0, 60% 0, 100% 50%, 50% 100%, 0 50%);
  background: linear-gradient(black 22%, transparent 22%);
  animation: rotate-anim 12s linear infinite;
}

.short {
  height: 240px;
  clip-path: polygon(40% 0, 60% 0, 100% 50%, 50% 100%, 0 50%);
  background: linear-gradient(gray 15%, transparent 15%);
  animation: rotate-anim 148s linear  infinite;
}

@keyframes rotate-anim {
  0% {rotate: 0deg}
  100% {rotate: 360deg}
}

このような感じに記載することで、
タイマーボールが左右に揺れ、ボタンの部分が点滅するようなアニメーションが加わり、完成です。

See the Pen タイマーボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.

まとめ

この記事では、CSSでタイマーボールを作ってみました。

このボールを使って、捕まえるのに30ターン近くかかってしまったポケモンをより高確率で捕まえて、ポケモンマスターを目指して行きましょう!

アドベントカレンダーは、今日で18日目が終わり、あと7日です。
残り1週間になりましたが、もっと複雑なボールを作って投稿するので、是非、カレンダーを購読して、応援していただけると嬉しいです。


最後まで読んでくださってありがとうございます!

X(Twitter)でも情報を発信しているので、良かったらフォローお願いします!

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2