クリックイベントをCSSだけで

クリックイベントをCSSだけで

以前まで、要素をクリックしたときのインタラクションデザインには、jQuery でイベントトリガーを用意していました。でも、スタイルはCSSで指定したいなと思うわけで。:hover擬似クラスのような感じで、:onclick とかできればいいのになと。

label と input:checked を使うだけなんですけど、この手法を知ったときは目からウロコでした。

サンプルコード

<!-- HTML -->
<div id="sample">
  <label for="toggle">ここをクリックすると</label>
  <input type="checkbox" id="toggle">
  <div>
    <p>要素が変化します</p>
  </div>
</div>
/* CSS */
#sample label{
  cursor: pointer;
}
#sample input{
  display: none;
}
#sample input+div{
  background: lightgray;
}
#sample input:checked+div{
  background: lightgreen;
}

サンプルDEMO

要素が変化します

Usage

サンプルでは背景色を変えているだけですが、transition や animation と組み合わせて、いい感じのインタラクションをスクリプトなしで実装できます。

スマホとかタブレットとかのタッチデバイスでは :hover は意味ないですし、使いどころが多いかと思います。

(今さら感のある Tips ですが、こんな感じでまったりまいります)