フォーム・レイアウト(Layout) v5.0.0設定変更
フォームレイアウト・オプションを使用して、横並びから水平、カスタムグリッドの実装までフォームに何らかの構造を与える。
※"v5.0.0"での変更はv5.0.0-alpha版、v5.0.0-beta版での変更も含みます。
※"v5.3.0"での変更はv5.3.0-alpha版での変更も含みます。
フォーム(Forms)
フォームフィールドのすべてのグループは <form> 要素の中に存在するべきである。Bootstrapは <form> 要素にデフォルトのスタイルを提供しないが、デフォルトで提供される強力なブラウザ機能がいくつかある。
- ブラウザの
<form>要素で利用できる属性の概要と完全なリストについてはMDN form docsで確認できる。 <form>内の<button>はデフォルトでtype="submit"なので、特定のものにして常にtypeを入れてください。
Bootstrapは display: block と width: 100% をほぼすべてのフォームコントロールに適用するので、フォームはデフォルトでは垂直に積み重ねられる。フォーム単位でこのレイアウトを変更するには、追加のクラスを使用する。
縦積みフォーム(Utilities)v5.0.0-alpha1設定変更、旧ユーティリティ
マージンユーティリティは、フォームに構造体を追加する最も簡単な方法。これらは、ラベル、コントロール、オプションのフォームテキスト、フォーム検証メッセージの基本的なグループを提供。Bootstrapでは margin-bottom ユーティリティにこだわり、一貫性のためにフォームを通して一つの方向を使うことを推奨。
<fieldset>, <div> や他のほぼすべての要素を使用して自由にフォームが作成できる。
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<div class="mb-3">
<label for="Input" class="form-label">ラベルの例</label>
<input type="text" class="form-control" id="Input" placeholder="入力プレースホルダの例">
</div>
<div class="mb-3">
<label for="Input2" class="form-label">もう1つのラベル</label>
<input type="text" class="form-control" id="Input2" placeholder="もう1つの入力プレースホルダ">
</div>
※Bootstrap4.xの設定例 赤背景が変更箇所
<div class="form-group">
<label for="Input">ラベルの例</label>
<input type="text" class="form-control" id="Input" placeholder="入力プレースホルダの例">
</div>
<div class="form-group">
<label for="Input2">もう1つのラベル</label>
<input type="text" class="form-control" id="Input2" placeholder="もう1つの入力プレースホルダ">
</div>
【設定】
form> [div.mb-3+div.mb-3](fieldset.mb-3でも可)
【注意】
- 各コントロール(ボタンを含む)は、最後を除いて
.mb-3(マージンユーティリティ)で囲んで下側のマージンを調整する必要あり
【変更履歴】
- 【v5.0.0-alpha1】
div.form-group⇒div.mb-3(.form-groupは廃止)<label>に.form-labelを入れる
フォームグリッド(Form grid)
より複雑なフォームは、グリッドクラスを使用して構築できる。複数の列、様々な幅、追加の配置オプションが必要なフォームレイアウトで使用。有効にするには $enable-grid-classes Sass変数が必要(デフォルトでは true(有効))。
見本
設定例
<div class="row">
<div class="col">
<input type="text" class="form-control" placeholder="名字" aria-label="名字">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="名前" aria-label="名前">
</div>
</div>
【設定】
div.row> [div.col+div.col...]
ガターつき(Gutters)旧フォーム行、v5.0.0-alpha1設定変更
ガター修飾子クラスの追加により、ブロックの方向と同様にインラインでガター(グリッド列の間隔)の幅が制御できる。また、$enable-grid-classes Sass変数を有効にする必要がある(デフォルトでは true(有効))。
1. ラベルなしの設定
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<div class="row g-3">
<div class="col">
<input type="text" class="form-control" placeholder="名字" aria-label="名字">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="名前" aria-label="名前">
</div>
</div>
※Bootstrap4.xの設定例 赤背景が変更箇所
<div class="form-row">
<div class="col">
<input type="text" class="form-control" placeholder="名字" aria-label="名字">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="名前" aria-label="名前">
</div>
</div>
2. ラベルありの設定
より複雑なレイアウトもグリッドシステムで作成できる。
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<form class="row g-3">
<div class="col-md-6">
<label for="inputEmail4" class="form-label">Eメール</label>
<input type="email" class="form-control" id="inputEmail4">
</div>
<div class="col-md-6">
<label for="inputPassword4" class="form-label">パスワード</label>
<input type="password" class="form-control" id="inputPassword4">
</div>
<div class="col-md-2">
<label for="inputZip" class="form-label">郵便番号</label>
<input type="text" class="form-control" id="inputZip">
</div>
<div class="col-md-4">
<label for="inputState" class="form-label">都道府県</label>
<select id="inputState" class="form-select">
<option selected>選択...</option>
<option>...</option>
</select>
</div>
<div class="col-md-6">
<label for="inputCity" class="form-label">市町村</label>
<input type="text" class="form-control" id="inputCity">
</div>
<div class="col-12">
<label for="inputAddress" class="form-label">住所</label>
<input type="text" class="form-control" id="inputAddress" placeholder="1丁目2番3号">
</div>
<div class="col-12">
<label for="inputAddress2" class="form-label">住所2</label>
<input type="text" class="form-control" id="inputAddress2" placeholder="マンション名,部屋番号など">
</div>
<div class="col-12">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="gridCheck">
<label for="gridCheck" class="form-check-label">
保存する
</label>
</div>
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary">サインイン</button>
</div>
</form>
※Bootstrap4.xの設定例 赤背景が変更箇所
<form>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputEmail4">Eメール</label>
...
</div>
<div class="form-group col-md-6">
<label for="inputPassword4">パスワード</label>
...
</div>
</div>
<div class="form-row">
<div class="form-group col-md-2">
<label for="inputZip">郵便番号</label>
...
</div>
<div class="form-group col-md-4">
<label for="inputState">都道府県</label>
<select id="inputState" class="form-control">
...
</select>
</div>
<div class="form-group col-md-6">
<label for="inputCity">市町村</label>
...
</div>
</div>
<div class="form-group">
<label for="inputAddress">住所</label>
...
</div>
<div class="form-group">
<label for="inputAddress2">住所2</label>
...
</div>
<div class="form-group">
<div class="form-check">
...
</div>
</div>
<button type="submit" class="btn btn-primary">サインイン</button>
</form>
【設定】
- ラベルなし:
div.row.g-*> {[div.col(-{breakpoint}-*)>input.form-control[aria-label]] + [div.col(-{breakpoint}-*)>input.form-control[aria-label]]...} - ラベルあり:
form.row.g-*> [div.col(-{breakpoint}-*)+div.col(-{breakpoint}-*)...]
【アクセシビリティの設定】
- ラベルなしの場合:ラベルテキストの代替として
<label>にaria-label属性(ビジュアルで目的を表現する要素に対するラベル付け)を入れる
※placeholder属性はまだアクセシビリティな名前を提供する有効な方法として公式かつ一貫してサポートされていないため - ラベルありの場合:
<label>のfor属性の値と、<input>のid属性の値を同じにしてラベルとコントロールを関連付ける
【変更履歴】
- 【v5.0.0-alpha1】
- ラベルなし:
div.form-row⇒div.row.g-* - ラベルあり:
form>div.form-row>div.form-group.col(-{breakpoint}-*)⇒form.row.g-*>div.col(-{breakpoint}-*) .form-row,.form-groupは廃止<label>に.form-labelを入れる
- ラベルなし:
水平フォーム(Horizontal form)v5.0.0-alpha1設定変更
フォームグループに .row クラスを追加し、.col-*-* クラスを使ってラベルとコントロールの幅を指定することで、グリッドを使って水平フォームを作成。<label> に .col-form-label を追加すると、関連するフォームコントロールの中央に垂直に配置される。
時には、マージンやパディングユーティリティを使用して、完璧に必要な配置を作成する必要がある。例えば、積み重なったのラジオボタンinputラベルの padding-top を削除して、テキストのベースラインを整列させるようにする。
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<form>
<div class="row mb-3">
<label for="inputEmail" class="col-sm-2 col-form-label">Eメール</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail">
</div>
</div>
<div class="row mb-3">
<label for="inputPassword" class="col-sm-2 col-form-label">パスワード</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword">
</div>
</div>
<fieldset class="row mb-3">
<legend class="col-form-label col-sm-2 pt-0">ラジオボタン</legend>
<div class="col-sm-10">
<div class="form-check">
<input type="radio" class="form-check-input" name="gridRadios" id="gridRadios1" value="option1" checked>
<label for="gridRadios1" class="form-check-label">
オプション1
</label>
</div>
<div class="form-check">
<input type="radio" class="form-check-input" name="gridRadios" id="gridRadios2" value="option2">
<label for="gridRadios2" class="form-check-label">
オプション2
</label>
</div>
<div class="form-check">
<input type="radio" class="form-check-input" name="gridRadios" id="gridRadios3" value="option3" disabled>
<label for="gridRadios3" class="form-check-label">
オプション3(無効)
</label>
</div>
</div>
</fieldset>
<div class="row mb-3">
<div class="col-sm-10 offset-sm-2">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="gridCheck1">
<label for="gridCheck1" class="form-check-label">
ココをチェック
</label>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">登録</button>
</form>
※Bootstrap4.xの設定例 赤背景が変更箇所
<form>
<div class="form-group row">
...
</div>
<div class="form-group row">
...
</div>
<fieldset class="form-group row">
<legend class="col-form-label col-sm-2 float-sm-left pt-0">ラジオボタン</legend>
<div class="col-sm-10">
<div class="form-check">
...
</div>
<div class="form-check">
...
<div class="form-check">
...
</div>
</div>
</fieldset>
<div class="form-group row">
<div class="col-sm-10 offset-sm-2">
<div class="form-check">
...
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">登録</button>
</form>
【設定】
<form>> {div.row.mb-*>label.col-form-label.col(-{breakpoint})-**[for="ID"]《ラベル》+ [div.col(-{breakpoint})-*>input#ID.form-control]《コントロール》}《フォームグループ》・・・ + {fieldset.mb-*.row>legend.col(-{breakpoint})-**.col-form-label.pt-0+ [div.col(-{breakpoint})-*>div.form-check>input.form-check-input+label.form-check-label]《チェックボックス/ラジオボタン》・・・}《フィールドグループ》 +.btn《ボタン》
※ラベルとコントロールは.col(-{breakpoint})-*(グリッド表記)で設定
【アクセシビリティの設定】
<label>のfor属性の値と、<input>(または<textarea>)のid属性の値を同じにしてラベルとコントロールを関連付ける
【変更履歴】
- 【v5.0.0-alpha1】
div.form-group.row⇒div.row.mb-*(.form-groupは廃止)
水平フォームのサイズ(Horizontal form label sizing)
<label> や <legend> を .form-control-lg と .form-control-sm のサイズに正しく合わせるには、.col-form-label-sm か .col-form-label-lg を使用。
グリッドベースのフォームレイアウトは、大と小の入力コントロールをサポート。
サイズの種類
大きめのサイズ .col-form-label-lg, .form-control-lg
小さめのサイズ .col-form-label-sm, .form-control-sm
通常のサイズ(参考)
設定例
大きめのサイズ<div class="row mb-3">
<label for="lgFormGroupInput" class="col-sm-2 col-form-label col-form-label-lg">Eメール</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-lg" id="lgFormGroupInput" placeholder="you@example.com">
</div>
</div>
小さめのサイズ<div class="row mb-3">
<label for="smFormGroupInput" class="col-sm-2 col-form-label col-form-label-sm">Eメール</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-sm" id="smFormGroupInput" placeholder="you@example.com">
</div>
</div>
【設定】
- ラベル部分:
.col-form-labelに.col-form-label-{sm|lg}を追加 - コントロール部分:
.form-controlに.form-control-{sm|lg}を追加
コントロールの幅サイズ(Column sizing)v5.0.0-alpha1設定変更
前の例で示したように、グリッドシステムでは、.row の中に任意の数の .col を置いて、利用できる幅を均等に分割。また、残りの .col は、.col-sm-7 のような特定の列クラスを使って残りの部分を均等に分割。
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<form class="row g-3">
<div class="col-sm">
<input type="text" class="form-control" placeholder="郵便番号" aria-label="郵便番号">
</div>
<div class="col-sm">
<input type="text" class="form-control" placeholder="都道府県" aria-label="都道府県">
</div>
<div class="col-sm-7">
<input type="text" class="form-control" placeholder="市町村" aria-label="市町村">
</div>
</form>
※Bootstrap4.xの設定例 赤背景が変更箇所
<form>
<div class="form-row">
<div class="col-sm">
<input type="text" class="form-control" placeholder="郵便番号" aria-label="郵便番号">
</div>
<div class="col-sm">
<input type="text" class="form-control" placeholder="都道府県" aria-label="都道府県">
</div>
<div class="col-sm-7">
<input type="text" class="form-control" placeholder="市町村" aria-label="市町村">
</div>
</div>
</form>
【設定】
form.row.g-*>div.col(-{breakpoint}-*)>.form-control
【変更履歴】
- 【v5.0.0-alpha1】
form>div.form-row⇒form.row.g-*(.form-rowは廃止)
自動サイズ設定(Auto-sizing)v5.0.0-alpha2設定変更
以下の例では、Flexユーティリティを使用してコンテンツを垂直方向に中央揃え(※ .align-items-center を追加)し、.col を .col-auto に変更して、カラムが必要なだけのスペースを占めるようにしている。別の言い方をすれば、列の幅はコンテンツ内容に基づいてサイズが決まる。
1. .col-auto を使用
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<form class="row gy-2 gx-3 align-items-center">
<div class="col-auto">
<label for="autoSizingInput" class="visually-hidden">名前</label>
<input type="text" class="form-control" id="autoSizingInput" placeholder="ブート太郎">
</div>
<div class="col-auto">
<label for="autoSizingInputGroup" class="visually-hidden">ユーザー名</label>
<div class="input-group">
<div class="input-group-text">@</div>
<input type="text" class="form-control" id="autoSizingInputGroup" placeholder="ユーザー名">
</div>
</div>
<div class="col-auto">
<label for="autoSizingSelect" class="visually-hidden">好み</label>
<select class="form-select" id="autoSizingSelect">
<option selected>選択...</option>
<option value="1">1:</option>
<option value="2">2:</option>
<option value="3">3:</option>
</select>
</div>
<div class="col-auto">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="autoSizingCheck">
<label for="autoSizingCheck" class="form-check-label">
記憶する
</label>
</div>
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary">登録</button>
</div>
</form>
※Bootstrap4.xの設定例 赤背景が変更箇所
<form>
<div class="form-row align-items-center">
<div class="col-auto">
<label for="autoSizingInput" class="sr-only">名前</label>
<input type="text" class="form-control mb-2" id="autoSizingInput" placeholder="ブート太郎">
</div>
<div class="col-auto">
<label for="autoSizingInputGroup" class="sr-only">ユーザー名</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="autoSizingInputGroup" placeholder="ユーザー名">
</div>
</div>
<div class="col-auto">
<div class="form-check mb-2">
...
</div>
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-2">登録</button>
</div>
</div>
</form>
次に、サイズ別の列クラスを使用して、これを再度リミックスできる。
2. .col-{breakpoint}-* と併用
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<form class="row gx-3 gy-2 align-items-center">
<div class="col-sm-3">
<label for="specificSizeInputName" class="visually-hidden">名前</label>
<input type="text" class="form-control" id="specificSizeInputName" placeholder="ブート太郎">
</div>
<div class="col-sm-3">
<label for="autoSizingInputGroupUsername" class="visually-hidden">ユーザー名</label>
<div class="input-group">
<div class="input-group-text">@</div>
<input type="text" class="form-control" id="autoSizingInputGroupUsername" placeholder="ユーザー名">
</div>
</div>
<div class="col-sm-3">
<label for="specificSizeSelect" class="visually-hidden">好み</label>
<select class="form-select" id="specificSizeSelect">
<option selected>選択...</option>
<option value="1">1:</option>
<option value="2">2:</option>
<option value="3">3:</option>
</select>
</div>
<div class="col-auto">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="autoSizingCheck2">
<label for="autoSizingCheck2" class="form-check-label">
記憶する
</label>
</div>
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary">登録</button>
</div>
</form>
※Bootstrap4.xの設定例 赤背景が変更箇所
<form>
<div class="form-row align-items-center">
<div class="col-sm-3">
<label for="specificSizeInputName" class="sr-only">名前</label>
...
</div>
<div class="col-sm-3 my-1">
<label for="autoSizingInputGroupUsername" class="sr-only">ユーザー名</label>
<label for="autoSizingInputGroup" class="sr-only">ユーザー名</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="autoSizingInputGroup" placeholder="ユーザー名">
</div>
</div>
<div class="col-sm-3 my-1">
<label for="specificSizeSelect" class="sr-only">好み</label>
<select class="custom-select" id="specificSizeSelect">
...
</select>
</div>
<div class="col-auto my-1">
<div class="custom-control custom-checkbox mr-sm-2">
<input type="checkbox" class="custom-control-input" id="autoSizingCheck2">
<label for="autoSizingCheck2" class="custom-control-label">
記憶する
</label>
</div>
</div>
<div class="col-auto my-1">
<button type="submit" class="btn btn-primary">登録</button>
</div>
</div>
</form>
【設定】
form.row.gx-3.gy-2.align-items-center> [.col-auto+.col(-{breakpoint})-{auto|*}...]
【変更履歴】
- 【v5.0.0-alpha1】
form>div.form-row.align-items-center⇒form.row.gx-3.gy-2.align-items-center- インプットグループのアドオン部分を囲む
div.input-group-{prepend|append}は不要に
- 【v5.0.0-alpha2】
- ラベル:
label.sr-only⇒label.visually-hidden
- ラベル:
横並びフォーム(Inline forms)v5.1.0設定変更
.row-cols-* クラスを使用して、レスポンシブな横並びレイアウトを作成。ガター修飾子クラスの追加により、水平方向と垂直方向にガター(グリッド列の間隔)ができる。.col-12 は、狭いモバイルビューポートでフォームコントロールなどを縦積みにするのに役立つ。.align-items-center はフォーム要素を上下中央に揃え、.form-check を適切に揃える。
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<form class="row row-cols-lg-auto g-3 align-items-center">
<div class="col-12">
<label for="inlineFormInput" class="visually-hidden">名前</label>
<input type="text" id="inlineFormInput" class="form-control" placeholder="ブート太郎">
</div>
<div class="col-12">
<label for="inlineFormInputNameGroup" class="visually-hidden">ユーザー名</label>
<div class="input-group">
<span class="input-group-text">@</span>
<input type="text" class="form-control" id="inlineFormInputNameGroup" placeholder="ユーザー名">
</div>
</div>
<div class="col-12">
<label for="inlineFormSelectPref" class="visually-hidden">好み</label>
<select class="form-select" id="inlineFormSelectPref">
<option selected>選択...</option>
<option value="1">1:</option>
<option value="2">2:</option>
<option value="3">3:</option>
</select>
</div>
<div class="col-12">
<div class="form-check">
<input type="checkbox" class="form-check-input" id="inlineFormCheck">
<label for="inlineFormCheck" class="form-check-label">
記憶する
</label>
</div>
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary">登録</button>
</div>
</form>
※Bootstrap4.xの設定例 赤背景が変更箇所
<form class="form-inline">
<label for="inlineFormInput" class="sr-only">名前</label>
<input type="text" class="form-control mb-2 mr-sm-2" id="inlineFormInput" placeholder="ブート太郎">
<label for="inlineFormInputGroup" class="sr-only">ユーザー名</label>
<div class="input-group mb-2 mr-sm-2">
<div class="input-group-prepend">
<span class="input-group-text">@</span>
</div>
<input type="text" class="form-control" id="inlineFormInputGroup" placeholder="ユーザー名">
</div>
<label for="inlineFormSelectPref" class="sr-only">好み</label>
<select class="custom-select mb-2 mr-sm-2" id="inlineFormSelectPref">
...
</select>
<div class="custom-control custom-checkbox mb-2 mr-sm-2">
<input type="checkbox" class="custom-control-input" id="inlineFormCheck">
<label for="inlineFormCheck" class="custom-control-label">
記憶する
</label>
</div>
<button type="submit" class="btn btn-primary mb-2">登録</button>
</form>
※積み重ねヘルパーを使用しても設定できる(レスポンシブで縦積みにはできない)。
【設定】
form.row.row-cols-lg-auto.g-3.align-items-center> [div.col-12+div.col-12...]- ラベルを隠す場合は、
<label>に.visually-hiddenを入れる
【変更履歴】
- 【v5.0.0-alpha1】
form.form-inline⇒form.row.row-cols-md-auto.g-3.align-items-center> [div.col-12+div.col-12...](.form-inlineは廃止)- ラベルやコントロールの間隔の設定:ラベルやコントロールに空白ユーティリティクラスを追加 ⇒
<form>にグリッドガタークラスを追加(上記の事例では.g-3を設定) - インプットグループのアドオン部分を囲む
div.input-group-{prepend|append}は不要に
- 【v5.0.0-alpha2】
form.row.row-cols-md-auto⇒form.row.row-cols-lg-auto- ラベルを隠す場合:
label.sr-only⇒label.visually-hidden
- 【v5.1.0】
- 各インプットが幅100%になるバグが解消(v5.0.2で各
.col-12が.row-cols-lg-autoの設定を再定義するようになっていたため)
- 各インプットが幅100%になるバグが解消(v5.0.2で各