フォームコントロール(Form control)
複数の状態をサポートするテキスト入力およびテキストエリアをスタイル。
※"v5.0.0"での変更はv5.0.0-alpha版、v5.0.0-beta版での変更も含みます。
※"v5.3.0"での変更はv5.3.0-alpha版での変更も含みます。
基本の設定(Example)v5.0.0-alpha1設定変更、v5.2.0デザイン変更
フォームコントロールは、SassとCSS変数を組み合わせてスタイル付けされており、カラーモードに適応し、あらゆるカスタマイズ方法に対応できる。
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<div class="mb-3">
<label for="exampleFormControlInput1" class="form-label">Eメールアドレス</label>
<input type="email" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com">
</div>
<div class="mb-3">
<label for="exampleFormControlTextarea1" class="form-label">テキストエリアの例</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
</div>
type="text"
の部分をご変更下さい).mb-3>label.form-label+tarea.form-control[rows=3 placeholder](テキストエリアの場合、展開後
cols="30"
は不要なので削除して下さい)※Bootstrap4.xの設定例 赤背景が変更箇所
<div class="form-group">
<label for="exampleFormControlInput1">Eメールアドレス</label>
<input type="email" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com">
</div>
<div class="form-group">
<label for="exampleFormControlTextarea1">テキストエリアの例</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
</div>
【設定】
div.mb-3
> [label.form-label
《ラベル》 +input.form-control
《コントロール》]div.mb-3
> [label.form-label
《ラベル》 +textarea.form-control
《テキストエリア》]textarea.form-control
《テキストエリア》の高さは、rows
属性の数値で調整(横幅のcols
属性は無効)
【アクセシビリティの設定】
label.form-label
のfor
属性の値と、input.form-control
(またはtextarea.form-control
)のid
属性の値を同じにしてラベルとコントロールを関連付ける- コントロールをラベルなしで使用する場合は、ラベルテキストの代替として
input.form-control
にaria-label
属性(ビジュアルで目的を表現する要素に対するラベル付け)を入れる
※placeholder
属性はまだアクセシビリティな名前を提供する有効な方法として公式かつ一貫してサポートされていないため
【変更履歴】
- 【v5.0.0-alpha1】
.form-group
は下側のマージン設定だけになるので廃止(下側のマージンが必要なら.mb-*
を設定する)<label>
に.form-label
を入れる
- 【v5.2.0】
border-radius
の値を調整したので、若干丸みを帯びたデザインに変更
コントロールのサイズ(Sizing)
.form-control-lg
や .form-control-sm
のようなクラスを使って高さを設定。
サイズの種類
大きめ:.form-control-lg
小さめ:.form-control-sm
デフォルト(参考)
設定例
大きめ<input type="text" class="form-control form-control-lg" placeholder="..." aria-label="大きめのコントロールの例">
小さめ<input type="text" class="form-control form-control-sm" placeholder="..." aria-label="小さめのコントロールの例">
【設定】
.form-control
に.form-control-{sm|lg}
を追加
フォームテキスト(Form text)旧ヘルプテキスト、v5.3.1設定変更、フォームの概要から移動
ブロックレベルやインラインレベルのフォームテキストは、.form-text
を使用して作成できる。
aria-describedby
(補足情報)属性を使って、関連するフォームコントロールに明示的に関連付ける必要がある。これによりスクリーンリーダーなどの支援技術が、ユーザーがコントロールにフォーカスしたり入力したりするときに、このフォームテキストを通知することが保証される。
1. 縦積みフォーム
インプットの下のフォームテキストは、.form-text
でスタイル設定できる。ブロックレベルの要素を使用する場合は、上のインプットから簡単に間隔が空くように上側にマージンが追加される。
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<label for="inputHelpBlock" class="form-label">パスワード</label>
<input type="password" id="inputHelpBlock" class="form-control" aria-describedby="passwordHelpBlock">
<div id="passwordHelpBlock" class="form-text">パスワードは、文字と数字を含めて8~20文字で、空白、特殊文字、絵文字を含むことはできません。</div>
※Bootstrap4.xの設定例 赤背景が変更箇所
<label for="inputHelpBlock">パスワード</label>
<input type="password" id="inputHelpBlock" class="form-control" aria-describedby="passwordHelpBlock">
<small id="passwordHelpBlock" class="form-text text-muted">パスワードは、文字と数字を含めて8~20文字で、空白、特殊文字、絵文字を含むことはできません。</small>
2. 横並びフォーム
インラインテキストでは、.form-text
クラス以外に、通常のインラインHTML要素(<span>
など)を使用。
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<form class="row g-3 align-items-center">
<div class="col-auto">
<label for="inputPassword6" class="col-form-label">パスワード</label>
</div>
<div class="col-auto">
<input type="password" id="inputPassword" class="form-control" aria-describedby="passwordHelpInline">
</div>
<div class="col-auto">
<span id="passwordHelpInline" class="form-text">長さは8-20文字でなければなりません</span>
</div>
</form>
※Bootstrap4.xの設定例 赤背景が変更箇所
<form class="form-inline">
<div class="form-group">
<label for="inputPassword">パスワード</label>
<input type="password" id="inputPassword" class="form-control mx-sm-3" aria-describedby="passwordHelpInline">
<small id="passwordHelpInline" class="text-muted">長さは8-20文字でなければなりません</small>
</div>
</form>
【設定】
- 縦積みフォーム:フォームテキストを
div.form-text
で囲む - 横並びフォーム:フォームテキストを
span.form-text
で囲む - スタイルを変更したい場合は、
scss/_variables.scss
内の$form-text-***
変数の値を変更して再コンパイルする
【アクセシビリティの設定】
<input>
にはaria-describedby
属性(解説を行うフォームテキストのIDを指定)を入れる
【変更履歴】
- 【v5.0.0-alpha1】
- 縦積みフォーム:
small.form-text.text-muted
⇒div.form-text
- 横並びフォーム:
small.text-muted
⇒span.form-text
- ※
.form-text
にあらかじめフォントサイズや色などが組み込まれたので、<small>
や.text-muted
の設定は不要に
- 縦積みフォーム:
- 【v5.3.0】
<input>
の[aria-describedby]
を[aria-labelledby]
に変更(入力フィールドにデータ形式などの必須情報がある場合、フォームテキスト(ヘルパー)と関連付けるためにaria-labelledby
を使用)
- 【v5.3.1】
<input>
の[aria-labelledby]
の設定を[aria-describedby]
に戻す
無効化(Disabled)v5.0.0-alpha3設定追加、v5.0.2一部設定変更
入力コントロールに disabled
ブール属性を追加してグレー表示にし、ポインタイベントを削除してフォーカスするのを防ぐ。
見本
設定例
無効化した入力コントロール<input type="text" class="form-control" placeholder="無効化した入力コントロール" aria-label="無効化した入力コントロールの例" disabled>
無効化した読み取り専用入力コントロール<input type="text" class="form-control" value="無効化した読み取り専用入力コントロール" aria-label="無効化した読み取り専用入力コントロールの例" disabled readonly>
【設定】
- 無効化したい入力コントロール、テキストエリア(
.form-control
)や選択メニュー(select.form-select
)に[disabled]
を追加
【変更履歴】
- 【v5.0.2】
- 読み取り専用
[readonly]
にテキストを入れる場合は、[placeholder]
ではなく[value]
で設定
- 読み取り専用
読み取り専用コントロール(Readonly)v5.0.2設定変更
入力コントロールに readonly
ブール値属性を追加して、入力値の変更を防止する。readonly
入力コントロールは、フォーカスして選択できるが、disabled
入力コントロールではできない。
見本
設定例
<input type="text" class="form-control" value="ここは読み取り専用..." aria-label="読み取り専用コントロールの例" readonly>
【設定】
<input>
にreadonly
属性を入れる
【変更履歴】
- 【v5.0.2】
- テキストを入れる場合は、
[placeholder]
ではなく、[value]
で設定
- テキストを入れる場合は、
読み取り専用プレーンテキスト(Readonly plain text)
フォーム内の <inputreadonly>
要素をプレーンテキストとしてスタイル設定する場合は、 .form-control
を .form-control-plaintext
に置き換えて、デフォルトのフォームフィールドスタイルを削除し、正しい margin
と padding
を保持。
1. 水平フォーム
見本
設定例
<div class="mb-3 row">
<label for="staticEmail" class="col-sm-2 col-form-label">Eメール</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control-plaintext" id="staticEmail" value="email@example.com">
</div>
</div>
<div class="mb-3 row">
<label for="Password" class="col-sm-2 col-form-label">パスワード</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="Password" placeholder="パスワード">
</div>
</div>
2. 横並びフォーム v5.0.0-alpha2設定変更
見本
Bootstrap5.xの設定例 緑背景が変更箇所
<form class="row g-3">
<div class="col-auto">
<label for="staticEmail2" class="visually-hidden">Eメール</label>
<input type="text" class="form-control-plaintext" id="staticEmail2" readonly value="email@example.com">
</div>
<div class="col-auto">
<label for="inputPassword2" class="visually-hidden">パスワード</label>
<input type="password" class="form-control" id="inputPassword2" placeholder="パスワード">
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-3">同一性を確認</button>
</div>
</form>
※Bootstrap4.xの設定例 赤背景が変更箇所
<form class="form-inline">
<div class="mb-3">
<label for="staticEmail2" class="sr-only">Eメール</label>
<input type="text" readonly class="form-control-plaintext" id="staticEmail2" value="email@example.com">
</div>
<div class="mx-sm-3 mb-3">
<label for="inputPassword2" class="sr-only">パスワード</label>
<input type="password" class="form-control" id="inputPassword2" placeholder="パスワード">
</div>
<button type="submit" class="btn btn-primary mb-3">同一性を確認</button>
</form>
【設定】
input.form-control
の代わりにinput[readonly].form-control-plaintext
を入れる- 入れるテキストは、
[value]
で設定
【変更履歴】
- 【v5.0.0-alpha1】
- 横並びフォームの設定変更
- 【v5.0.0-alpha2】
label.sr-only
⇒label.visually-hidden
ファイル選択(File input)v5.0.0-alpha3設定変更、独立した項目より移動
.form-file
, .form-file-*
などの独自のクラスやカスタムJavascriptを使用した設定は廃止され、通常のフォームの設定と同じになった。
見本
Bootstrap5.0.0-alpha3~の設定例 緑背景が5.0.0-alpha3での変更箇所
デフォルトのファイル選択<div class="mb-3">
<label for="formFile" class="form-label">デフォルトのファイル選択の例</label>
<input type="file" class="form-control" id="formFile">
</div>
複数ファイル選択<div class="mb-3">
<label for="formFileMultiple" class="form-label">複数ファイル選択の例</label>
<input type="file" class="form-control" id="formFileMultiple" multiple>
</div>
無効なファイル選択<div class="mb-3">
<label for="formFileDisabled" class="form-label">無効なファイル選択の例</label>
<input type="file" class="form-control" id="formFileDisabled" disabled>
</div>
小さめのファイル選択<div class="mb-3">
<label for="formFileSm" class="form-label">小さめのファイル選択の例</label>
<input type="file" class="form-control form-control-sm" id="formFileSm">
</div>
大きめのファイル選択<div>
<label for="formFileLg" class="form-label">大きめのファイル選択の例</label>
<input type="file" class="form-control form-control-lg" id="formFileLg">
</div>
※Bootstrap5.0.0-alpha2の設定例 赤背景が5.0.0-alpha3変更箇所
デフォルトのファイル選択<div class="form-file">
<input type="file" class="form-file-input" id="formFile">
<label for="formFile" class="form-file-label">
<span class="form-file-text">ファイル選択...</span>
<span class="form-file-button">参照</span>
</label>
</div>
無効なファイル選択<div class="form-file">
<input type="file" class="form-file-input" id="formFileDisabled" disabled>
<label for="formFileDisabled" class="form-file-label">
<span class="form-file-text">ファイル選択...</span>
<span class="form-file-button">参照</span>
</label>
</div>
小さめのファイル選択<div class="form-file form-file-sm">
<input type="file" class="form-file-input" id="formFileSm">
<label for="formFileSm" class="form-file-label">
<span class="form-file-text">ファイル選択...</span>
<span class="form-file-button">参照</span>
</label>
</div>
大きめのファイル選択<div class="form-file form-file-lg">
<input type="file" class="form-file-input" id="customFileLg">
<label for="customFileLg" class="form-file-label">
<span class="form-file-text">ファイル選択...</span>
<span class="form-file-button">参照</span>
</label>
</div>
※Bootstrap4.xの設定例 赤背景が変更箇所
カスタム・ファイル選択<div class="custom-file">
<input type="file" class="custom-file-input" id="formFile">
<label for="formFile" class="custom-file-label" data-browse="参照">ファイル選択...</label>
</div>
【設定】
input[type="file].form-control
の場合は、ファイル選択のスタイルになる- 複数ファイル選択にするときは、
<input>
にmultiple
属性を入れる - コントロールのサイズを変更したい場合は、
.form-control
に.form-control-{sm|lg}
を追加
【注意】
- 選択ボタンや入力フィールド内の表示は閲覧するブラウザに準ずる
【変更履歴】
- 【v5.0.0-alpha1】
.custom-file
⇒.form-file
.custom-file-label
⇒.form-file-label
.custom-file-input
⇒.form-file-input
label.form-file-label
内にspan.form-file-text
とspan.form-file-button
を設定する必要あり- 文字列を翻訳するためのSCSSやHTML(
[data-browse]
)のカスタマイズは不要に .form-file.form-file-{sm|lg}
(小さめと大きめのファイル選択)が追加
- 【v5.0.0-alpha3】
div.form-file
⇒div.mb-3
label.form-file-label
⇒label.form-label
input.form-file-input
⇒input.form-control
- コントロールとラベルの順番が逆になる(ラベルが先)
- 小さめと大きめのファイル選択:
div.form-file.form-file-{sm|lg}
>input.form-file-input
⇒div.mb-3
>input.form-control.form-control-{sm|lg}
カラーピッカーの設定(Color)v5.0.0-alpha1新設
type="color"
を設定し、<input>
に .form-control-color
を追加。修飾子クラスを使用して、固定の height
を設定し、ブラウザ間のいくつかの不整合を再定義する。
見本
設定例
<div class="mb-3">
<label for="exampleColorInput" class="form-label">カラーピッカー</label>
<input type="color" class="form-control form-control-color" id="exampleColorInput" value="#712cf9" title="色を選択して下さい">
</div>
【設定】
input[type="color"].form-control
に.form-control-color
を追加(コントロールの幅が100%で表示されることを回避)- 表示する
color
(16進数表記でRGBカラーを特定)はvalue
に設定
【アクセシビリティの設定】
label.form-label
のfor
属性の値と、input.form-control.form-control-color
のid
属性の値を同じにしてラベルとコントロールを関連付ける
データリスト(Datalists)v5.0.0-alpha1新設
データリストを使うと、<input>
の中からアクセス(と自動補完)できる <option>
のグループの作成ができる。これらは <select>
要素に似ているが、より多くのメニュースタイルの制限と違いがある。ほとんどのブラウザやオペレーティングシステムは <datalist>
要素をある程度サポートしているが、スタイルは随分矛盾している。
詳細はデータリスト要素のサポートについて(Can I use)に記載。
見本
設定例
<label for="exampleDataList" class="form-label">データリストの例</label>
<input class="form-control" list="datalistOptions" id="exampleDataList" placeholder="検索するタイプ...">
<datalist id="datalistOptions">
<option value="サンフランシスコ">
<option value="ニューヨーク">
<option value="シアトル">
<option value="ロサンゼルス">
<option value="シカゴ">
</datalist>
【設定】
input.form-control
でも<datalist>
に対応
【アクセシビリティの設定】
label.form-label
のfor
属性の値と、input.form-control
のid
属性の値を同じにしてラベルとコントロールを関連付けるinput.form-control
のlist
属性の値と、<datalist>
のid
属性の値を同じにしてインプットとデータリストを関連付ける
CSS v5.0.0-beta3追加、v5.3.0Sassから名称変更
Sass変数(Sass variables)v5.3.0変数から名称変更
$input-*
は、ほとんどのフォームコントロールで共有される(ボタンではない)。
デフォルトの設定
scss/_variables.scss 内 form-input-variables の設定$input-padding-y: $input-btn-padding-y;
$input-padding-x: $input-btn-padding-x;
$input-font-family: $input-btn-font-family;
$input-font-size: $input-btn-font-size;
$input-font-weight: $font-weight-base;
$input-line-height: $input-btn-line-height;
$input-padding-y-sm: $input-btn-padding-y-sm;
$input-padding-x-sm: $input-btn-padding-x-sm;
$input-font-size-sm: $input-btn-font-size-sm;
$input-padding-y-lg: $input-btn-padding-y-lg;
$input-padding-x-lg: $input-btn-padding-x-lg;
$input-font-size-lg: $input-btn-font-size-lg;
$input-bg: var(--#{$prefix}body-bg);
$input-disabled-color: null;
$input-disabled-bg: var(--#{$prefix}secondary-bg);
$input-disabled-border-color: null;
$input-color: var(--#{$prefix}body-color);
$input-border-color: var(--#{$prefix}border-color);
$input-border-width: $input-btn-border-width;
$input-box-shadow: var(--#{$prefix}box-shadow-inset);
$input-border-radius: var(--#{$prefix}border-radius);
$input-border-radius-sm: var(--#{$prefix}border-radius-sm);
$input-border-radius-lg: var(--#{$prefix}border-radius-lg);
$input-focus-bg: $input-bg;
$input-focus-border-color: tint-color($component-active-bg, 50%);
$input-focus-color: $input-color;
$input-focus-width: $input-btn-focus-width;
$input-focus-box-shadow: $input-btn-focus-box-shadow;
$input-placeholder-color: var(--#{$prefix}secondary-color);
$input-plaintext-color: var(--#{$prefix}body-color);
$input-height-border: calc(#{$input-border-width} * 2); // stylelint-disable-line function-disallowed-list
$input-height-inner: add($input-line-height * 1em, $input-padding-y * 2);
$input-height-inner-half: add($input-line-height * .5em, $input-padding-y);
$input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5);
$input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false));
$input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false));
$input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false));
$input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
$form-color-width: 3rem;
$form-label-*
と $form-text-*
は、<label>
と .form-text
コンポーネント用。
scss/_variables.scss 内 form-label-variables の設定$form-label-margin-bottom: .5rem;
$form-label-font-size: null;
$form-label-font-style: null;
$form-label-font-weight: null;
$form-label-color: null;
scss/_variables.scss 内 form-text-variables の設定$form-text-margin-top: .25rem;
$form-text-font-size: $small-font-size;
$form-text-font-style: null;
$form-text-font-weight: null;
$form-text-color: var(--#{$prefix}secondary-color);
$form-file-*
はファイル選択用。
scss/_variables.scss 内 form-file-variables の設定$form-file-button-color: $input-color;
$form-file-button-bg: var(--#{$prefix}tertiary-bg);
$form-file-button-hover-bg: var(--#{$prefix}secondary-bg);
【変更履歴】
- 【v5.3.0】
- 関連するCSS変数が削除されたので、CSS変数の項目は削除