5
1

はじめに

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

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

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

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

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

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

ネストボールは、野生のポケモン相手のレベルが低いほど捕まえやすくなるボールです。
そのため、序盤~中盤くらいには活躍しますが、段々と使わなくなるボールです。

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

完成形

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

See the Pen ネストボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.

作成手順

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

01. ネストボールの外形を作る

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

まず、この外形を作るために linear-gradient を使って作っていきます。

linear-gradientを以下のように記載することで、3色を上から順に
0% ~ 46% : #28883A
46% ~ 54% : black
54% ~ 100% : white
と塗り分けることができます。

sample.css
div {
  background: linear-gradient(#28883A 46%, black 46% 54%, white 54%);
}

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

See the Pen ネストボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.

02. ネストボールの内部を作る

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

ネストボールの内部の模様は、.patternで2つのdivをwrapして以下のようなHTMLCSSを記述して作成しています。

sample.html
<div class="base">
  <div class="pattern">
    <div class="pattern-top"></div>
    <div class="pattern-bottom"></div>
  </div>
</div>
sample.css
.pattern {
  height: 46%;
  position: absolute;
  top: 0;
  width: 100%;
  display: grid;
  place-items: center;
  overflow: hidden;
}

.pattern-top {
  border: 18px solid #D28300;
  border-radius: 100%;
  height: 25px;
  position: absolute;
  width: 100px;
  top: -30px;
}

.pattern-bottom {
  border: 18px solid #D28300;
  border-radius: 100%;
  height: 150px;
  position: absolute;
  width: 150px;
  top: -94px;
}

また、ネストボールのボタンの部分が、立体的に見えるように、中のボタンに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%;
}

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

See the Pen ネストボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.

完成. ネストボールをアニメーションさせる

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

ネストボールには、ポケモンを捕まえている途中のアニメーションを再現するために、
ネストボールが左右に揺れ、ボタンの部分が点滅するCSS Animationを追加します。

まずは以下のように、translate と rotate で左右に揺れるアニメーションを作成して行きます!

sample.css
.base {
  animation: swing-anim 1.5s ease-in-out alternate infinite;
 }

@keyframes swing-anim {
  30% {
    translate: 0px;
    rotate: 0deg;
  }
  40% {
    translate: 20px;
    rotate: 25deg;
  }
  60% {
    translate: -20px;
    rotate: -25deg;
  }
  70% {
    translate: 0px;
    rotate: 0deg;
  }
  100% {
    translate: 0px;
    rotate: 0deg;
  }
}

また、同じフレームで、ボタンが点滅しているように見えるアニメーションを作成します。

sample.css
div {
  animation: blight-anim 1.5s ease-in-out alternate infinite;
}

@keyframes blight-anim {
  30% {
    background-color: #f5f5f5;
  }
  40% {
    background-color: #FFE666;
  }
  60% {
    background-color: #FFE666;
  }
  70% {
    background-color: #f5f5f5;
  }
}

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

See the Pen ネストボール3d by でぐぅー | Qiita (@sp_degu) on CodePen.

まとめ

この記事では、CSSでネストボールを作ってみました。

このボールを使って、序盤から中盤のくらいまでをスムーズに進めて、ポケモンマスターを目指して行きましょう!

アドベントカレンダーは、今日で17日目が終わり、あと8日です。
段々と複雑なボールを作って投稿するので、是非、カレンダーを購読して、応援していただけると嬉しいです。


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

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

5
1
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
5
1