デフォルトのラジオボタンはタップしづらく、スマートフォンユーザーの操作性を大きく損なう可能性があります。
label
タグを使用しても、タップ範囲はボタンと文字列だけなので、ユーザビリティが大きく改善するのか、といわれると微妙と言わざるを得ません。
JavaScriptを使用せず、CSSだけでスマートフォンからもタップしやすいボタンの実装方法を忘備録も兼ねて書いていきたいと思います。
レスポンシブにも対応しています。
ラジオボタンの完成系(デモ)は下記になります。かなりシンプルにCSSを作っているため、軽量で拡張性が高いと思います。
お好きにカスタマイズしてみてください:)
PR
順を追って解説していますが、手っ取り早くスタイルシートをコピペで使いたい人は 完成までジャンプして下さい。
<div class="radio_area"> <ul> <li> <input type="radio" name="radio_group" value="選択肢1" id="no1"> <label for="no1">選択肢1</label> </li> <li> <input type="radio" name="radio_group" value="選択肢2" id="no2"> <label for="no2">選択肢2</label> </li> <li> <input type="radio" name="radio_group" value="選択肢3" id="no3"> <label for="no3">選択肢3</label> </li> <li> <input type="radio" name="radio_group" value="選択肢4" id="no4"> <label for="no4">選択肢4</label> </li> </ul> </div>
上記HTMLにスタイルをあてて、見本のようなラジオボタンを実装していきたいと思います。
まずはopacity
を使ってラジオボタンを透明にします。
/* radioボタンを透明に */ .radio_area ul li input{ opacity: 0; }
ラジオボタンを透明にしてしまったので、チェックの有無の判別がつかなくなりました。
チェック時にラベルに色をつけ、選択項目をわかりやすくします。
/* 選択時のラベルの色 */ .radio_area ul li input[type="radio"]:checked + label { background-color: #BBB; color: #FFF; }
透明にしたradio
ボタンと、label
タグが縦に並んでいる状態なので、回り込み処理を行います。
またli
タグに回り込み解除のための指定を行います。
/* 回り込み指定を追加 */ .radio_area ul li input{ float:left; opacity: 0; } /* 回り込み解除 */ .radio_area ul li:after{ content:""; display: block; clear: both; height: 0; visibility:hidden; }
次にラベルの有効範囲を広げ、タップ領域を確保します。また、マウスがlabel
の上に乗った時、マウスカーソルを指の形に指定します。
/* タップ領域を確保 */ .radio_area ul li label{ display:block; width:100%; padding:10px 0; } /* マウスオンでカーソルをポインターに */ .radio_area ul li label:hover{ cursor:pointer; }
最後にリストマーカーを非表示にしつつ、li
に線を指定して見た目を整えれば完成です。
/* リストマーカーの指定をなしに */ .radio_area ul{ list-style-type:none; } /* liに下線を追加 */ .radio_area ul li{ border-bottom:solid 1px #EEE; } /* 最初のliのみtopに線を追加 */ .radio_area ul li:first-child{ border-top:solid 1px #EEE; }
下記ソースをコピペで利用いただけます。
.radio_area ul{ list-style-type:none; } .radio_area ul li{ border-bottom:solid 1px #EEE; } /* 最初のliのみtopに線を追加 */ .radio_area ul li:first-child{ border-top:solid 1px #EEE; } /* 回り込み解除 */ .radio_area ul li:after{ content:""; display: block; clear: both; height: 0; visibility:hidden; } .radio_area ul li input{ float:left; opacity: 0; } /* 選択時のラベルの色 */ .radio_area ul li input[type="radio"]:checked + label { background-color: #BBB; color:#FFF; } .radio_area ul li label{ display:block; width:100%; padding:10px 0; } .radio_area ul li label:hover{ cursor:pointer; }
コメント