diff --git a/scss/_root.scss b/scss/_root.scss index b82759a210..2219ba0323 100644 --- a/scss/_root.scss +++ b/scss/_root.scss @@ -123,6 +123,13 @@ // By default, there is no `--bs-focus-ring-x`, `--bs-focus-ring-y`, or `--bs-focus-ring-blur`, but we provide CSS variables with fallbacks to initial `0` values --#{$prefix}focus-ring-box-shadow: var(--#{$prefix}focus-ring-x, 0) var(--#{$prefix}focus-ring-y, 0) var(--#{$prefix}focus-ring-blur, 0) var(--#{$prefix}focus-ring-width) var(--#{$prefix}focus-ring-color); // scss-docs-end root-focus-variables + + // scss-docs-start root-form-validation-variables + --#{$prefix}form-valid-color: #{$form-valid-color}; + --#{$prefix}form-valid-border-color: #{$form-valid-border-color}; + --#{$prefix}form-invalid-color: #{$form-invalid-color}; + --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color}; + // scss-docs-end root-form-validation-variables } @if $enable-dark-mode { @@ -173,6 +180,11 @@ --#{$prefix}border-color: #{$border-color-dark}; --#{$prefix}border-color-translucent: #{$border-color-translucent-dark}; + + --#{$prefix}form-valid-color: #{$form-valid-color-dark}; + --#{$prefix}form-valid-border-color: #{$form-valid-border-color-dark}; + --#{$prefix}form-invalid-color: #{$form-invalid-color-dark}; + --#{$prefix}form-invalid-border-color: #{$form-invalid-border-color-dark}; // scss-docs-end root-dark-mode-vars } } diff --git a/scss/_variables-dark.scss b/scss/_variables-dark.scss index 88f757a5ca..10ae120de9 100644 --- a/scss/_variables-dark.scss +++ b/scss/_variables-dark.scss @@ -65,6 +65,13 @@ $form-select-indicator-dark: url("data:image/svg+xml,") !default; +// scss-docs-start form-validation-colors-dark +$form-valid-color-dark: $green-300 !default; +$form-valid-border-color-dark: $green-300 !default; +$form-invalid-color-dark: $red-300 !default; +$form-invalid-border-color-dark: $red-300 !default; +// scss-docs-end form-validation-colors-dark + // // Accordion diff --git a/scss/_variables.scss b/scss/_variables.scss index 6f255d4042..fe6847be31 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -1080,23 +1080,30 @@ $form-feedback-icon-invalid-color: $form-feedback-invalid-color !default; $form-feedback-icon-invalid: url("data:image/svg+xml,") !default; // scss-docs-end form-feedback-variables +// scss-docs-start form-validation-colors +$form-valid-color: $form-feedback-valid-color !default; +$form-valid-border-color: $form-feedback-valid-color !default; +$form-invalid-color: $form-feedback-invalid-color !default; +$form-invalid-border-color: $form-feedback-invalid-color !default; +// scss-docs-end form-validation-colors + // scss-docs-start form-validation-states $form-validation-states: ( "valid": ( - "color": var(--#{$prefix}success-text), + "color": var(--#{$prefix}form-valid-color), "icon": $form-feedback-icon-valid, "tooltip-color": #fff, "tooltip-bg-color": var(--#{$prefix}success), "focus-box-shadow": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}success-rgb), $input-btn-focus-color-opacity), - "border-color": var(--#{$prefix}success), + "border-color": var(--#{$prefix}form-valid-border-color), ), "invalid": ( - "color": var(--#{$prefix}danger-text), + "color": var(--#{$prefix}form-invalid-color), "icon": $form-feedback-icon-invalid, "tooltip-color": #fff, "tooltip-bg-color": var(--#{$prefix}danger), "focus-box-shadow": 0 0 $input-btn-focus-blur $input-focus-width rgba(var(--#{$prefix}danger-rgb), $input-btn-focus-color-opacity), - "border-color": var(--#{$prefix}danger), + "border-color": var(--#{$prefix}form-invalid-border-color), ) ) !default; // scss-docs-end form-validation-states diff --git a/site/content/docs/5.3/forms/validation.md b/site/content/docs/5.3/forms/validation.md index cf2a87e80a..0371d229d4 100644 --- a/site/content/docs/5.3/forms/validation.md +++ b/site/content/docs/5.3/forms/validation.md @@ -351,10 +351,24 @@ If your form layout allows it, you can swap the `.{valid|invalid}-feedback` clas ## CSS +### Variables + +{{< added-in "5.3.0" >}} + +As part of Bootstrap's evolving CSS variables approach, forms now use local CSS variables for validation for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too. + +{{< scss-docs name="root-form-validation-variables" file="scss/_root.scss" >}} + +These variables are also color mode adaptive, meaning they change color while in dark mode. + ### Sass variables {{< scss-docs name="form-feedback-variables" file="scss/_variables.scss" >}} +{{< scss-docs name="form-validation-colors" file="scss/_variables.scss" >}} + +{{< scss-docs name="form-validation-colors-dark" file="scss/_variables-dark.scss" >}} + ### Sass mixins Two mixins are combined together, through our [loop](#loop), to generate our form validation feedback styles.