Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8536

CSSでパタパタ動くランキングボードを作った

$
0
0

はじめに

12月になると流行語大賞をはじめとする、様々な〇〇大賞が発表されます。
今回は、そんなときに使われるランキングボードをCSSで作りました。

CSSで作ったらこうなった

オレンジの「PUSH ME」ボタンを押すとランキングがパタパタと動き出します。
今年の流行語大賞をランキングボードに出してみます。

See the Pen CSS Ranking Board by saka212 (@saka212) on CodePen.

ソース

カスタマイズに必要な部分のHTMLとCSSを載せます。
全体はちょっと長いのでcodepenで。
https://codepen.io/saka212/pen/PowZppx

ランキングが動き出す仕組み

css
input[type="checkbox"]{display:none;}label{display:inline-block;box-sizing:border-box;width:100px;height:100px;margin-right:5px;line-height:100px;background:#ffa500;border:solid1px#ffa500;border-radius:4px;border-bottom:4pxsolid#d37800;text-shadow:1px1px1pxrgba(0,0,0,0.2);color:#fff;text-align:center;font-weight:bold;vertical-align:top;cursor:pointer;}.btn:checked+label+.frame.flip:nth-of-type(1){/* animation: keyframe名 周期 開始タイミング 回数 アニメショーン終了後のスタイル指定 */animation:frame-rotatevar(--duration)calc(var(--delay)*0)var(--count)forwards;}.btn:checked+label+.frame.flip:nth-of-type(2){animation:frame-rotatevar(--duration)calc(var(--delay)*1)var(--count)forwards;}.btn:checked+label+.frame.flip:nth-of-type(3){animation:frame-rotatevar(--duration)calc(var(--delay)*2)var(--count)forwards;}.btn:checked+label+.frame.flip:last-child{display:none;}

チェックボックスを隠し、ボタン化したラベルを押すことで、ランキングがパタパタと動きます。
動きの流れを簡単に説明すると...

1.チェックボックスとラベルタグを関連付ける。
  ↓
2.関連付けることで、ボタン化したラベルをクリックするとチェックが入る。
  ↓
3.チェックされたときに適用されるCSSに、animationプロパティを書いておくことでアニメが動く。

表示したいパタパタの数の合わせて、
.btn:checked + label + .frame .flip:nth-of-type(1) {...}
の部分は増やしておきます。animationプロパティの値は、CSSカスタムプロパティで設定すると便利です。

ランキング内容を変えて遊びたいとき

html
<divclass="row">  <inputtype="radio"id="btn1"class="btn">  <labelfor="btn1">PUSH ME</label>  <divclass="frame">    <divclass="flip"data-txt="ONE TEAM"data-txt-next="令和"></div>    <divclass="flip"data-txt="令和"data-txt-next="タピる"></div>    <!-- ↓↓ この 「data-txt-next」にパタパタが止まった止まったときに表示したいテキスト -->    <divclass="flip"data-txt="タピる"data-txt-next="ONE TEAM"></div>    <!-- ↓↓ この「data-txt」にボタンを押す前に表示するテキスト -->    <divclass="flip open"data-txt="大賞"></div>  </div></div>

ランキングひとつ分のhtmlです。
3つのパタパタを表示しているので、このhtml部分を3つ用意しています。
ボタンを押す前に表示するテキストを、
<div class="flip open" data-txt="..."></div>data-txt="..."
に書きます。
パタパタが止まったときに表示したいテキストは、そのひとつ上のdivのdata-txt="..."に書きます。

感想

rotateを使ったアニメーションはパズルですね。
よくよく整理しながら進めていかないと、何を作っているかわからなくなります。
リアリティーを出せるように、いろいろなやり方をためしているうちに、自分の頭の中もパタパタしてきたので「それっぽさ」が出る方向に転換しました。
もっとシンプルな作り方もあるかもしれません。

おわりに

「2019年ティーンが選ぶトレンドランキング」は、ほとんどわかりませんでした...。


Viewing all articles
Browse latest Browse all 8536

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>