チェックボックスは、単体で使うよりもラベル(説明文)と一緒に表示することがほとんどです。今回は、Bootstrapが提供するサンプルを参考にしながら、チェックボックスにラベルを付ける方法を解説します。
Bootstrapのサンプルを確認する
Bootstrap公式サイトの「チェックボックスとラジオ」のページを見ると、input要素のcheckboxとlabel要素が一緒に使われています。labelにはclass=”form-check-label”が指定されています。
図1 Bootstrap公式サイトのチェックボックスのサンプル(form-check-label)
この書き方をそのまま参考にして、自分のプログラムにも同じようにラベルを追加していきます。
labelタグを追加する
現在のコードは、次のようにinput要素だけでlabelがありません。
図2 ラベルを付ける前のコード(input要素のみ)
input要素の下にlabel要素を追加し、「自動更新」という文字を入れます。これがラベルとして表示される文字になります。あわせて、labelにBootstrapのform-check-labelクラスを指定します。
<input type="checkbox" class="form-check-input"
@bind="_isAuto"
@bind:after="AutoChanged" />
<label class="form-check-label">自動更新</label>
図3 labelにform-check-labelクラスを指定したコード
この状態で実行すると、チェックボックスと「自動更新」の文字が並んで表示されます。
図4 実行結果(ラベル追加直後)
2つの問題点
実行結果を見ると、2つの問題があることが分かります。1つ目は、チェックボックスとラベルの高さが揃っていないこと。2つ目は、「自動更新」の文字をクリックしてもチェックボックスが反応しないことです。本来は、ラベルの文字をクリックしただけでもチェックが付いてほしいところですが、現状ではそれができていません。
図5 高さのズレとラベルクリック時の反応を確認
idとforでinputとlabelを対応付ける
ラベルをクリックしてチェックボックスを反応させるには、input側にid属性を指定し、label側で同じ文字列をfor属性に指定します。こうすることで、このinputとlabelは同じもの(対になっている)とブラウザーに伝わり、ラベルをクリックしてもinput側が反応するようになります。
Bootstrapのサンプルでも、input側にid=”flexCheckDefault”、label側にfor=”flexCheckDefault”が指定されており、「Default checkbox」という文字をクリックするとチェックが切り替わるようになっています。
図6 サンプルのid/for属性とラベルクリックによる連動
この考え方にならって、checkbox側にid=”autoCheckBox”を指定します。この名前は自由に付けて構いません。
図7 checkbox側にid属性を追加
そして、対にしたいlabel側に、同じ文字列をfor属性として指定します。これで、このcheckboxとlabelは同じものだとブラウザーに伝わり、ラベルをクリックしてもcheckboxが反応するようになります。
<input type="checkbox" class="form-check-input"
@bind="_isAuto"
@bind:after="AutoChanged"
id="autoCheckBox" />
<label class="form-check-label"
for="autoCheckBox">自動更新</label>
図8 id/forを対応付けたコード
div要素でスタイルをまとめる
残るもう1つの問題(チェックボックスとラベルの高さが揃っていない見た目)は、スタイルを合わせることで解決できます。Bootstrapのサンプルでは、input要素とlabel要素全体をdivタグで囲み、そのdivにclass=”form-check”を指定しています。
このdivは、Windowsフォームで言うところのパネルやグループボックスのようなもので、コンテナ(ここからここまでを1つのグループとしてまとめる箱)の役割を果たします。form-checkクラスを指定しておくと、チェックボックスとラベルのスタイルが揃い、きれいに表示されるようになります。
そこで、input要素の前に<div>タグを追加します。
図9 div要素を追加する(class未指定の状態)
</div>タグは、label要素の下(閉じタグの後)に配置し、inputとlabelをひとまとめにグルーピングします。divのclassには、IntelliSenseの候補一覧からform-checkを選択します。
図10 IntelliSenseからform-checkクラスを選択
最終的なコードは次のようになります。
<div class="form-check">
<input type="checkbox" class="form-check-input"
@bind="_isAuto"
@bind:after="AutoChanged"
id="autoCheckBox" />
<label class="form-check-label"
for="autoCheckBox">自動更新</label>
</div>
図11 form-checkクラスを指定した最終的なコード
実行結果の確認
この状態で実行すると、チェックボックスとラベルの高さが揃い、見た目もきれいに表示されるようになりました。
図12 form-check適用後の実行結果
チェックボックスを使う際は、このようにlabelタグを組み合わせ、id/forで対応付け、form-checkクラスでスタイルをまとめる、という3点を意識して実装してみてください。
A01_はじめに
A02_バージョンの確認
A03_プロジェクトの作成
A04_アプリの実行
A05_サンプルプログラムの構成
A06_Razorコンポーネント
A07_Razor構文
A08_@pageでURLを指定する
A09_@rendermode
A10_PageTitle
A11_HTMLの見出し
A12_pタグ
A13_単方向データバインド
A14_単方向データバインドの詳細
A15_Bootstrap
A16_ボタンクリックイベント
A17_イベント引数の受け取り方
A18_ここまでのまとめ
B01_新しいWebページを追加する方法
B02_サイドバーから画面を表示する
B03_サイドバーのアイコンを変更する方法
B04_計測値を表示する
B05_変数に置き換える
B06_最新の値でデータを更新する
B07_@usingで通常のC#コードを呼び出す
B08_画面遷移_aタグ
B09_画面遷移_aタグの見た目をボタンにする
B10_画面遷移_NavigationManagerでの遷移
B11_画面間のパラメータの受け渡し方法
B12_EscapeDataStringでエスケープする
B13_複数のパラメータを渡す
B14_任意のパラメータにする
B15_string以外の型をパラメータで使う方法
B16_DateTime型をパラメータで渡す方法
B17_引数2個のURLも型指定に変更する
B18_パラメータ属性をつけるときの注意点
B19_OnParametersSet
B20_OnInitialized
B21_OnInitializedが2回通る問題の対応
B22_ブラウザが開いている間の値を記憶する方法
B23_値の受け渡しとしてのProtectedSessionStorage
B24_非同期を想定したUIの制御
C01_一覧表示
C02_非同期での一覧表示
C03_table-striped
D01_入力エリア
D02_双方向データバインド
D03_入力データをリアルタイムで通知する方法
D04_placeholder
D05_入力エリアの横幅の調整
D06_テキストチェンジイベントを拾う方法
D07_プルダウン
D08_プルダウンのbootstrap
D09_プルダウンの選択している値をデータバインドで操作する
D10_プルダウンにリストの値を表示する
D11_プルダウンに未選択行を入れる
D12_プルダウンの入力を禁止する
D13_プルダウンのチェンジイベントを取得する
D14_チェックボックス
D15_チェックボックスにラベルを付ける
D16_複数のチェックボックスを並べる
D17_ラジオボタン
D18_ラジオボタンのデータバインド
D19_ラジオボタンのチェンジイベント
D20_ラジオボタンにbootstrapを適応する