]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Require `.has-validation` for input groups with validation
authorMartijn Cuppens <martijn.cuppens@gmail.com>
Sat, 24 Oct 2020 17:50:18 +0000 (19:50 +0200)
committerMark Otto <otto@github.com>
Mon, 26 Oct 2020 20:43:52 +0000 (13:43 -0700)
scss/_input-group.scss
site/docs/4.5/assets/scss/_component-examples.scss
site/docs/4.5/components/forms.md

index cad8ea367a82059be08cbf0b8378d2c82cc9c7f6..d72ebeaba7af6c98bafa2c7e7b899e424749b0b4 100644 (file)
@@ -42,7 +42,6 @@
 
   > .form-control,
   > .custom-select {
-    &:not(:last-child) { @include border-right-radius(0); }
     &:not(:first-child) { @include border-left-radius(0); }
   }
 
     align-items: center;
 
     &:not(:last-child) .custom-file-label,
-    &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); }
     &:not(:first-child) .custom-file-label { @include border-left-radius(0); }
   }
+
+  &:not(.has-validation) {
+    > .form-control:not(:last-child),
+    > .custom-select:not(:last-child),
+    > .custom-file:not(:last-child) .custom-file-label::after {
+      @include border-right-radius(0);
+    }
+  }
+
+  &.has-validation {
+    > .form-control:nth-last-child(n + 3),
+    > .custom-select:nth-last-child(n + 3),
+    > .custom-file:nth-last-child(n + 3) .custom-file-label::after {
+      @include border-right-radius(0);
+    }
+  }
 }
 
 
 
 .input-group > .input-group-prepend > .btn,
 .input-group > .input-group-prepend > .input-group-text,
-.input-group > .input-group-append:not(:last-child) > .btn,
-.input-group > .input-group-append:not(:last-child) > .input-group-text,
+.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,
+.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,
+.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn,
+.input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text,
 .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle),
 .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
   @include border-right-radius(0);
index a296718976c640a81ea593e73a313a7964fdd069..89c52208f4bc7f8545f0d10d4ed33c17aab7fc83 100644 (file)
   }
 }
 
-.bd-example-forms-input-group-workaround .fix-rounded-right {
-  @include border-right-radius(.2rem !important);
-}
-
 //
 // Code snippets
 //
index b9fe4ca469d4c10e48c41efbf716dcf7eebd6b27..22a8904b9991d6637a35f32385f2236f3f8eae02 100644 (file)
@@ -754,12 +754,6 @@ We are aware that currently the client-side custom validation styles and tooltip
 {% endcapture %}
 {% include callout.html content=callout type="warning" %}
 
-{% capture callout %}
-##### Input group validation
-Input groups have difficulty with validation styles, unfortunately. Our recommendation is to place feedback messages as sibling elements of the `.input-group` that has `.is-{valid|invalid}`. Placing feedback messages within input groups breaks the `border-radius`. [See this workaround](#input-group-validation-workaround).
-{% endcapture %}
-{% include callout.html content=callout type="warning" %}
-
 ### How it works
 
 Here's how form validation works with Bootstrap:
@@ -1157,50 +1151,16 @@ $form-validation-states: map-merge(
 }
 {% endhighlight %}
 
-### Input group validation workaround
-
-We're unable to resolve the broken `border-radius` of input groups with validation due to selector limitations, so manual overrides are required. When you're using a standard input group and don't customize the default border radius values, add `.rounded-right` to the elements with the broken `border-radius`.
-
-{% highlight html %}
-<div class="input-group">
-  <div class="input-group-prepend">
-    <span class="input-group-text">@</span>
-  </div>
-  <input type="text" class="form-control rounded-right" required>
-  <div class="invalid-feedback">
-    Please choose a username.
-  </div>
-</div>
-{% endhighlight %}
-
-<div class="bd-example bd-example-forms-input-group-workaround">
-  <div class="input-group">
-    <div class="input-group-prepend">
-      <span class="input-group-text">@</span>
-    </div>
-    <input type="text" class="form-control is-invalid rounded-right" required>
-    <div class="invalid-feedback">
-      Please choose a username.
-    </div>
-  </div>
-</div>
-
-When you are using a small or large input group or customizing the default `border-radius` values, add custom CSS to the element with the busted `border-radius`.
+### Input group validation
 
-{% highlight css %}
-/* Change values to match the radius of your form control */
-.fix-rounded-right {
-  border-top-right-radius: .2rem !important;
-  border-bottom-right-radius: .2rem !important;
-}
-{% endhighlight %}
+To detect what elements need rounded corners inside an input group with validation, an input group requires an additional `.has-validation` class.
 
 {% highlight html %}
-<div class="input-group input-group-sm">
+<div class="input-group has-validation">
   <div class="input-group-prepend">
     <span class="input-group-text">@</span>
   </div>
-  <input type="text" class="form-control fix-rounded-right" required>
+  <input type="text" class="form-control" required>
   <div class="invalid-feedback">
     Please choose a username.
   </div>
@@ -1208,11 +1168,11 @@ When you are using a small or large input group or customizing the default `bord
 {% endhighlight %}
 
 <div class="bd-example bd-example-forms-input-group-workaround">
-  <div class="input-group input-group-sm">
+  <div class="input-group has-validation">
     <div class="input-group-prepend">
       <span class="input-group-text">@</span>
     </div>
-    <input type="text" class="form-control is-invalid fix-rounded-right" required>
+    <input type="text" class="form-control is-invalid" required>
     <div class="invalid-feedback">
       Please choose a username.
     </div>