Forms
Form control styles, layout options, and custom components.
Supported input types
<!-- Text input -->
<div class="mb-3">
<label for="text-input" class="form-label">Text</label>
<input class="form-control" type="text" id="text-input" value="Artisanal kale">
</div>
<!-- Search input -->
<div class="mb-3">
<label for="search-input" class="form-label">Search</label>
<input class="form-control" type="search" id="search-input" value="How do I shoot web">
</div>
<!-- Email input -->
<div class="mb-3">
<label for="email-input" class="form-label">Email</label>
<input class="form-control" type="email" id="email-input" value="email@example.com">
</div>
<!-- URL Input -->
<div class="mb-3">
<label for="url-input" class="form-label">URL</label>
<input class="form-control" type="url" id="url-input" value="https://getbootstrap.com">
</div>
<!-- Phone Input -->
<div class="mb-3">
<label for="tel-input" class="form-label">Phone</label>
<input class="form-control" type="tel" id="tel-input" value="1-(770)-334-2518">
</div>
<!-- Password Input -->
<div class="mb-3">
<label for="pass-input" class="form-label">Password</label>
<input class="form-control" type="password" id="pass-input" value="mypasswordexample">
</div>
<!-- Textarea -->
<div class="mb-3">
<label for="textarea-input" class="form-label">Textarea</label>
<textarea class="form-control" id="textarea-input" rows="5">Hello World!</textarea>
</div>
<!-- Select -->
<div class="mb-3">
<label for="select-input" class="form-label">Select</label>
<select class="form-select" id="select-input">
<option>Choose option...</option>
<option>Option item 1</option>
<option>Option item 2</option>
<option>Option item 3</option>
</select>
</div>
<!-- Multiselect -->
<div class="mb-3">
<label for="multiselect-input" class="form-label">Multiselect</label>
<select class="form-select" id="multiselect-input" size="3" multiple>
<option>Option item 1</option>
<option>Option item 2</option>
<option>Option item 3</option>
<option>Option item 4</option>
<option>Option item 5</option>
<option>Option item 6</option>
</select>
</div>
<!-- File input -->
<div class="mb-3">
<label for="file-input" class="form-label">File</label>
<input class="form-control" type="file" id="file-input">
</div>
<!-- Number input -->
<div class="mb-3">
<label for="number-input" class="form-label">Number</label>
<input class="form-control" type="number" id="number-input" value="37">
</div>
<!-- Datalist -->
<div class="mb-3">
<label for="datalist-input" class="form-label">Datalist</label>
<input class="form-control" list="datalist-options" id="datalist-input" placeholder="Type to search...">
<datalist id="datalist-options">
<option value="San Francisco">
<option value="New York">
<option value="Seattle">
<option value="Los Angeles">
<option value="Chicago">
</datalist>
</div>
<!-- Range input -->
<div class="mb-3">
<label for="range-input" class="form-label">Range</label>
<ngx-slider [(value)]="defaultVal" [options]="option"></ngx-slider>
</div>
<!-- Color input -->
<div class="mb-3">
<label for="color-input" class="form-label">Color</label>
<input class="form-control form-control-color" type="color" id="color-input" value="#5d3cf2">
</div>
Floating labels
<!-- Floating label input -->
<div class="form-floating mb-3">
<input class="form-control" id="floating-input" type="text" placeholder="John">
<label for="floating-input">Your name</label>
</div>
<!-- Floating label select -->
<div class="form-floating mb-3">
<select class="form-select" id="floating-select">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<label for="floating-select">Choose option</label>
</div>
Password visibility toggle
<!-- Password visibility toggle -->
<label class="form-label" for="pass-visibility">Password</label>
<div class="password-toggle">
<input class="form-control" type="password" id="pass-visibility" value="hidden@password">
<label class="password-toggle-btn" aria-label="Show/hide password">
<input class="password-toggle-check" type="checkbox">
<span class="password-toggle-indicator"></span>
</label>
</div>
Checkboxes
<!-- Stacked checkboxes -->
<div class="form-check">
<input class="form-check-input" id="form-check-1" type="checkbox">
<label class="form-check-label" for="form-check-1">Default checkbox</label>
</div>
<div class="form-check">
<input class="form-check-input" id="form-check-2" type="checkbox" checked>
<label class="form-check-label" for="form-check-2">Checked checkbox</label>
</div>
<div class="form-check">
<input class="form-check-input" id="form-check-3" type="checkbox" disabled>
<label class="form-check-label" for="form-check-3">Disabled checkbox</label>
</div>
<!-- Inline checkboxes -->
<div class="form-check form-check-inline">
<input class="form-check-input" id="form-check-4" type="checkbox">
<label class="form-check-label" for="form-check-4">Default checkbox</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" id="form-check-5" type="checkbox" checked>
<label class="form-check-label" for="form-check-5">Checked checkbox</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" id="form-check-6" type="checkbox" disabled>
<label class="form-check-label" for="form-check-6">Disabled checkbox</label>
</div>
Radios
<!-- Stacked radios -->
<div class="form-check">
<input class="form-check-input" id="form-radio-1" type="radio" name="radios-stacked">
<label class="form-check-label" for="form-radio-1">Default radio</label>
</div>
<div class="form-check">
<input class="form-check-input" id="form-radio-2" type="radio" name="radios-stacked" checked>
<label class="form-check-label" for="form-radio-2">Checked radio</label>
</div>
<div class="form-check">
<input class="form-check-input" id="form-radio-3" type="radio" name="radios-stacked" disabled>
<label class="form-check-label" for="form-radio-3">Disabled radio</label>
</div>
<!-- Inline radios -->
<div class="form-check form-check-inline">
<input class="form-check-input" id="form-radio-4" type="radio" name="radios-inline">
<label class="form-check-label" for="form-radio-4">Default radio</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" id="form-radio-5" type="radio" name="radios-inline" checked>
<label class="form-check-label" for="form-radio-5">Checked radio</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" id="form-radio-6" type="radio" name="radios-inline" disabled>
<label class="form-check-label" for="form-radio-6">Disabled radio</label>
</div>
Switches
<!-- Default switch -->
<div class="form-check form-switch">
<input class="form-check-input" id="form-switch-1" type="checkbox">
<label class="form-check-label" for="form-switch-1">Default switch</label>
</div>
<!-- Checked switch -->
<div class="form-check form-switch">
<input class="form-check-input" id="form-switch-2" type="checkbox" checked>
<label class="form-check-label" for="form-switch-2">Checked switch</label>
</div>
<!-- Disabled switch -->
<div class="form-check form-switch">
<input class="form-check-input" id="form-switch-3" type="checkbox" disabled>
<label class="form-check-label" for="form-switch-3">Disabled switch</label>
</div>
Range slider (noUISlider)
Two handles + inputs
One handle + no inputs
<!-- Range slider: Two handles + inputs -->
<div class="range-slider" data-start-min="280" data-start-max="720" data-min="0" data-max="1000" data-step="1">
<div class="range-slider-ui"></div>
<div class="d-flex align-items-center">
<div class="w-50 pe-2">
<div class="input-group"><span class="input-group-text fs-base">$</span>
<ngx-slider [(value)]="280" [(highValue)]="720" [options]="options"></ngx-slider>
</div>
</div>
<div class="text-muted">—</div>
<div class="w-50 ps-2">
<div class="input-group"><span class="input-group-text fs-base">$</span>
<ngx-slider [(value)]="450" [options]="option"></ngx-slider>
</div>
</div>
</div>
</div>
<!-- Range slider: One handle + no inputs -->
<div class="range-slider" data-start-min="450" data-min="0" data-max="1000" data-step="1">
<div class="range-slider-ui"></div>
<input class="form-control range-slider-value-min" type="hidden">
</div>
Sizings
<!-- Large input -->
<div class="mb-3">
<label class="form-label" for="input-lg">Large input</label>
<input class="form-control form-control-lg" id="input-lg" type="text" placeholder="Large input placeholder">
</div>
<!-- Normal input -->
<div class="mb-3">
<label for="input-normal" class="form-label">Normal input</label>
<input class="form-control" id="input-normal" type="text" placeholder="Normal input placeholder">
</div>
<!-- Small input -->
<div class="mb-3">
<label class="form-label fs-sm" for="input-sm">Small input</label>
<input class="form-control form-control-sm" id="input-sm" type="text" placeholder="Small input placeholder">
</div>
<!-- Large select -->
<div class="mb-3">
<label class="form-label" for="select-lg">Large select</label>
<select class="form-select form-select-lg" id="select-lg">
<option>Large select option</option>
<option>Option item 1</option>
<option>Option item 2</option>
<option>Option item 3</option>
</select>
</div>
<!-- Normal select -->
<div class="mb-3">
<label class="form-label" for="select-normal">Normal select</label>
<select class="form-select" id="select-normal">
<option>Normal select option</option>
<option>Option item 1</option>
<option>Option item 2</option>
<option>Option item 3</option>
</select>
</div>
<!-- Small select -->
<div class="mb-3">
<label class="form-label fs-sm" for="select-sm">Small select</label>
<select class="form-select form-select-sm" id="select-sm">
<option>Small select option</option>
<option>Option item 1</option>
<option>Option item 2</option>
<option>Option item 3</option>
</select>
</div>
Readonly & disabled
<!-- Readonly input -->
<input class="form-control" id="readonly-input" type="text" placeholder="Readonly input placeholder" readonly>
<!-- Disabled input -->
<input class="form-control" id="disabled-input" type="text" placeholder="Disabled input placeholder" disabled>
<!-- Disabled select -->
<select class="form-select" id="disabled-select" disabled>
<option>Disabled select option</option>
<option>Option item 1</option>
<option>Option item 2</option>
<option>Option item 3</option>
</select>
Inline form
<!-- Inline form -->
<form class="row row-cols-sm-auto g-3 align-items-center">
<div class="col-12">
<input class="form-control" id="inline-form-input" type="text" placeholder="Username">
</div>
<div class="col-12">
<select class="form-select" id="inline-form-select">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</div>
<div class="col-12">
<div class="form-check">
<input class="form-check-input" id="inline-form-check" type="checkbox">
<label class="form-check-label" for="inline-form-check">Remember me</label>
</div>
</div>
<div class="col-12">
<button class="btn btn-primary" type="submit">Submit</button>
</div>
</form>
Help text
Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
<!-- Help text -->
<div class="mb-3">
<label class="form-label" for="input-password">Password</label>
<input class="form-control" id="input-password" type="password" placeholder="Your password here" aria-describedby="passwordHelpBlock">
<div class="form-text" id="passwordHelpBlock">
Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
</div>
</div>
Validation: status text
<!-- Form validation: status text -->
<form class="needs-validation" novalidate (ngSubmit)="validSubmit()" [formGroup]="validationform">
<div class="row">
<div class="col-md-4 mb-3">
<label class="form-label" for="validationCustom01">First name</label>
<input class="form-control" type="text" id="validationCustom01" placeholder="First name" value="John" required formControlName="firstName"
[ngClass]="{"is-valid": submit && form["firstName"].errors}">
<div class="valid-feedback">Looks good!</div>
</div>
<div class="col-md-4 mb-3">
<label class="form-label" for="validationCustom02">Last name</label>
<input class="form-control" type="text" id="validationCustom02" placeholder="Last name" value="Doe" required formControlName="lastName"
[ngClass]="{"is-valid": submit && form["lastName"].errors}">
<div class="valid-feedback">Looks good!</div>
</div>
<div class="col-md-4 mb-3">
<label class="form-label" for="validationCustomUsername">Username</label>
<input class="form-control" type="text" id="validationCustomUsername" placeholder="Username" required formControlName="userName"
[ngClass]="{"is-valid": submit && form["userName"].errors}">
<div class="invalid-feedback">Please choose a username.</div>
<div class="valid-feedback">Looks good!</div>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label" for="validationCustom03">City</label>
<select class="form-select" id="validationCustom03" required formControlName="city"
[ngClass]="{"is-valid": submit && form["city"].errors}">
<option value="">Choose city...</option>
<option value="Dallas">Dallas</option>
<option value="Houston">Houston</option>
<option value="Los Angeles">Los Angeles</option>
<option value="Miami">Miami</option>
<option value="New York">New York</option>
</select>
<div class="invalid-feedback">Please provide a valid city.</div>
<div class="valid-feedback">Looks good!</div>
</div>
<div class="col-md-3 mb-3">
<label class="form-label" for="validationCustom04">State</label>
<select class="form-select" id="validationCustom04" required formControlName="state"
[ngClass]="{"is-valid": submit && form["state"].errors}">
<option value="">Choose state...</option>
<option value="Arizona">Arizona</option>
<option value="Colorado">Colorado</option>
<option value="Florida">Florida</option>
<option value="Indiana">Indiana</option>
<option value="Kentucky">Kentucky</option>
<option value="Texas">Texas</option>
</select>
<div class="invalid-feedback">Please provide a valid state.</div>
<div class="valid-feedback">Looks good!</div>
</div>
<div class="col-md-3 mb-3">
<label class="form-label" for="validationCustom05">Zip</label>
<input class="form-control" type="text" id="validationCustom05" placeholder="Zip" required formControlName="zip"
[ngClass]="{"is-valid": submit && form["zip"].errors}">
<div class="invalid-feedback">Please provide a valid zip.</div>
<div class="valid-feedback">Looks good!</div>
</div>
</div>
<div class="mb-3 py-2">
<div class="form-check">
<input class="form-check-input" type="checkbox" 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>
Validation: status tooltips
<!-- Form validation: status tooltips -->
<form class="needs-validation" novalidate>
<div class="row">
<div class="col-md-4 mb-3">
<label class="form-label" for="validationTooltip01">First name</label>
<input class="form-control" type="text" id="validationTooltip01" placeholder="First name" value="John" required formControlName="firstName"
[ngClass]="{"is-valid": submit && form["firstName"].errors}">
<div class="valid-tooltip">Looks good!</div>
</div>
<div class="col-md-4 mb-3">
<label class="form-label" for="validationTooltip02">Last name</label>
<input class="form-control" type="text" id="validationTooltip02" placeholder="Last name" value="Doe" required formControlName="lastName"
[ngClass]="{"is-valid": submit && form["lastName"].errors}">
<div class="valid-tooltip">Looks good!</div>
</div>
<div class="col-md-4 mb-3">
<label class="form-label" for="validationTooltipUsername">Username</label>
<input class="form-control" type="text" id="validationTooltipUsername" placeholder="Username" required formControlName="userName"
[ngClass]="{"is-valid": submit && form["userName"].errors}">
<div class="invalid-tooltip">Please choose a username.</div>
<div class="valid-tooltip">Looks good!</div>
</div>
</div>
<div class="row">
<div class="col-md-6 mb-3">
<label class="form-label" for="validationTooltip03">City</label>
<select class="form-select" id="validationTooltip03" required formControlName="city"
[ngClass]="{"is-valid": submit && form["city"].errors}">
<option value="">Choose city...</option>
<option value="Dallas">Dallas</option>
<option value="Houston">Houston</option>
<option value="Los Angeles">Los Angeles</option>
<option value="Miami">Miami</option>
<option value="New York">New York</option>
</select>
<div class="invalid-tooltip">Please provide a valid city.</div>
<div class="valid-tooltip">Looks good!</div>
</div>
<div class="col-md-3 mb-3">
<label class="form-label" for="validationTooltip04">State</label>
<select class="form-select" id="validationTooltip04" required formControlName="state"
[ngClass]="{"is-valid": submit && form["state"].errors}">
<option value="">Choose state...</option>
<option value="Arizona">Arizona</option>
<option value="Colorado">Colorado</option>
<option value="Florida">Florida</option>
<option value="Indiana">Indiana</option>
<option value="Kentucky">Kentucky</option>
<option value="Texas">Texas</option>
</select>
<div class="invalid-tooltip">Please provide a valid state.</div>
<div class="valid-tooltip">Looks good!</div>
</div>
<div class="col-md-3 mb-3">
<label class="form-label" for="validationTooltip05">Zip</label>
<input class="form-control" type="text" id="validationTooltip05" placeholder="Zip" required>
<div class="invalid-tooltip">Please provide a valid zip.</div>
<div class="valid-tooltip">Looks good!</div>
</div>
</div>
<div class="mb-3 py-2">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="invalidCheck" required>
<label class="form-check-label" for="invalidCheck">Agree to terms and conditions</label>
<div class="invalid-tooltip">You must agree before submitting.</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit Form</button>
</form>
Format input text content
<!-- Format: Credit card number -->
<div class="mb-3">
<label class="form-label" for="format-card-number">Card number</label>
<input class="form-control" type="text" id="format-card-number" data-format="card" placeholder="0000 0000 0000 0000" mask="0000 0000 0000 0000">
</div>
<!-- Format: Credit card CVC -->
<div class="mb-3">
<label class="form-label" for="format-card-cvc">Card CVC</label>
<input class="form-control" type="text" id="format-card-cvc" data-format="cvc" placeholder="000" mask="000">
</div>
<!-- Format: Date -->
<div class="mb-3">
<label class="form-label" for="format-date">Date</label>
<input class="form-control" type="text" id="format-date" data-format="date" placeholder="mm/yy" mask="mm/yy">
</div>
<!-- Format: Date long -->
<div class="mb-3">
<label class="form-label" for="format-date-long">Date long</label>
<input class="form-control" type="text" id="format-date-long" data-format="date-long" placeholder="yyyy-mm-dd" mask="yyyy-mm-dd">
</div>
<!-- Format: Time -->
<div class="mb-3">
<label class="form-label" for="format-time">Time</label>
<input class="form-control" type="text" id="format-time" data-format="time" placeholder="hh:mm:ss" mask="hh:mm:ss">
</div>
<!-- Format: Custom -->
<div class="mb-3">
<label class="form-label" for="format-custom">Custom format</label>
<input class="form-control" type="text" id="format-custom" data-format="custom" data-delimiter="-" data-blocks="2 3 4" placeholder="00-000-0000" mask="00-000-0000">
</div>
Light version
<!-- Light input -->
<label class="form-label text-light" for="text-input-light">Light input</label>
<input class="form-control form-control-light" id="text-input-light" type="text" value="Artisanal kale">
<!-- Light select -->
<label class="form-label text-light" for="select-input-light">Light select</label>
<select class="form-select form-select-light" id="select-input-light">
<option>Choose option...</option>
<option>Option item 1</option>
<option>Option item 2</option>
<option>Option item 3</option>
</select>
<!-- Light password visibility toggle -->
<label class="form-label" for="pass-visibility">Password</label>
<div class="password-toggle">
<input class="form-control form-control-light" type="password" id="pass-visibility" value="hidden@password">
<label class="password-toggle-btn" aria-label="Show/hide password">
<input class="password-toggle-check" type="checkbox">
<span class="password-toggle-indicator"></span>
</label>
</div>
<!-- Light textarea -->
<label class="form-label text-light" for="textarea-input-light"> Light textarea</label>
<textarea class="form-control form-control-light" id="textarea-input-light" rows="5">Hello World!</textarea>
<!-- Light checkbox -->
<div class="form-check form-check-light">
<input class="form-check-input" id="form-check-light-1" type="checkbox">
<label class="form-check-label" for="form-check-light-1">Default checkbox</label>
</div>
<!-- Light radio -->
<div class="form-check form-check-light">
<input class="form-check-input" id="form-radio-light-1" type="radio" name="radios-light-stacked">
<label class="form-check-label" for="form-radio-light-1">Light radio</label>
</div>
<!-- Light switch -->
<div class="form-check form-switch form-switch-light">
<input class="form-check-input" id="form-switch-lite-1" type="checkbox">
<label class="form-check-label" for="form-switch-lite-1">Light switch</label>
</div>