diff options
author | Mark Otto <markd.otto@gmail.com> | 2020-10-28 06:45:48 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-28 06:45:48 +0300 |
commit | 3e2f9ab237e0e338fbe497213ad2353e59fbee9c (patch) | |
tree | d1f1843ce62f3c5754e46f0df8eceb4d67a9b72d /site/content | |
parent | 582f52e9e147c5386d07f241a74a185175cc461d (diff) |
v5: Floating labels (#30449)
* v5: Promote floating labels example to component
- Adds new .form-floating
- Stubs out basics of a docs page
- Removes existing Example
* Update floating labels to support .form-select, make inputs and selects more consistent
- To do this, I made the .form-control and .form-select consistent in min-height vs height
- Removed some unused variables now
- Updated -color to be the -color because I don't know why this was any different before
- Update page to include some examples for layout, validation, and value
- Rewrite styles to not modify padding, but instead transform and opacity
* Streamline and bulletproof some things
- Apply some optimizations from code review
- Removed unecessary properties from the label
- Add some comments for what properties are required
- Move from fixed height for labels to height 100% so we can support textareas
- Improve docs a little bit, add ToC
* Move some values to variables, switch from scaling font-size to scale, update transforms
* Bring over changes from #30966 and add to them to tighten things up
* Delete the now unused example images
* Fix typo
* Allowlist the calc function
* Add transform-origin, update transform values
* Test out autofill fix
* Fix linter issue
* Mention it in the migration guide
* Bump bundlesize
* Add one more variable per review
* Shave .25rem off the height
Co-authored-by: XhmikosR <xhmikosr@gmail.com>
Diffstat (limited to 'site/content')
-rw-r--r-- | site/content/docs/5.0/examples/floating-labels/floating-labels.css | 101 | ||||
-rw-r--r-- | site/content/docs/5.0/examples/floating-labels/index.html | 35 | ||||
-rw-r--r-- | site/content/docs/5.0/forms/floating-labels.md | 104 | ||||
-rw-r--r-- | site/content/docs/5.0/forms/overview.md | 2 | ||||
-rw-r--r-- | site/content/docs/5.0/migration.md | 1 |
5 files changed, 107 insertions, 136 deletions
diff --git a/site/content/docs/5.0/examples/floating-labels/floating-labels.css b/site/content/docs/5.0/examples/floating-labels/floating-labels.css deleted file mode 100644 index 9092659d06..0000000000 --- a/site/content/docs/5.0/examples/floating-labels/floating-labels.css +++ /dev/null @@ -1,101 +0,0 @@ -html, -body { - height: 100%; -} - -body { - display: flex; - align-items: center; - padding-top: 40px; - padding-bottom: 40px; - background-color: #f5f5f5; -} - -.form-signin { - width: 100%; - max-width: 420px; - padding: 15px; - margin: auto; -} - -.form-label-group { - position: relative; - margin-bottom: 1rem; -} - -.form-label-group input, -.form-label-group label { - height: 3.125rem; - padding: .75rem; -} - -.form-label-group label { - position: absolute; - top: 0; - left: 0; - display: block; - width: 100%; - color: #495057; - pointer-events: none; - cursor: text; /* Match the input under the label */ - border: 1px solid transparent; - border-radius: .25rem; - transition: all .1s ease-in-out; -} - -.form-label-group input::-webkit-input-placeholder { - color: transparent; -} - -.form-label-group input::-moz-placeholder { - color: transparent; -} - -.form-label-group input::-ms-input-placeholder { - color: transparent; -} - -.form-label-group input::placeholder { - color: transparent; -} - -.form-label-group input:not(:-moz-placeholder-shown) { - padding-top: 1.25rem; - padding-bottom: .25rem; -} - -.form-label-group input:not(:placeholder-shown) { - padding-top: 1.25rem; - padding-bottom: .25rem; -} - -.form-label-group input:not(:-moz-placeholder-shown) ~ label { - padding-top: .25rem; - padding-bottom: .25rem; - font-size: 12px; - color: #777; -} - -.form-label-group input:not(:placeholder-shown) ~ label { - padding-top: .25rem; - padding-bottom: .25rem; - font-size: 12px; - color: #777; -} - -/* Fallback for Edge --------------------------------------------------- */ -@supports (-ms-ime-align: auto) { - .form-label-group { - display: flex; - flex-direction: column-reverse; - } - - .form-label-group label { - position: static; - } - - .form-label-group input::-ms-input-placeholder { - color: #777; - } -} diff --git a/site/content/docs/5.0/examples/floating-labels/index.html b/site/content/docs/5.0/examples/floating-labels/index.html deleted file mode 100644 index e0e5320bc4..0000000000 --- a/site/content/docs/5.0/examples/floating-labels/index.html +++ /dev/null @@ -1,35 +0,0 @@ ---- -layout: examples -title: Floating labels example -extra_css: - - "floating-labels.css" -include_js: false ---- - -<main class="form-signin"> - <form> - <div class="text-center mb-4"> - <img class="mb-4" src="/docs/{{< param docs_version >}}/assets/brand/bootstrap-logo.svg" alt="" width="72" height="57"> - <h1 class="h3 mb-3 font-weight-normal">Floating labels</h1> - <p>Build form controls with floating labels via the <code>:placeholder-shown</code> pseudo-element. <a href="https://caniuse.com/#feat=css-placeholder-shown">Works in latest Chrome, Safari, and Firefox.</a></p> - </div> - - <div class="form-label-group"> - <input type="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus> - <label for="inputEmail">Email address</label> - </div> - - <div class="form-label-group"> - <input type="password" id="inputPassword" class="form-control" placeholder="Password" required> - <label for="inputPassword">Password</label> - </div> - - <div class="checkbox mb-3"> - <label> - <input type="checkbox" value="remember-me"> Remember me - </label> - </div> - <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> - <p class="mt-5 mb-3 text-muted text-center">© 2017-{{< year >}}</p> - </form> -</main> diff --git a/site/content/docs/5.0/forms/floating-labels.md b/site/content/docs/5.0/forms/floating-labels.md new file mode 100644 index 0000000000..16f7f08e07 --- /dev/null +++ b/site/content/docs/5.0/forms/floating-labels.md @@ -0,0 +1,104 @@ +--- +layout: docs +title: Floating labels +description: Create beautifully simple form labels that float over your input fields. +group: forms +toc: true +--- + +## Example + +Wrap a pair of `<input class="form-control">` and `<label>` elements in `.form-floating` to enable floating labels with Bootstrap's textual form fields. A `placeholder` is required on each `<input>` as our method of CSS-only floating labels uses the `:placeholder-shown` pseudo-element. Also note that the `<input>` must come first so we can utilize a sibling selector (e.g., `~`). + +This approach works in the new Microsoft Edge built on Chromium and gracefully degrades on older versions. + +{{< example >}} +<div class="form-floating mb-3"> + <input type="email" class="form-control" id="floatingInput" placeholder="name@example.com"> + <label for="floatingInput">Email address</label> +</div> +<div class="form-floating"> + <input type="password" class="form-control" id="floatingPassword" placeholder="Password"> + <label for="floatingPassword">Password</label> +</div> +{{< /example >}} + +When there's a `value` already defined, `<label>`s will automatically adjust to their floated position. + +{{< example >}} +<form class="form-floating"> + <input type="email" class="form-control" id="floatingInputValue" placeholder="name@example.com" value="test@example.com"> + <label for="floatingInputValue">Input with value</label> +</form> +{{< /example >}} + +Form validation styles also work as expected. + +{{< example >}} +<form class="form-floating"> + <input type="email" class="form-control is-invalid" id="floatingInputInvalid" placeholder="name@example.com" value="test@example.com"> + <label for="floatingInputInvalid">Invalid input</label> +</form> +{{< /example >}} + +## Textareas + +By default, `<textarea>`s with `.form-control` will be the same height as `<input>`s. + +{{< example >}} +<div class="form-floating"> + <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea"></textarea> + <label for="floatingTextarea">Comments</label> +</div> +{{< /example >}} + +To set a custom height on your `<textarea>`, do not use the `rows` attribute. Instead, set an explicit `height` (either inline or via custom CSS). + +{{< example >}} +<div class="form-floating"> + <textarea class="form-control" placeholder="Leave a comment here" id="floatingTextarea2" style="height: 100px"></textarea> + <label for="floatingTextarea2">Comments</label> +</div> +{{< /example >}} + +## Selects + +Other than `.form-control`, floating labels only available on `.form-select`s. They work in the same way, but unlike `<input>`s, they'll always show the `<label>` in its floated state. + +{{< example >}} +<div class="form-floating"> + <select class="form-select" id="floatingSelect" aria-label="Floating label select example"> + <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="floatingSelect">Works with selects</label> +</div> +{{< /example >}} + +## Layout + +When working with the Bootstrap grid system, be sure to place form elements within column classes. + +{{< example >}} +<div class="row g-2"> + <div class="col-md"> + <div class="form-floating"> + <input type="email" class="form-control" id="floatingInputGrid" placeholder="name@example.com" value="mdo@example.com"> + <label for="floatingInputGrid">Email address</label> + </div> + </div> + <div class="col-md"> + <div class="form-floating"> + <select class="form-select" id="floatingSelectGrid" aria-label="Floating label select example"> + <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="floatingSelectGrid">Works with selects</label> + </div> + </div> +</div> +{{< /example >}} diff --git a/site/content/docs/5.0/forms/overview.md b/site/content/docs/5.0/forms/overview.md index 4311b4f623..7d30db3570 100644 --- a/site/content/docs/5.0/forms/overview.md +++ b/site/content/docs/5.0/forms/overview.md @@ -18,6 +18,8 @@ sections: 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: Floating labels + description: Create beautifully simple form labels that float over your input fields. - title: Layout description: Create inline, horizontal, or complex grid-based layouts with your forms. - title: Validation diff --git a/site/content/docs/5.0/migration.md b/site/content/docs/5.0/migration.md index 05851b184f..b4eda11309 100644 --- a/site/content/docs/5.0/migration.md +++ b/site/content/docs/5.0/migration.md @@ -24,6 +24,7 @@ toc: true ### Forms - The longstanding [Missing border radius on input group with validation feedback bug](https://github.com/twbs/bootstrap/issues/25110) is finally fixed by adding an additional `.has-validation` class to input groups with validation. +- Promoted the Floating labels example to fully supported form component. [See the new Floating labels page.]({{< docsref "/forms/floating-labels" >}}) ### Utilities |