v5: Forms update (#28450)
* Initial spike of consolidated form checks
* Stub out forms rearrangement
- Prepping to drop non-custom file and range inputs
- Prepping to merge custom and native checks and radios (with switches)
- Prepping to merge custom select with form select
- Moving docs arround so forms has it's own area given volume of CSS
* Move input group Sass file to forms subdir
* Start to split and move the docs around
* Simpler imports
* Copyediting
* delete overview file
* Remove commented out code
* remove the custom-forms import
* rewrite flex-check as form-check, replace all custom properties
* Remove old forms doc
* stub out new subpage link section
* update migration guide
* Update nav, forms overview in page nav, and descriptions
* fix check bg position
* fix margin-top calculation
* rename .custom-select to .form-select
* Update validation styles for new checks
* add some vertical margin, fix inline checks
* fix docs examples
* better way to do this contents stuff, redo the toc while i'm at it
* page restyle for docs while here
* un-callout that, edit text
* redo padding on toc
* fix toc
* start to cleanup checks docs
* Rewrite Markdown tables into HTML
* Redesign tables, redo their docs
* Replace Open Iconic icons with custom Bootstrap icons
* Redesign the docs navbar, add a subheader, redo the sidebar
* Redesign docs homepage a bit
* Simplify table style overrides for docs tables
* Simplify docs typography for page titles and reading line length
* Stub out icons page
* Part of sidebar update, remove migration from nav.yml
* Move toc CSS to separate partial
* Change appearance of overview page
* fix sidebar arrow direction
* Add footer to docs layout
* Update descriptions
* Drop the .form-group class for margin utilities
* Remove lingering form-group-margin-bottom var
* improve footer spacing
* add headings to range page
* uncomment form range css
* Rename .custom-range to .form-range
* Drop unused docs var
* Uncomment the comment
* Remove unused variable
* Fix radio image sizing
* Reboot update: reset horizontal ul and ol padding
* de-dupe IDs
* tweak toc styles
* nvm, fix dropdown versions stuff
* remove sidebar nav toggle for now
* broken html
* fix more broken html, move css
* scss linting
* comment out broken helper docs
* scope styles
* scope styles
* Fixes #25540 and fixes #26407 for v5 only
* Update sidebar once more
* Match new sidenav order
* fix syntax error
* Rename custom-file to form-file, update paths, update migration docs for previous changes in #28696
* rename back
* fix size and alignment
* rename that back too
2019-07-12 23:52:33 +02:00
---
layout: docs
title: Forms
description: Examples and usage guidelines for form control styles, layout options, and custom components for creating a wide variety of forms.
group: forms
toc: true
2019-07-17 11:52:14 +02:00
aliases: "/docs/4.3/forms/"
v5: Forms update (#28450)
* Initial spike of consolidated form checks
* Stub out forms rearrangement
- Prepping to drop non-custom file and range inputs
- Prepping to merge custom and native checks and radios (with switches)
- Prepping to merge custom select with form select
- Moving docs arround so forms has it's own area given volume of CSS
* Move input group Sass file to forms subdir
* Start to split and move the docs around
* Simpler imports
* Copyediting
* delete overview file
* Remove commented out code
* remove the custom-forms import
* rewrite flex-check as form-check, replace all custom properties
* Remove old forms doc
* stub out new subpage link section
* update migration guide
* Update nav, forms overview in page nav, and descriptions
* fix check bg position
* fix margin-top calculation
* rename .custom-select to .form-select
* Update validation styles for new checks
* add some vertical margin, fix inline checks
* fix docs examples
* better way to do this contents stuff, redo the toc while i'm at it
* page restyle for docs while here
* un-callout that, edit text
* redo padding on toc
* fix toc
* start to cleanup checks docs
* Rewrite Markdown tables into HTML
* Redesign tables, redo their docs
* Replace Open Iconic icons with custom Bootstrap icons
* Redesign the docs navbar, add a subheader, redo the sidebar
* Redesign docs homepage a bit
* Simplify table style overrides for docs tables
* Simplify docs typography for page titles and reading line length
* Stub out icons page
* Part of sidebar update, remove migration from nav.yml
* Move toc CSS to separate partial
* Change appearance of overview page
* fix sidebar arrow direction
* Add footer to docs layout
* Update descriptions
* Drop the .form-group class for margin utilities
* Remove lingering form-group-margin-bottom var
* improve footer spacing
* add headings to range page
* uncomment form range css
* Rename .custom-range to .form-range
* Drop unused docs var
* Uncomment the comment
* Remove unused variable
* Fix radio image sizing
* Reboot update: reset horizontal ul and ol padding
* de-dupe IDs
* tweak toc styles
* nvm, fix dropdown versions stuff
* remove sidebar nav toggle for now
* broken html
* fix more broken html, move css
* scss linting
* comment out broken helper docs
* scope styles
* scope styles
* Fixes #25540 and fixes #26407 for v5 only
* Update sidebar once more
* Match new sidenav order
* fix syntax error
* Rename custom-file to form-file, update paths, update migration docs for previous changes in #28696
* rename back
* fix size and alignment
* rename that back too
2019-07-12 23:52:33 +02:00
sections:
- title: Form control
description: Style textual inputs and textareas with support for multiple states.
- title: Select
description: Improve browser default select elements with a custom initial appearance.
- title: Checks
description: Use our custom radio buttons and checkboxes in forms for selecting input options.
- title: File
description: Replace browser default file inputs with our custom version with optional JavaScript.
- title: Range
description: Replace browser default range inputs with our custom version.
- title: Input group
description: Attach labels and buttons to your inputs for increased semantic value.
- title: Layout
description: Create inline, horizontal, or complex grid-based layouts with your forms.
- title: Validation
description: Validate your forms with custom or native validation behaviors and styles.
---
## Overview
Bootstrap's form controls expand on [our Rebooted form styles ]({{< docsref "/content/reboot#forms" >}} ) with classes. Use these classes to opt into their customized displays for a more consistent rendering across browsers and devices.
Be sure to use an appropriate `type` attribute on all inputs (e.g., `email` for email address or `number` for numerical information) to take advantage of newer input controls like email verification, number selection, and more.
Here's a quick example to demonstrate Bootstrap's form styles. Keep reading for documentation on required classes, form layout, and more.
{{< example > }}
< form >
< div class = "mb-3" >
< 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 = "mb-3" >
< label for = "exampleInputPassword1" > Password< / label >
< input type = "password" class = "form-control" id = "exampleInputPassword1" >
< / div >
< div class = "mb-3 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 >
{{< / example > }}
## Help text
Block-level help text in forms can be created using `.form-text` (previously known as `.help-block` in v3). Inline help text can be flexibly implemented using any inline HTML element and utility classes like `.text-muted` .
{{< callout warning > }}
##### Associating help text with form controls
Help text should be explicitly associated with the form control it relates to using the `aria-describedby` attribute. This will ensure that assistive technologies—such as screen readers—will announce this help text when the user focuses or enters the control.
{{< / callout > }}
Help text below inputs can be styled with `.form-text` . This class includes `display: block` and adds some top margin for easy spacing from the inputs above.
{{< example > }}
< 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 >
{{< / example > }}
Inline text can use any typical inline HTML element (be it a `<small>` , `<span>` , or something else) with nothing more than a utility class.
{{< example > }}
< form class = "form-inline" >
< div class = "mb-3" >
< 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 >
{{< / example > }}
## Disabled forms
Add the `disabled` boolean attribute on an input to prevent user interactions and make it appear lighter.
{{< highlight html > }}
< input class = "form-control" id = "disabledInput" type = "text" placeholder = "Disabled input here..." disabled >
{{< / highlight > }}
Add the `disabled` attribute to a `<fieldset>` to disable all the controls within.
By default, browsers will treat all native form controls (`< input > `, `<select>` , and `<button>` elements) inside a `<fieldset disabled>` as disabled, preventing both keyboard and mouse interactions on them. However, if your form also includes `<a ... class="btn btn-*">` elements, these will only be given a style of `pointer-events: none` .
{{< example > }}
< form >
< fieldset disabled >
< div class = "mb-3" >
< label for = "disabledTextInput" > Disabled input< / label >
< input type = "text" id = "disabledTextInput" class = "form-control" placeholder = "Disabled input" >
< / div >
< div class = "mb-3" >
< label for = "disabledSelect" > Disabled select menu< / label >
< select id = "disabledSelect" class = "form-select" >
< option > Disabled select< / option >
< / select >
< / div >
< div class = "mb-3" >
< 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 >
{{< / example > }}