範例和使用指南,用於建立各種表單的表單控制樣式、配置選項和自訂元件。

概觀

Bootstrap 的表單控制使用類別擴充 我們的重新啟動表單樣式。使用這些類別來選擇自訂顯示,以在各種瀏覽器和裝置中獲得更一致的呈現。

務必在所有輸入中使用適當的 type 屬性(例如,電子郵件地址的 email 或數字資訊的 number),以利用電子郵件驗證、數字選取等較新的輸入控制。

以下是一個快速範例,用來說明 Bootstrap 的表單樣式。繼續閱讀以取得關於必要類別、表單配置等的文件。

我們絕不會與其他人分享您的電子郵件。
<form>
  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
    <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1">
  </div>
  <div class="form-group form-check">
    <input type="checkbox" class="form-check-input" id="exampleCheck1">
    <label class="form-check-label" for="exampleCheck1">Check me out</label>
  </div>
  <button type="submit" class="btn btn-primary">Submit</button>
</form>

表單控制項

文字表單控制(例如 <input><select><textarea>)使用 .form-control 類別設定樣式。其中包含一般外觀、焦點狀態、調整大小等樣式。

務必探索我們的 自訂表單 以進一步設定 <select> 的樣式。

<form>
  <div class="form-group">
    <label for="exampleFormControlInput1">Email address</label>
    <input type="email" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com">
  </div>
  <div class="form-group">
    <label for="exampleFormControlSelect1">Example select</label>
    <select class="form-control" id="exampleFormControlSelect1">
      <option>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
      <option>5</option>
    </select>
  </div>
  <div class="form-group">
    <label for="exampleFormControlSelect2">Example multiple select</label>
    <select multiple class="form-control" id="exampleFormControlSelect2">
      <option>1</option>
      <option>2</option>
      <option>3</option>
      <option>4</option>
      <option>5</option>
    </select>
  </div>
  <div class="form-group">
    <label for="exampleFormControlTextarea1">Example textarea</label>
    <textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
  </div>
</form>

對於檔案輸入,將 .form-control 換成 .form-control-file

<form>
  <div class="form-group">
    <label for="exampleFormControlFile1">Example file input</label>
    <input type="file" class="form-control-file" id="exampleFormControlFile1">
  </div>
</form>

尺寸

使用 .form-control-lg.form-control-sm 等類別設定高度。

<input class="form-control form-control-lg" type="text" placeholder=".form-control-lg">
<input class="form-control" type="text" placeholder="Default input">
<input class="form-control form-control-sm" type="text" placeholder=".form-control-sm">
<select class="form-control form-control-lg">
  <option>Large select</option>
</select>
<select class="form-control">
  <option>Default select</option>
</select>
<select class="form-control form-control-sm">
  <option>Small select</option>
</select>

唯讀

在輸入中加入 readonly 布林屬性,以防止修改輸入的值。唯讀輸入看起來較淡(就像已停用的輸入),但會保留標準游標。

<input class="form-control" type="text" placeholder="Readonly input here..." readonly>

唯讀純文字

如果您想要在表單中將 <input readonly> 元素設定為純文字樣式,請使用 .form-control-plaintext 類別來移除預設表單欄位樣式,並保留正確的邊界和內距。

<form>
  <div class="form-group row">
    <label for="staticEmail" class="col-sm-2 col-form-label">Email</label>
    <div class="col-sm-10">
      <input type="text" readonly class="form-control-plaintext" id="staticEmail" value="email@example.com">
    </div>
  </div>
  <div class="form-group row">
    <label for="inputPassword" class="col-sm-2 col-form-label">Password</label>
    <div class="col-sm-10">
      <input type="password" class="form-control" id="inputPassword">
    </div>
  </div>
</form>
<form class="form-inline">
  <div class="form-group mb-2">
    <label for="staticEmail2" class="sr-only">Email</label>
    <input type="text" readonly class="form-control-plaintext" id="staticEmail2" value="email@example.com">
  </div>
  <div class="form-group mx-sm-3 mb-2">
    <label for="inputPassword2" class="sr-only">Password</label>
    <input type="password" class="form-control" id="inputPassword2" placeholder="Password">
  </div>
  <button type="submit" class="btn btn-primary mb-2">Confirm identity</button>
</form>

範圍輸入

使用 .form-control-range 設定水平可捲動範圍輸入。

<form>
  <div class="form-group">
    <label for="formControlRange">Example Range input</label>
    <input type="range" class="form-control-range" id="formControlRange">
  </div>
</form>

核取方塊和單選按鈕

使用 .form-check 可改善預設核取方塊和無線按鈕,這是用於兩種輸入類型的單一類別,可改善其 HTML 元素的配置和行為。核取方塊用於在清單中選取一個或多個選項,而無線按鈕則用於從多個選項中選取一個選項。

支援已停用的核取方塊和無線按鈕。disabled 屬性會套用較淺的顏色,以協助指出輸入的狀態。

核取方塊和無線按鈕支援基於 HTML 的表單驗證,並提供簡潔且可存取的標籤。因此,我們的 <input><label> 是兄弟元素,而不是 <label> 內的 <input>。這會稍微冗長,因為您必須指定 idfor 屬性,才能關聯 <input><label>

預設 (堆疊)

預設情況下,任何數量立即成為兄弟的核取方塊和無線按鈕都會垂直堆疊,並使用 .form-check 適當地調整間距。

<div class="form-check">
  <input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
  <label class="form-check-label" for="defaultCheck1">
    Default checkbox
  </label>
</div>
<div class="form-check">
  <input class="form-check-input" type="checkbox" value="" id="defaultCheck2" disabled>
  <label class="form-check-label" for="defaultCheck2">
    Disabled checkbox
  </label>
</div>
<div class="form-check">
  <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked>
  <label class="form-check-label" for="exampleRadios1">
    Default radio
  </label>
</div>
<div class="form-check">
  <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios2" value="option2">
  <label class="form-check-label" for="exampleRadios2">
    Second default radio
  </label>
</div>
<div class="form-check">
  <input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios3" value="option3" disabled>
  <label class="form-check-label" for="exampleRadios3">
    Disabled radio
  </label>
</div>

內嵌

對任何 .form-check 新增 .form-check-inline,即可在同一水平列中將核取方塊或無線按鈕分組。

<div class="form-check form-check-inline">
  <input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
  <label class="form-check-label" for="inlineCheckbox1">1</label>
</div>
<div class="form-check form-check-inline">
  <input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
  <label class="form-check-label" for="inlineCheckbox2">2</label>
</div>
<div class="form-check form-check-inline">
  <input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="option3" disabled>
  <label class="form-check-label" for="inlineCheckbox3">3 (disabled)</label>
</div>
<div class="form-check form-check-inline">
  <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1">
  <label class="form-check-label" for="inlineRadio1">1</label>
</div>
<div class="form-check form-check-inline">
  <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2">
  <label class="form-check-label" for="inlineRadio2">2</label>
</div>
<div class="form-check form-check-inline">
  <input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3" disabled>
  <label class="form-check-label" for="inlineRadio3">3 (disabled)</label>
</div>

無標籤

.position-static 新增到沒有任何標籤文字的 .form-check 中的輸入。請記得仍提供某種無障礙名稱供輔助技術使用(例如使用 aria-label)。

<div class="form-check">
  <input class="form-check-input position-static" type="checkbox" id="blankCheckbox" value="option1" aria-label="...">
</div>
<div class="form-check">
  <input class="form-check-input position-static" type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="...">
</div>

版面配置

由於 Bootstrap 將 display: blockwidth: 100% 套用至幾乎所有我們的表單控制項,因此表單預設會垂直堆疊。可以額外使用類別來依據每個表單變更此配置。

表單群組

.form-group 類別是最簡單的方式,可為表單新增一些結構。它提供一個彈性的類別,鼓勵適當分組標籤、控制項、選用的說明文字和表單驗證訊息。預設它只套用 margin-bottom,但它會在需要時在 .form-inline 中選取額外的樣式。將它與 <fieldset><div> 或幾乎任何其他元素一起使用。

<form>
  <div class="form-group">
    <label for="formGroupExampleInput">Example label</label>
    <input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input placeholder">
  </div>
  <div class="form-group">
    <label for="formGroupExampleInput2">Another label</label>
    <input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input placeholder">
  </div>
</form>

表單格線

可以使用我們的格線類別建立更複雜的表單。將這些類別用於需要多個欄、不同寬度和額外對齊選項的表單配置。

<form>
  <div class="row">
    <div class="col">
      <input type="text" class="form-control" placeholder="First name">
    </div>
    <div class="col">
      <input type="text" class="form-control" placeholder="Last name">
    </div>
  </div>
</form>

表單列

您也可以將 .row 換成 .form-row,這是我們標準格線列的變體,它會覆寫預設的欄位間距,以提供更緊密和更精簡的配置。

<form>
  <div class="form-row">
    <div class="col">
      <input type="text" class="form-control" placeholder="First name">
    </div>
    <div class="col">
      <input type="text" class="form-control" placeholder="Last name">
    </div>
  </div>
</form>

也可以使用格線系統建立更複雜的配置。

<form>
  <div class="form-row">
    <div class="form-group col-md-6">
      <label for="inputEmail4">Email</label>
      <input type="email" class="form-control" id="inputEmail4">
    </div>
    <div class="form-group col-md-6">
      <label for="inputPassword4">Password</label>
      <input type="password" class="form-control" id="inputPassword4">
    </div>
  </div>
  <div class="form-group">
    <label for="inputAddress">Address</label>
    <input type="text" class="form-control" id="inputAddress" placeholder="1234 Main St">
  </div>
  <div class="form-group">
    <label for="inputAddress2">Address 2</label>
    <input type="text" class="form-control" id="inputAddress2" placeholder="Apartment, studio, or floor">
  </div>
  <div class="form-row">
    <div class="form-group col-md-6">
      <label for="inputCity">City</label>
      <input type="text" class="form-control" id="inputCity">
    </div>
    <div class="form-group col-md-4">
      <label for="inputState">State</label>
      <select id="inputState" class="form-control">
        <option selected>Choose...</option>
        <option>...</option>
      </select>
    </div>
    <div class="form-group col-md-2">
      <label for="inputZip">Zip</label>
      <input type="text" class="form-control" id="inputZip">
    </div>
  </div>
  <div class="form-group">
    <div class="form-check">
      <input class="form-check-input" type="checkbox" id="gridCheck">
      <label class="form-check-label" for="gridCheck">
        Check me out
      </label>
    </div>
  </div>
  <button type="submit" class="btn btn-primary">Sign in</button>
</form>

水平表單

透過將 .row 類別新增至表單群組,並使用 .col-*-* 類別來指定標籤和控制項的寬度,使用格線建立水平表單。請務必將 .col-form-label 新增至您的 <label>,以便它們與其相關的表單控制項垂直置中。

有時,您可能需要使用 margin 或 padding 工具程式來建立您需要的完美對齊。例如,我們已移除堆疊式單選按鈕輸入標籤上的 padding-top,以更好地對齊文字基準線。

單選按鈕
<form>
  <div class="form-group row">
    <label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
    <div class="col-sm-10">
      <input type="email" class="form-control" id="inputEmail3">
    </div>
  </div>
  <div class="form-group row">
    <label for="inputPassword3" class="col-sm-2 col-form-label">Password</label>
    <div class="col-sm-10">
      <input type="password" class="form-control" id="inputPassword3">
    </div>
  </div>
  <fieldset class="form-group row">
    <legend class="col-form-label col-sm-2 float-sm-left pt-0">Radios</legend>
    <div class="col-sm-10">
      <div class="form-check">
        <input class="form-check-input" type="radio" name="gridRadios" id="gridRadios1" value="option1" checked>
        <label class="form-check-label" for="gridRadios1">
          First radio
        </label>
      </div>
      <div class="form-check">
        <input class="form-check-input" type="radio" name="gridRadios" id="gridRadios2" value="option2">
        <label class="form-check-label" for="gridRadios2">
          Second radio
        </label>
      </div>
      <div class="form-check disabled">
        <input class="form-check-input" type="radio" name="gridRadios" id="gridRadios3" value="option3" disabled>
        <label class="form-check-label" for="gridRadios3">
          Third disabled radio
        </label>
      </div>
    </div>
  </fieldset>
  <div class="form-group row">
    <div class="col-sm-10 offset-sm-2">
      <div class="form-check">
        <input class="form-check-input" type="checkbox" id="gridCheck1">
        <label class="form-check-label" for="gridCheck1">
          Example checkbox
        </label>
      </div>
    </div>
  </div>
  <div class="form-group row">
    <div class="col-sm-10">
      <button type="submit" class="btn btn-primary">Sign in</button>
    </div>
  </div>
</form>
水平表單標籤尺寸

請務必使用 .col-form-label-sm.col-form-label-lg 套用至 <label><legend>,以正確遵循 .form-control-lg.form-control-sm 的大小。

<form>
  <div class="form-group row">
    <label for="colFormLabelSm" class="col-sm-2 col-form-label col-form-label-sm">Email</label>
    <div class="col-sm-10">
      <input type="email" class="form-control form-control-sm" id="colFormLabelSm" placeholder="col-form-label-sm">
    </div>
  </div>
  <div class="form-group row">
    <label for="colFormLabel" class="col-sm-2 col-form-label">Email</label>
    <div class="col-sm-10">
      <input type="email" class="form-control" id="colFormLabel" placeholder="col-form-label">
    </div>
  </div>
  <div class="form-group row">
    <label for="colFormLabelLg" class="col-sm-2 col-form-label col-form-label-lg">Email</label>
    <div class="col-sm-10">
      <input type="email" class="form-control form-control-lg" id="colFormLabelLg" placeholder="col-form-label-lg">
    </div>
  </div>
</form>

欄位尺寸

如前述範例所示,我們的網格系統允許您在 .row.form-row 內放置任意數量的 .col。它們會將可用寬度平均分配給它們。您也可以選擇讓部分欄位佔用更多或更少的空間,而其餘的 .col 會平均分配剩餘空間,並使用特定欄位類別,例如 .col-7

<form>
  <div class="form-row">
    <div class="col-7">
      <input type="text" class="form-control" placeholder="City">
    </div>
    <div class="col">
      <input type="text" class="form-control" placeholder="State">
    </div>
    <div class="col">
      <input type="text" class="form-control" placeholder="Zip">
    </div>
  </div>
</form>

自動調整尺寸

下列範例使用彈性盒狀模型公用程式垂直置中內容,並將 .col 變更為 .col-auto,讓您的欄位僅佔用所需的空間。換句話說,欄位大小會根據內容調整。

@
<form>
  <div class="form-row align-items-center">
    <div class="col-auto">
      <label class="sr-only" for="inlineFormInput">Name</label>
      <input type="text" class="form-control mb-2" id="inlineFormInput" placeholder="Jane Doe">
    </div>
    <div class="col-auto">
      <label class="sr-only" for="inlineFormInputGroup">Username</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="inlineFormInputGroup" placeholder="Username">
      </div>
    </div>
    <div class="col-auto">
      <div class="form-check mb-2">
        <input class="form-check-input" type="checkbox" id="autoSizingCheck">
        <label class="form-check-label" for="autoSizingCheck">
          Remember me
        </label>
      </div>
    </div>
    <div class="col-auto">
      <button type="submit" class="btn btn-primary mb-2">Submit</button>
    </div>
  </div>
</form>

然後,您可以再次使用特定大小的欄位類別重新組合。

@
<form>
  <div class="form-row align-items-center">
    <div class="col-sm-3 my-1">
      <label class="sr-only" for="inlineFormInputName">Name</label>
      <input type="text" class="form-control" id="inlineFormInputName" placeholder="Jane Doe">
    </div>
    <div class="col-sm-3 my-1">
      <label class="sr-only" for="inlineFormInputGroupUsername">Username</label>
      <div class="input-group">
        <div class="input-group-prepend">
          <div class="input-group-text">@</div>
        </div>
        <input type="text" class="form-control" id="inlineFormInputGroupUsername" placeholder="Username">
      </div>
    </div>
    <div class="col-auto my-1">
      <div class="form-check">
        <input class="form-check-input" type="checkbox" id="autoSizingCheck2">
        <label class="form-check-label" for="autoSizingCheck2">
          Remember me
        </label>
      </div>
    </div>
    <div class="col-auto my-1">
      <button type="submit" class="btn btn-primary">Submit</button>
    </div>
  </div>
</form>

當然,自訂表單控制項也受支援。

<form>
  <div class="form-row align-items-center">
    <div class="col-auto my-1">
      <label class="mr-sm-2 sr-only" for="inlineFormCustomSelect">Preference</label>
      <select class="custom-select mr-sm-2" id="inlineFormCustomSelect">
        <option selected>Choose...</option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
      </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="customControlAutosizing">
        <label class="custom-control-label" for="customControlAutosizing">Remember my preference</label>
      </div>
    </div>
    <div class="col-auto my-1">
      <button type="submit" class="btn btn-primary">Submit</button>
    </div>
  </div>
</form>

內嵌表單

使用 .form-inline 類別在單一水平列中顯示一系列標籤、表單控制項和按鈕。內嵌式表單中的表單控制項與其預設狀態略有不同。

  • 控制項為 display: flex,會壓縮任何 HTML 空白,並允許您使用 間距彈性盒狀模型 公用程式提供對齊控制。
  • 控制項和輸入群組會收到 width: auto 來覆寫 Bootstrap 預設的 width: 100%
  • 控制項只會在視窗寬度至少為 576 像素時內嵌顯示,以考量行動裝置上的窄視窗。

您可能需要手動處理個別表單控制項的寬度和對齊,方法是使用間距工具(如下所示)。最後,務必始終為每個表單控制項包含一個 <label>,即使您需要使用 .sr-only 對非螢幕閱讀器訪客隱藏它。

@
<form class="form-inline">
  <label class="sr-only" for="inlineFormInputName2">Name</label>
  <input type="text" class="form-control mb-2 mr-sm-2" id="inlineFormInputName2" placeholder="Jane Doe">

  <label class="sr-only" for="inlineFormInputGroupUsername2">Username</label>
  <div class="input-group mb-2 mr-sm-2">
    <div class="input-group-prepend">
      <div class="input-group-text">@</div>
    </div>
    <input type="text" class="form-control" id="inlineFormInputGroupUsername2" placeholder="Username">
  </div>

  <div class="form-check mb-2 mr-sm-2">
    <input class="form-check-input" type="checkbox" id="inlineFormCheck">
    <label class="form-check-label" for="inlineFormCheck">
      Remember me
    </label>
  </div>

  <button type="submit" class="btn btn-primary mb-2">Submit</button>
</form>

自訂表單控制項和選取元件也受支援。

<form class="form-inline">
  <label class="my-1 mr-2" for="inlineFormCustomSelectPref">Preference</label>
  <select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref">
    <option selected>Choose...</option>
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
  </select>

  <div class="custom-control custom-checkbox my-1 mr-sm-2">
    <input type="checkbox" class="custom-control-input" id="customControlInline">
    <label class="custom-control-label" for="customControlInline">Remember my preference</label>
  </div>

  <button type="submit" class="btn btn-primary my-1">Submit</button>
</form>
隱藏標籤的替代方案

如果您沒有為每個輸入包含標籤,輔助技術(例如螢幕閱讀器)將無法順利處理您的表單。對於這些內嵌表單,您可以使用 .sr-only 類別來隱藏標籤。還有其他提供標籤給輔助技術的替代方法,例如 aria-labelaria-labelledbytitle 屬性。如果這些屬性都不存在,輔助技術可能會使用 placeholder 屬性(如果存在),但請注意,不建議使用 placeholder 來取代其他標籤方法。

說明文字

表單中的區塊層級說明文字可以使用 .form-text 建立(以前在 v3 中稱為 .help-block)。內嵌說明文字可以靈活地使用任何內嵌 HTML 元素和工具類別(例如 .text-muted)實作。

將說明文字與表單控制項關聯

說明文字應該使用 aria-describedby 屬性與它所關聯的表單控制項明確關聯。這將確保輔助技術(例如螢幕閱讀器)在使用者聚焦或輸入控制項時會宣告這段說明文字。

輸入欄位下方的說明文字可以使用 .form-text 設定樣式。此類別包含 display: block,並新增一些頂端外距,以便輕鬆與上方輸入欄位間隔。

您的密碼必須長度為 8-20 個字元,包含字母和數字,且不得包含空白、特殊字元或表情符號。
<label for="inputPassword5">Password</label>
<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
<small id="passwordHelpBlock" class="form-text text-muted">
  Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
</small>

內嵌文字可以使用任何典型的內嵌 HTML 元素(無論是 <small><span> 或其他元素),只需使用一個工具類別即可。

必須為 8-20 個字元長。
<form class="form-inline">
  <div class="form-group">
    <label for="inputPassword6">Password</label>
    <input type="password" id="inputPassword6" class="form-control mx-sm-3" aria-describedby="passwordHelpInline">
    <small id="passwordHelpInline" class="text-muted">
      Must be 8-20 characters long.
    </small>
  </div>
</form>

停用表單

在輸入欄位上加上 disabled 布林屬性,可以防止使用者互動並讓它看起來更淡。

<input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here..." disabled>

<fieldset> 中加上 disabled 屬性,可以停用其中的所有控制項。

停用的欄位集範例
<form>
  <fieldset disabled>
    <legend>Disabled fieldset example</legend>
    <div class="form-group">
      <label for="disabledTextInput">Disabled input</label>
      <input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
    </div>
    <div class="form-group">
      <label for="disabledSelect">Disabled select menu</label>
      <select id="disabledSelect" class="form-control">
        <option>Disabled select</option>
      </select>
    </div>
    <div class="form-group">
      <div class="form-check">
        <input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
        <label class="form-check-label" for="disabledFieldsetCheck">
          Can't check this
        </label>
      </div>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
  </fieldset>
</form>
錨點的注意事項

瀏覽器會將 <fieldset disabled> 內的所有原生表單控制項(<input><select><button> 元素)視為已停用,並禁止使用鍵盤和滑鼠與它們互動。

但是,如果您的表單也包含自訂的按鈕狀元素,例如 <a ... class="btn btn-*">,它們只會被賦予 pointer-events: none 的樣式。正如按鈕的 停用狀態 部分(特別是錨點元素的子部分)中所述,此 CSS 屬性尚未標準化,且在 Internet Explorer 10 中並未獲得完全支援。基於錨點的控制項仍然可以透過鍵盤對焦和操作。您必須手動修改這些控制項,方法是加上 tabindex="-1" 以防止它們接收焦點,並加上 aria-disabled="disabled" 以向輔助技術傳達其狀態。

跨瀏覽器相容性

雖然 Bootstrap 會在所有瀏覽器中套用這些樣式,但 Internet Explorer 11 及以下版本並不完全支援 <fieldset> 上的 disabled 屬性。請使用自訂 JavaScript 在這些瀏覽器中停用欄位集。

驗證

透過 HTML5 表單驗證提供有價值且可操作的回饋給您的使用者,在我們支援的所有瀏覽器中都可用。從瀏覽器的預設驗證回饋中選擇,或使用我們的內建類別和入門 JavaScript 實作自訂訊息。

我們知道目前客戶端的自訂驗證樣式和工具提示無法存取,因為它們未公開給輔助技術。在我們提出解決方案的同時,我們建議使用伺服器端選項或瀏覽器的預設驗證方法。

運作方式

以下是 Bootstrap 表單驗證運作的方式

  • HTML 表單驗證透過 CSS 的兩個偽類別 :invalid:valid 進行套用。它適用於 <input><select><textarea> 元素。
  • Bootstrap 將 :invalid:valid 樣式範圍設定為父類別 .was-validated,通常套用於 <form>。否則,任何沒有值的必填欄位都會在頁面載入時顯示為無效。這樣一來,您可以選擇在何時啟用它們(通常是在嘗試提交表單之後)。
  • 若要重設表單的外觀(例如,在使用 AJAX 進行動態表單提交的情況下),請在提交後再次從 <form> 中移除 .was-validated 類別。
  • 作為備用方案,.is-invalid.is-valid 類別可以用於偽類別,以進行 伺服器端驗證。它們不需要 .was-validated 父類別。
  • 由於 CSS 運作方式的限制,我們目前無法在沒有自訂 JavaScript 協助的情況下,將樣式套用於 DOM 中表單控制項之前的 <label>
  • 所有現代瀏覽器都支援 約束驗證 API,這是一系列用於驗證表單控制項的 JavaScript 方法。
  • 回饋訊息可以使用 瀏覽器預設值(每個瀏覽器不同,且無法透過 CSS 設定樣式)或我們的自訂回饋樣式,以及額外的 HTML 和 CSS。
  • 您可以在 JavaScript 中使用 setCustomValidity 提供自訂有效性訊息。

請考慮以下範例,了解我們的自訂表單驗證樣式、選用的伺服器端類別和瀏覽器預設值。

自訂樣式

對於自訂 Bootstrap 表單驗證訊息,您需要將 novalidate 布林屬性新增至您的 <form>。這會停用瀏覽器預設的回饋工具提示,但仍可透過 JavaScript 存取表單驗證 API。請嘗試提交以下表單;我們的 JavaScript 會攔截提交按鈕,並向您傳達回饋。嘗試提交時,您會看到 :invalid:valid 樣式套用於您的表單控制項。

自訂回饋樣式會套用自訂顏色、邊框、焦點樣式和背景圖示,以更好地傳達回饋。<select> 的背景圖示僅可搭配 .custom-select 使用,而不能搭配 .form-control 使用。

看起來不錯!
看起來不錯!
請提供有效的城市。
請選擇有效的州。
請提供有效的郵遞區號。
您必須同意才能提交。
<form class="needs-validation" novalidate>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationCustom01">First name</label>
      <input type="text" class="form-control" id="validationCustom01" value="Mark" required>
      <div class="valid-feedback">
        Looks good!
      </div>
    </div>
    <div class="col-md-6 mb-3">
      <label for="validationCustom02">Last name</label>
      <input type="text" class="form-control" id="validationCustom02" value="Otto" required>
      <div class="valid-feedback">
        Looks good!
      </div>
    </div>
  </div>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationCustom03">City</label>
      <input type="text" class="form-control" id="validationCustom03" required>
      <div class="invalid-feedback">
        Please provide a valid city.
      </div>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationCustom04">State</label>
      <select class="custom-select" id="validationCustom04" required>
        <option selected disabled value="">Choose...</option>
        <option>...</option>
      </select>
      <div class="invalid-feedback">
        Please select a valid state.
      </div>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationCustom05">Zip</label>
      <input type="text" class="form-control" id="validationCustom05" required>
      <div class="invalid-feedback">
        Please provide a valid zip.
      </div>
    </div>
  </div>
  <div class="form-group">
    <div class="form-check">
      <input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
      <label class="form-check-label" for="invalidCheck">
        Agree to terms and conditions
      </label>
      <div class="invalid-feedback">
        You must agree before submitting.
      </div>
    </div>
  </div>
  <button class="btn btn-primary" type="submit">Submit form</button>
</form>

<script>
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function() {
  'use strict';
  window.addEventListener('load', function() {
    // Fetch all the forms we want to apply custom Bootstrap validation styles to
    var forms = document.getElementsByClassName('needs-validation');
    // Loop over them and prevent submission
    var validation = Array.prototype.filter.call(forms, function(form) {
      form.addEventListener('submit', function(event) {
        if (form.checkValidity() === false) {
          event.preventDefault();
          event.stopPropagation();
        }
        form.classList.add('was-validated');
      }, false);
    });
  }, false);
})();
</script>

瀏覽器預設值

對自訂驗證回饋訊息或撰寫 JavaScript 以變更表單行為不感興趣嗎?沒問題,您可以使用瀏覽器預設值。試試提交以下表單。根據您的瀏覽器和作業系統,您會看到略有不同的回饋樣式。

雖然這些回饋樣式無法使用 CSS 設定樣式,但您仍可透過 JavaScript 自訂回饋文字。

<form>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationDefault01">First name</label>
      <input type="text" class="form-control" id="validationDefault01" value="Mark" required>
    </div>
    <div class="col-md-6 mb-3">
      <label for="validationDefault02">Last name</label>
      <input type="text" class="form-control" id="validationDefault02" value="Otto" required>
    </div>
  </div>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationDefault03">City</label>
      <input type="text" class="form-control" id="validationDefault03" required>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationDefault04">State</label>
      <select class="custom-select" id="validationDefault04" required>
        <option selected disabled value="">Choose...</option>
        <option>...</option>
      </select>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationDefault05">Zip</label>
      <input type="text" class="form-control" id="validationDefault05" required>
    </div>
  </div>
  <div class="form-group">
    <div class="form-check">
      <input class="form-check-input" type="checkbox" value="" id="invalidCheck2" required>
      <label class="form-check-label" for="invalidCheck2">
        Agree to terms and conditions
      </label>
    </div>
  </div>
  <button class="btn btn-primary" type="submit">Submit form</button>
</form>

伺服器端

我們建議使用用戶端驗證,但如果您需要伺服器端驗證,您可以使用 .is-invalid.is-valid 指出無效和有效的表單欄位。請注意,這些類別也支援 .invalid-feedback

對於無效欄位,請確保無效回饋/錯誤訊息與相關表單欄位關聯,並使用 aria-describedby。此屬性允許多個 id 參照,以防欄位已指向其他表單文字。

看起來不錯!
看起來不錯!
請提供有效的城市。
請選擇有效的州。
請提供有效的郵遞區號。
您必須同意才能提交。
<form>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationServer01">First name</label>
      <input type="text" class="form-control is-valid" id="validationServer01" value="Mark" required>
      <div class="valid-feedback">
        Looks good!
      </div>
    </div>
    <div class="col-md-6 mb-3">
      <label for="validationServer02">Last name</label>
      <input type="text" class="form-control is-valid" id="validationServer02" value="Otto" required>
      <div class="valid-feedback">
        Looks good!
      </div>
    </div>
  </div>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationServer03">City</label>
      <input type="text" class="form-control is-invalid" id="validationServer03" aria-describedby="validationServer03Feedback" required>
      <div id="validationServer03Feedback" class="invalid-feedback">
        Please provide a valid city.
      </div>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationServer04">State</label>
      <select class="custom-select is-invalid" id="validationServer04" aria-describedby="validationServer04Feedback" required>
        <option selected disabled value="">Choose...</option>
        <option>...</option>
      </select>
      <div id="validationServer04Feedback" class="invalid-feedback">
        Please select a valid state.
      </div>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationServer05">Zip</label>
      <input type="text" class="form-control is-invalid" id="validationServer05" aria-describedby="validationServer05Feedback" required>
      <div id="validationServer05Feedback" class="invalid-feedback">
        Please provide a valid zip.
      </div>
    </div>
  </div>
  <div class="form-group">
    <div class="form-check">
      <input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" aria-describedby="invalidCheck3Feedback" required>
      <label class="form-check-label" for="invalidCheck3">
        Agree to terms and conditions
      </label>
      <div  id="invalidCheck3Feedback" class="invalid-feedback">
        You must agree before submitting.
      </div>
    </div>
  </div>
  <button class="btn btn-primary" type="submit">Submit form</button>
</form>

支援的元素

驗證樣式可供下列表單控制項和元件使用

  • <input><textarea> 搭配 .form-control
  • <select> 搭配 .form-control.custom-select
  • .form-check
  • .custom-checkbox.custom-radio
  • .custom-file
請在文字區域中輸入訊息。
範例無效回饋文字
更多範例無效回饋文字
範例無效自訂選取回饋
範例無效自訂檔案回饋
@
範例無效輸入群組回饋
範例無效輸入群組回饋
範例無效輸入群組回饋
<form class="was-validated">
  <div class="mb-3">
    <label for="validationTextarea">Textarea</label>
    <textarea class="form-control is-invalid" id="validationTextarea" placeholder="Required example textarea" required></textarea>
    <div class="invalid-feedback">
      Please enter a message in the textarea.
    </div>
  </div>

  <div class="custom-control custom-checkbox mb-3">
    <input type="checkbox" class="custom-control-input" id="customControlValidation1" required>
    <label class="custom-control-label" for="customControlValidation1">Check this custom checkbox</label>
    <div class="invalid-feedback">Example invalid feedback text</div>
  </div>

  <div class="custom-control custom-radio">
    <input type="radio" class="custom-control-input" id="customControlValidation2" name="radio-stacked" required>
    <label class="custom-control-label" for="customControlValidation2">Toggle this custom radio</label>
  </div>
  <div class="custom-control custom-radio mb-3">
    <input type="radio" class="custom-control-input" id="customControlValidation3" name="radio-stacked" required>
    <label class="custom-control-label" for="customControlValidation3">Or toggle this other custom radio</label>
    <div class="invalid-feedback">More example invalid feedback text</div>
  </div>

  <div class="mb-3">
    <select class="custom-select" required>
      <option value="">Choose...</option>
      <option value="1">One</option>
      <option value="2">Two</option>
      <option value="3">Three</option>
    </select>
    <div class="invalid-feedback">Example invalid custom select feedback</div>
  </div>

  <div class="custom-file mb-3">
    <input type="file" class="custom-file-input" id="validatedCustomFile" required>
    <label class="custom-file-label" for="validatedCustomFile">Choose file...</label>
    <div class="invalid-feedback">Example invalid custom file feedback</div>
  </div>

  <div class="mb-3">
    <div class="input-group is-invalid">
      <div class="input-group-prepend">
        <span class="input-group-text" id="validatedInputGroupPrepend">@</span>
      </div>
      <input type="text" class="form-control is-invalid" aria-describedby="validatedInputGroupPrepend" required>
    </div>
    <div class="invalid-feedback">
      Example invalid input group feedback
    </div>
  </div>

  <div class="mb-3">
    <div class="input-group is-invalid">
      <div class="input-group-prepend">
        <label class="input-group-text" for="validatedInputGroupSelect">Options</label>
      </div>
      <select class="custom-select" id="validatedInputGroupSelect" required>
        <option value="">Choose...</option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
      </select>
    </div>
    <div class="invalid-feedback">
      Example invalid input group feedback
    </div>
  </div>

  <div class="input-group is-invalid">
    <div class="custom-file">
      <input type="file" class="custom-file-input" id="validatedInputGroupCustomFile" required>
      <label class="custom-file-label" for="validatedInputGroupCustomFile">Choose file...</label>
    </div>
    <div class="input-group-append">
       <button class="btn btn-outline-secondary" type="button">Button</button>
    </div>
  </div>
  <div class="invalid-feedback">
    Example invalid input group feedback
  </div>
</form>

工具提示

如果您的表單配置允許,您可以將 .{valid|invalid}-feedback 類別替換為 .{valid|invalid}-tooltip 類別,以在樣式化工具提示中顯示驗證回饋。請務必在工具提示定位的父項上加上 position: relative。在以下範例中,我們的欄位類別已經有這個設定,但您的專案可能需要其他設定。

看起來不錯!
看起來不錯!
請提供有效的城市。
請選擇有效的州。
請提供有效的郵遞區號。
<form class="needs-validation" novalidate>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationTooltip01">First name</label>
      <input type="text" class="form-control" id="validationTooltip01" value="Mark" required>
      <div class="valid-tooltip">
        Looks good!
      </div>
    </div>
    <div class="col-md-6 mb-3">
      <label for="validationTooltip02">Last name</label>
      <input type="text" class="form-control" id="validationTooltip02" value="Otto" required>
      <div class="valid-tooltip">
        Looks good!
      </div>
    </div>
  </div>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationTooltip03">City</label>
      <input type="text" class="form-control" id="validationTooltip03" required>
      <div class="invalid-tooltip">
        Please provide a valid city.
      </div>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationTooltip04">State</label>
      <select class="custom-select" id="validationTooltip04" required>
        <option selected disabled value="">Choose...</option>
        <option>...</option>
      </select>
      <div class="invalid-tooltip">
        Please select a valid state.
      </div>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationTooltip05">Zip</label>
      <input type="text" class="form-control" id="validationTooltip05" required>
      <div class="invalid-tooltip">
        Please provide a valid zip.
      </div>
    </div>
  </div>
  <button class="btn btn-primary" type="submit">Submit form</button>
</form>

自訂

驗證狀態可以使用 Sass 中的 $form-validation-states 地圖自訂。此 Sass 地圖位於我們的 _variables.scss 檔案中,會迴圈產生預設的 valid/invalid 驗證狀態。其中包含一個巢狀地圖,用於自訂每個狀態的顏色和圖示。雖然瀏覽器不支援其他狀態,但使用自訂樣式的使用者可以輕鬆地加入更複雜的表單回饋。

請注意,我們不建議在不修改 form-validation-state 混入的情況下自訂這些值。

// Sass map from `_variables.scss`
// Override this and recompile your Sass to generate different states
$form-validation-states: map-merge(
  (
    "valid": (
      "color": $form-feedback-valid-color,
      "icon": $form-feedback-icon-valid
    ),
    "invalid": (
      "color": $form-feedback-invalid-color,
      "icon": $form-feedback-icon-invalid
    )
  ),
  $form-validation-states
);

// Loop from `_forms.scss`
// Any modifications to the above Sass map will be reflected in your compiled
// CSS via this loop.
@each $state, $data in $form-validation-states {
  @include form-validation-state($state, map-get($data, color), map-get($data, icon));
}

輸入群組驗證

若要偵測在驗證的輸入群組中哪些元素需要圓角,輸入群組需要一個額外的 .has-validation 類別。

<div class="input-group has-validation">
  <div class="input-group-prepend">
    <span class="input-group-text">@</span>
  </div>
  <input type="text" class="form-control" required>
  <div class="invalid-feedback">
    Please choose a username.
  </div>
</div>
@
請選擇使用者名稱。

自訂表單

若要獲得更多自訂選項和跨瀏覽器一致性,請使用我們完全自訂的表單元素來取代瀏覽器預設值。它們建置在語意且可存取的標記上,因此是任何預設表單控制項的可靠替代品。

核取方塊和單選按鈕

每個核取方塊和無線按鈕 <input><label> 配對都包在一個 <div> 中,以建立我們的自訂控制項。在結構上,這與我們的預設 .form-check 相同。

我們對所有 <input> 狀態(例如 :checked)使用同層選擇器 (~) 來適當地設定我們自訂表單指標的樣式。當與 .custom-control-label 類別結合使用時,我們也可以根據 <input> 的狀態設定每個項目的文字樣式。

我們使用 opacity 隱藏預設的 <input>,並使用 .custom-control-label 在其位置建立一個新的自訂表單指標,並使用 ::before::after。遺憾的是,我們無法僅從 <input> 建立自訂指標,因為 CSS 的 content 不適用於該元素。

在已勾選的狀態中,我們使用來自 Open Iconicbase64 嵌入式 SVG 圖示。這讓我們可以最佳控制跨瀏覽器和裝置的樣式和定位。

核取方塊

<div class="custom-control custom-checkbox">
  <input type="checkbox" class="custom-control-input" id="customCheck1">
  <label class="custom-control-label" for="customCheck1">Check this custom checkbox</label>
</div>

自訂核取方塊也可以使用 :indeterminate 偽類別,但必須透過 JavaScript 手動設定(沒有可用的 HTML 屬性可以指定它)。

如果您使用 jQuery,類似以下內容就足夠了

$('.your-checkbox').prop('indeterminate', true)

單選按鈕

<div class="custom-control custom-radio">
  <input type="radio" id="customRadio1" name="customRadio" class="custom-control-input">
  <label class="custom-control-label" for="customRadio1">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio">
  <input type="radio" id="customRadio2" name="customRadio" class="custom-control-input">
  <label class="custom-control-label" for="customRadio2">Or toggle this other custom radio</label>
</div>

內嵌

<div class="custom-control custom-radio custom-control-inline">
  <input type="radio" id="customRadioInline1" name="customRadioInline" class="custom-control-input">
  <label class="custom-control-label" for="customRadioInline1">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
  <input type="radio" id="customRadioInline2" name="customRadioInline" class="custom-control-input">
  <label class="custom-control-label" for="customRadioInline2">Or toggle this other custom radio</label>
</div>

停用

自訂核取方塊和單選按鈕也可以停用。將 disabled 布林屬性新增至 <input>,自訂指標和標籤說明會自動套用樣式。

<div class="custom-control custom-checkbox">
  <input type="checkbox" class="custom-control-input" id="customCheckDisabled1" disabled>
  <label class="custom-control-label" for="customCheckDisabled1">Check this custom checkbox</label>
</div>

<div class="custom-control custom-radio">
  <input type="radio" name="radioDisabled" id="customRadioDisabled2" class="custom-control-input" disabled>
  <label class="custom-control-label" for="customRadioDisabled2">Toggle this custom radio</label>
</div>

開關

開關的標記與自訂核取方塊相同,但使用 .custom-switch 類別來呈現切換開關。開關也支援 disabled 屬性。

<div class="custom-control custom-switch">
  <input type="checkbox" class="custom-control-input" id="customSwitch1">
  <label class="custom-control-label" for="customSwitch1">Toggle this switch element</label>
</div>
<div class="custom-control custom-switch">
  <input type="checkbox" class="custom-control-input" disabled id="customSwitch2">
  <label class="custom-control-label" for="customSwitch2">Disabled switch element</label>
</div>

選單

自訂 <select> 選單只需要自訂類別 .custom-select 即可觸發自訂樣式。自訂樣式僅限於 <select> 的初始外觀,且無法修改 <option>,這是由於瀏覽器限制所致。

<select class="custom-select">
  <option selected>Open this select menu</option>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

您也可以從小型和大型自訂選單中選擇,以符合我們大小相似的文字輸入。

<select class="custom-select custom-select-lg mb-3">
  <option selected>Open this select menu</option>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

<select class="custom-select custom-select-sm">
  <option selected>Open this select menu</option>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

也支援 multiple 屬性

<select class="custom-select" multiple>
  <option selected>Open this select menu</option>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

size 屬性也是如此

<select class="custom-select" size="3">
  <option selected>Open this select menu</option>
  <option value="1">One</option>
  <option value="2">Two</option>
  <option value="3">Three</option>
</select>

範圍

使用 .custom-range 建立自訂 <input type="range"> 控制項。軌道(背景)和拇指(值)都經過樣式設定,以在各個瀏覽器中呈現相同的外觀。由於只有 IE 和 Firefox 支援從拇指的左側或右側「填滿」其軌道,作為視覺上表示進度的工具,因此我們目前不支援此功能。

<label for="customRange1">Example range</label>
<input type="range" class="custom-range" id="customRange1">

範圍輸入元件隱含的 minmax 值分別為 0100。您可以使用 minmax 屬性指定這些值的新值。

<label for="customRange2">Example range</label>
<input type="range" class="custom-range" min="0" max="5" id="customRange2">

預設情況下,範圍輸入元件會「貼齊」整數值。若要變更此設定,您可以指定 step 值。在以下範例中,我們使用 step="0.5" 將步數加倍。

<label for="customRange3">Example range</label>
<input type="range" class="custom-range" min="0" max="5" step="0.5" id="customRange3">

檔案瀏覽器

建議用於自訂檔案輸入元件動畫的擴充外掛程式:bs-custom-file-input,這也是我們目前在文件檔中使用的擴充外掛程式。

檔案輸入元件是這群元件中最難搞的,而且如果您想將它們連結到功能性的 選擇檔案… 和選取的檔案名稱文字,則需要額外的 JavaScript。

<div class="custom-file">
  <input type="file" class="custom-file-input" id="customFile">
  <label class="custom-file-label" for="customFile">Choose file</label>
</div>

我們透過 opacity 隱藏預設的檔案 <input>,並改為設定 <label> 的樣式。按鈕會使用 ::after 產生並定位。最後,我們在 <input> 上宣告 widthheight,以適當地配置周圍內容的間距。

使用 SCSS 翻譯或自訂字串

:lang() 偽類別用於允許將「瀏覽」文字翻譯成其他語言。使用相關的 語言標籤 和在地化字串覆寫或新增 $custom-file-text Sass 變數的項目。英文字串也可以用相同的方式自訂。例如,以下是新增西班牙文翻譯的方法(西班牙文的語言代碼為 es

$custom-file-text: (
  en: "Browse",
  es: "Elegir"
);

以下是 lang(es) 用於西班牙文翻譯的自訂檔案輸入元件的範例

<div class="custom-file">
  <input type="file" class="custom-file-input" id="customFileLang" lang="es">
  <label class="custom-file-label" for="customFileLang">Seleccionar Archivo</label>
</div>

您需要正確設定文件(或其子樹)的語言,才能顯示正確的文字。這可以使用 <html> 元素上的 lang 屬性或 Content-Language HTTP 標頭 等方法來完成。

使用 HTML 翻譯或自訂字串

Bootstrap 也提供一種方法,可以使用 data-browse 屬性在 HTML 中翻譯「瀏覽」文字,該屬性可以新增到自訂輸入標籤(荷蘭文範例)

<div class="custom-file">
  <input type="file" class="custom-file-input" id="customFileLangHTML">
  <label class="custom-file-label" for="customFileLangHTML" data-browse="Bestand kiezen">Voeg je document toe</label>
</div>