はじめに
みなさん初めまして。🎅🏻
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. タイマーボールの外形を作る
まずは、↓このようなタイマーボールの外形を作って行きましょう!
まず、この外形を作るために複数のグラデーションを重ねて作っていきます。
構造としては以下の画像のような形で、radial-gradient
を使い、赤い部分を作成し、その上から、linear-gradient
を使って色を重ねています。
これを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. タイマーボールの内部を作る
次に、↓このようなタイマーボールの内側の部分を作って行きましょう!
タイマーボールの内部の模様は、.pattern
で上部の赤い部分を作成し、position: absolute;
でいい感じの位置に配置しています。
また、タイマーボールが、立体的に見えるように、中のボタンにbox-shadow
を使い2種類の影を使っています。
2種類の影の影を使うためのbox-shadow
は以下のように、1種類の影ごとに,
区切ると複数の影を使うことができます。
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. タイマーボールを立体的に見えるようにする
次に、↓このようにタイマーボールが立体的に見えるようにして行きましょう!
box-shadow
を使って、内側に影をつけて、上部の赤い部分にも影をつけてあげると、立体感が出ます。
内側に影を出すためには、 box-shadow
に inset
を追加することで、内側になります。
.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;
}
このように::after
にbox-shadow
で影を作ることで、模様も含めて、影を追加することができます。
See the Pen タイマーボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.
完成. タイマーボールをアニメーションさせる
最後にアニメーションさせたら、完成です。
タイマーボールには、時計の針が進んでいるように見えるアニメーションを再現するため、
長針と短針のdiv
を用意して、回転するCSS Animationを追加します。
まずは以下のように、HTML と CSSを追加して、時計の針が進むアニメーションを作成していきます!
また、アニメーションする時間を長針と短針で変えることで、回転する速さを変えています。
<div class="clock">
<div class="long hand"></div>
<div class="short hand"></div>
</div>
.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)でも情報を発信しているので、良かったらフォローお願いします!