今回は、動きそのものはあまり凝りようのないトグルスイッチがお題だ(サンプル1)。とはいえ、視覚的な表現に細かい工夫がある。「switch」のデザインと表現スイッチとして表示するをもとに、HTMLとCSSの組み立てはわかりやすく改めた。コード行数も絞り込んである。アニメーションの動きより、陰影やグラデーションなどの組み合わせが鍵だ。
インタラクションを加える前のトグルスイッチの表現
インタラクションを加える前の静的な組み立てから確かめる。まず<body>
要素はつぎのように簡素だ。チェックボックスの<input>
要素(type
属性"checkbox")で、スイッチをオン・オフする(class
属性"switch")。もっとも、要素はCSSのdisplay
プロパティで隠す(none
)。スイッチとして表示する<label>
要素(class
属性"toggle")にfor
属性でチェックボックスのid
属性("toggle")を与えているので、クリックすればオン・オフが切り替わる。いつもどおり、-prefix-freeもCDNから読み込んでおく(第16回の「水平に並べた要素に静的なスタイルを割り当てる」参照)。
トグルスイッチの目に見える要素は3つだ(図1)。ひとつはスイッチが動く領域で、<label>
要素(class
属性"toggle")からつくられる。残るふたつのインジケータとつまみは、つぎのようにともに擬似要素(::before
と::after
)としてCSSで加えた。立体感はおもにグラデーション(linear-gradient()
関数)の塗りと陰影(box-shadow
プロパティ)で与えている。linear-gradient()
関数の引数には方向を渡していないので、デフォルトの下向き(to bottom
)だ。box-shadow
は影を広げるだけでなく、内側(inset
)に明暗を加えることで凹凸が表せる。
これでインタラクションを加える前のトグルスイッチのオフの表現ができた。ここまでのCSSの定めをつぎのコード1に掲げる。前掲の<body>
要素の記述も、ご参考までにここにまとめておこう。<body>
の要素については、このあと書き替えることはない。
トグルスイッチをスライドする
アニメーションする要素はふたつある。そのうちのつまみの擬似要素(::after
)を先に動かそう。チェックボックス(class
属性"switch")がチェックされたら(:checked
擬似クラス)、以下のように右にスライドさせる(図2)。transition
プロパティにはアニメーションの時間のみ与えた。タイミング関数は、デフォルトのease
が用いられることになる。
これで、動きは済むはずだ。だが、box-shadow
プロパティも少し変えている。内側(inset
)右に青白さを加えたので、明かりに照らされたようになった。この表現の意味は、つぎの項で明らかになる。
インジケータを光らせる
アニメーションさせるふたつめのインジケータの擬似要素(::before
)を光らせよう。オフは暗く、オンで青みがかった白に変える。陰影(box-shadow
)の設定は、つぎのように少し細かい。あまり変わらない影もあるものの、青みのかった白い光彩が透明から不透明になって表れたり、色が黒から青みがかった白に移ったりしている。背景色(background
)のグラデーション(linear-gradient()
)も白を強めた。transition
プロパティの定めは、前項のつまみと同じだ。
これでトグルスイッチをクリックすると、つまみが左右にスライドするとともにインジケータも点滅するようになった。つまみが右に移ったときインジケータは光るので、つまみの右が照らされる(図3)。前項でつまみに加えた内側右が明るくなる変化は、これを表現したかったわけだ。冒頭のサンプル1を改めてたしかめてほしい。スイッチの現実感が増しているだろう。書き上がったCSSの定めは、以下のコード2にまとめたとおりだ。