チェックボックスの見た目をCSSで変更しているとき、TABキー移動でフォーカスがあたらない
→チェックボックスを非表示にしている場合、display:noneではなくopacity:0.0に変更する+position: absoluteとする
・チェックボックスなどの見た目をCSSで変更する場合、元のチェックボックスを非表示にし、疑似要素などを使用して代替アイコンを表示するという実装をするのがほとんどのはず
・元のチェックボックスを非表示にする場合にdisplay:noneやvisibility:hiddenを使うと、フォーカスがあたらなくなる
※フォーカス移動をTABキーで、チェックボックスのONOFFの切り替えをスペースキーで行いたい人にとっては不便になるという問題あり。
※マウス、タッチ操作などではあまり問題にならない。
・非表示にするにはopacity:0.0;(透明度の設定)とする。
単に見えなくなるだけなので、チェックボックスの表示されている部分を詰めて見せるにはposition:absoluteをつける。
・以下は記述のイメージ。
チェックボックス本体を消すCSSを変更する。
※本来はCSS側にはチェックボックスの見た目を変更するためのスタイル設定がたくさんあるのだが、その部分についてはこの記事で扱っている話とは別なので記載していない。
「CSSでチェックボックスの見た目を変更」などで検索するとおそらく出てくる。
検索したコードにもし、チェックボックス本体を消すCSSとして「display:none」等と書かれていた場合は(フォーカスあてられるようにしたいなら)変更した方がいいよ という話
<label>
<input type="checkbox" name="xxxx" value="○○" class="test-class-check">
<span class="checkbox-text">○○</span>
</label>
/* checkboxに設定されているclassに対して */
.test-class-check {
/*display: none; */
opacity: 0.0;
position: absolute;
}
「フォーカスを当てたい」ということは、「現時点でフォーカスが当たっているのか否かが分かる状態にしたい」ということでもあるので、一例として以下の対応を追加
(※隣接テキスト以外のチェックボックス用アイコンを用意していない場合)
・チェックボックス本体(※見えてない)、もしくは隣接テキストにフォーカスが当たったときに、
見えている隣接テキストにスタイル変化を起こしたい場合は以下のような記述を追加
※意味合い的には、
・テキストにフォーカスが当たっている(=チェックボックスに隣接(+)しているテキストがfocusなどの状態になっている)
・チェックボックスにフォーカスが当たっている(=focusなどの状態になっているチェックボックスに隣接(+)しているテキスト)
のいずれかに対し、(テキストのまわりに)実線1px灰色をつける。
※「@media(hover: hover)」で囲ってあるのは、スマホでラベルをタッチした際に(hoverの状態が継続されてしまい)スタイル変化が継続されてしまうため、hover(カーソルを乗せる)の動作がないスマホでスタイル変化が起きないようにするため(別記事)
@media (hover: hover) {
.test-class-check + .checkbox-text:is(:hover, :focus, :active),
.test-class-check:is(:hover, :focus, :active) + .checkbox-text {
border: solid 1px #cfcfcf;
}
}