LoginSignup
5
1

はじめに

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

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

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

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

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

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

ムーンボールは、月の石で進化するポケモンが捕まえやすいボールです。
月の石で進化するポケモンのは、ニドリーナニドリーノピッピプリンエネコムンナです。
意外と少ないですね。

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

完成形

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

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

作成手順

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

01. ムーンボールの外形を作る

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

まず、この外形を作るために linear-gradient を使って作って色分けをして、
position: absolute; で青い部分を作って行きます。

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

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

position: absolute; でいい感じに青い部分作成していきます。

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

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

02. ムーンボールの内部を作る

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

ムーンボールの青い部分のギザギザは、::afterで、linear-gradientを2つ重ねて、ギザギザを表現して、
月の部分は、radial-gradient の中心を透明にして、中心の位置をずらすことで三日月の模様を作成しています。

まずは、青い部分のギザギザを以下のように記述すると作成できます。

sample.css
.top_pattern::after {
  content: "";
  position: absolute;
  background: linear-gradient(45deg, #00B1FF 50%, transparent 50%),linear-gradient(135deg, #00B1FF 50%, transparent 50%);
  background-size: 22px 22px;
  height: 100%;
  width: 22px;
  right: -10px;
}

 

ざっくりと何をしているかを解説します。
まずは、background-sizeを正方形にすることで、背景が正方形のパターンが繰り返されるようになります。
次に、45°傾いた、青→透明のグラデーションを2つ重ねています。
最後にwidth・positionを調整して、完成です。
image4.png

次に、月の部分を作っていきます。
以下のようにradial-gradient を使って、の中心を透明にして、中心の位置をずらして三日月の模様を作成しています。

sample.css
div {
  background: radial-gradient(farthest-corner at 100px 22px, transparent 50%, #fff719 50%);
}

そうすると以下のようなものが作成します。

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

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

03. ムーンボールを立体的に見えるようにする

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

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

sample.css
div {
  box-shadow: -20px -10px 40px rgba(0, 0, 0, .5) inset;
}

このように、box-shadowinsetを使うことで、以下のようにムーンボールを立体的に見せることができます。

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

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

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

ムーンボールには、月の満ち欠けように見えるようにするためCSS Animationを追加します。

まずは以下のように、clip-pathで満ち欠けに見えるように polygon を調整して見える位置を整することで、表現します。

sample.css
div {
  animation: ball-anim 6s linear infinite;
}

@keyframes ball-anim {
  0% {
    clip-path: polygon(0% 0%, 0% 0%, 0% 0%, 0% 0%, 0% 0%, 0% 0%);
  }
  25% {
    clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%, 100% 0%, 100% 0%);
  }
  50% {
    clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 100% 100%, 100% 100%, 100% 0%);
  }
  75% {
    clip-path: polygon(100% 0%, 0% 100%, 0% 100%, 100% 100%, 100% 100%, 100% 0%);
  }
  100% {
    clip-path: polygon(100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 100% 100%);
  }
}

このような感じに記載することで、ムーンボールが、月の満ち欠けをしているようなアニメーションが加わり、完成です。

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

まとめ

この記事では、CSSでムーンボールを作ってみました。
ムーンボールをつかって、月の石で進化するポケモンを捕まえて行きましょう!

アドベントカレンダーは、今日で10日目が終わりました。
アドベントカレンダー完走を目指して、あと15日です。
引き続き投稿するので、是非、カレンダーを購読して、応援していただけると嬉しいです。

これからも、色々なものをどんどん作って行きます!


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

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