メインコンテンツにスキップ ドキュメントナビゲーションにスキップ

フォームコントロール(Form control)

複数の状態をサポートするテキスト入力およびテキストエリアをスタイル。

※"v5.0.0"での変更はv5.0.0-alpha版、v5.0.0-beta版での変更も含みます。

※"v5.2.0"での変更はv5.2.0-beta1での変更も含みます。
※"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>
.mb-3>label.form-label+inp.form-control[placeholder](テキストコントロールの場合、展開後状況に応じて 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-labelfor 属性の値と、input.form-control(または textarea.form-control)の id 属性の値を同じにしてラベルとコントロールを関連付ける
  • コントロールをラベルなしで使用する場合は、ラベルテキストの代替として input.form-controlaria-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 を使用して作成できる。

1. 縦積みフォーム

インプットの下のフォームテキストは、.form-text でスタイル設定できる。ブロックレベルの要素を使用する場合は、上のインプットから簡単に間隔が空くように上側にマージンが追加される。

見本
パスワードは、文字と数字を含めて8~20文字で、空白、特殊文字、絵文字を含むことはできません。
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> など)を使用。

見本
長さは8-20文字でなければなりません
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-muteddiv.form-text
    • 横並びフォーム:small.text-mutedspan.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 に置き換えて、デフォルトのフォームフィールドスタイルを削除し、正しい marginpadding を保持。

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-onlylabel.visually-hidden

ファイル選択(File input)v5.0.0-alpha3設定変更、独立した項目より移動

見本
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-textspan.form-file-button を設定する必要あり
    • 文字列を翻訳するためのSCSSやHTML([data-browse])のカスタマイズは不要に
    • .form-file.form-file-{sm|lg}(小さめと大きめのファイル選択)が追加
  • 【v5.0.0-alpha3】
    • div.form-filediv.mb-3
    • label.form-file-labellabel.form-label
    • input.form-file-inputinput.form-control
    • コントロールとラベルの順番が逆になる(ラベルが先)
    • 小さめと大きめのファイル選択:div.form-file.form-file-{sm|lg} > input.form-file-inputdiv.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-labelfor 属性の値と、input.form-control.form-control-colorid 属性の値を同じにしてラベルとコントロールを関連付ける

データリスト(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-labelfor 属性の値と、input.form-controlid 属性の値を同じにしてラベルとコントロールを関連付ける
  • input.form-controllist 属性の値と、<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変数の項目は削除