@use "functions" as *;
@use "mixins/border-radius" as *;
@use "mixins/transition" as *;
-@use "mixins/box-shadow" as *;
+@use "mixins/focus-ring" as *;
@use "mixins/color-mode" as *;
+@use "buttons/button-variables" as *; // mdo-do: remove?
// scss-docs-start accordion-variables
$accordion-padding-y: 1rem !default;
$accordion-button-active-bg: var(--#{$prefix}bg-2) !default;
$accordion-button-active-color: var(--#{$prefix}fg) !default;
-$accordion-button-focus-box-shadow: $btn-focus-box-shadow !default;
-
$accordion-icon-width: 1.25rem !default;
$accordion-icon-transition: transform .2s ease-in-out !default;
$accordion-icon-transform: rotate(-180deg) !default;
--#{$prefix}accordion-btn-icon-width: #{$accordion-icon-width};
--#{$prefix}accordion-btn-icon-transform: #{$accordion-icon-transform};
--#{$prefix}accordion-btn-icon-transition: #{$accordion-icon-transition};
- --#{$prefix}accordion-btn-focus-box-shadow: #{$accordion-button-focus-box-shadow};
--#{$prefix}accordion-body-padding-x: #{$accordion-body-padding-x};
--#{$prefix}accordion-body-padding-y: #{$accordion-body-padding-y};
--#{$prefix}accordion-active-color: #{$accordion-button-active-color};
z-index: 2;
}
- &:focus {
+ &:focus-visible {
z-index: 3;
- outline: 0;
- box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow);
+ @include focus-ring(true);
}
}
@use "config" as *;
@use "variables" as *;
@use "mixins/border-radius" as *;
-@use "mixins/gradients" as *;
@use "mixins/focus-ring" as *;
+@use "mixins/gradients" as *;
@use "mixins/transition" as *;
// scss-docs-start nav-variables
@use "config" as *;
@use "colors" as *;
@use "variables" as *;
+@use "layout/breakpoints" as *;
@use "mixins/border-radius" as *;
@use "mixins/box-shadow" as *;
+@use "mixins/color-mode" as *;
+@use "mixins/focus-ring" as *;
@use "mixins/gradients" as *;
@use "mixins/transition" as *;
-@use "mixins/color-mode" as *;
-@use "mixins/deprecate" as *;
-@use "layout/breakpoints" as *;
// scss-docs-start navbar-variables
$navbar-padding-y: $spacer * .5 !default;
$navbar-toggler-padding-y: .25rem !default;
$navbar-toggler-padding-x: .75rem !default;
$navbar-toggler-font-size: $font-size-lg !default;
-$navbar-toggler-border-radius: $btn-border-radius !default;
-$navbar-toggler-focus-width: $btn-focus-width !default;
+$navbar-toggler-border-radius: var(--#{$prefix}border-radius) !default;
$navbar-toggler-transition: box-shadow .15s ease-in-out !default;
$navbar-light-color: var(--#{$prefix}fg-2) !default;
--#{$prefix}navbar-toggler-icon-bg: #{escape-svg($navbar-light-toggler-icon-bg)};
--#{$prefix}navbar-toggler-border-color: #{$navbar-light-toggler-border-color};
--#{$prefix}navbar-toggler-border-radius: #{$navbar-toggler-border-radius};
- --#{$prefix}navbar-toggler-focus-width: #{$navbar-toggler-focus-width};
--#{$prefix}navbar-toggler-transition: #{$navbar-toggler-transition};
// scss-docs-end navbar-css-vars
text-decoration: none;
}
- &:focus {
+ &:focus-visible {
text-decoration: none;
- outline: 0;
- box-shadow: 0 0 0 var(--#{$prefix}navbar-toggler-focus-width);
+ @include focus-ring(true);
}
}
//
// Styles for switching between navbars with light or dark background.
- .navbar-light {
- @include deprecate("`.navbar-light`", "v5.2.0", "v6.0.0", true);
- }
-
.navbar-dark,
.navbar[data-bs-theme="dark"] {
// scss-docs-start navbar-dark-css-vars
@use "variables" as *;
@use "mixins/lists" as *;
@use "mixins/border-radius" as *;
-@use "mixins/transition" as *;
+@use "mixins/focus-ring" as *;
@use "mixins/gradients" as *;
+@use "mixins/transition" as *;
// scss-docs-start pagination-variables
$pagination-padding-y: .375rem !default;
$pagination-focus-color: var(--#{$prefix}link-hover-color) !default;
$pagination-focus-bg: var(--#{$prefix}secondary-bg) !default;
-$pagination-focus-box-shadow: $focus-ring-box-shadow !default;
-$pagination-focus-outline: 0 !default;
$pagination-hover-color: var(--#{$prefix}link-hover-color) !default;
$pagination-hover-bg: var(--#{$prefix}tertiary-bg) !default;
--#{$prefix}pagination-hover-border-color: #{$pagination-hover-border-color};
--#{$prefix}pagination-focus-color: #{$pagination-focus-color};
--#{$prefix}pagination-focus-bg: #{$pagination-focus-bg};
- --#{$prefix}pagination-focus-box-shadow: #{$pagination-focus-box-shadow};
--#{$prefix}pagination-active-color: #{$pagination-active-color};
--#{$prefix}pagination-active-bg: #{$pagination-active-bg};
--#{$prefix}pagination-active-border-color: #{$pagination-active-border-color};
border-color: var(--#{$prefix}pagination-hover-border-color);
}
- &:focus {
+ &:focus-visible {
z-index: 3;
color: var(--#{$prefix}pagination-focus-color);
background-color: var(--#{$prefix}pagination-focus-bg);
- outline: $pagination-focus-outline;
- box-shadow: var(--#{$prefix}pagination-focus-box-shadow);
+ @include focus-ring(true);
}
&.active,
// Focus styles
// scss-docs-start root-focus-variables
--#{$prefix}focus-ring-width: 3px;
- --#{$prefix}focus-ring-offset: -1px;
+ --#{$prefix}focus-ring-offset: 1px;
--#{$prefix}focus-ring-color: var(--#{$prefix}primary-focus-ring);
--#{$prefix}focus-ring: var(--#{$prefix}focus-ring-width) solid var(--#{$prefix}focus-ring-color);
// scss-docs-end root-focus-variables
$input-btn-font-size: $font-size-base !default;
$input-btn-line-height: $line-height-base !default;
-$input-btn-focus-width: .25em !default;
-$input-btn-focus-color-opacity: $focus-ring-opacity !default;
-$input-btn-focus-color: $focus-ring-color !default;
-$input-btn-focus-blur: $focus-ring-blur !default;
-$input-btn-focus-box-shadow: $focus-ring-box-shadow !default;
-
$input-btn-padding-y-sm: .25rem !default;
$input-btn-padding-x-sm: .5rem !default;
$input-btn-font-size-sm: $font-size-sm !default;
// scss-docs-end input-btn-variables
-// Buttons
-//
-// For each of Bootstrap's buttons, define text, background, and border color.
-
-// scss-docs-start btn-variables
-$btn-color: var(--#{$prefix}color-body) !default;
-$btn-padding-y: $input-btn-padding-y !default;
-$btn-padding-x: $input-btn-padding-x !default;
-$btn-font-family: $input-btn-font-family !default;
-$btn-font-size: $input-btn-font-size !default;
-$btn-line-height: $input-btn-line-height !default;
-$btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping
-
-$btn-padding-y-sm: $input-btn-padding-y-sm !default;
-$btn-padding-x-sm: $input-btn-padding-x-sm !default;
-$btn-font-size-sm: $input-btn-font-size-sm !default;
-
-$btn-padding-y-lg: $input-btn-padding-y-lg !default;
-$btn-padding-x-lg: $input-btn-padding-x-lg !default;
-$btn-font-size-lg: $input-btn-font-size-lg !default;
-
-$btn-border-width: $input-btn-border-width !default;
-
-$btn-font-weight: $font-weight-normal !default;
-$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;
-$btn-focus-width: $input-btn-focus-width !default;
-$btn-focus-box-shadow: $input-btn-focus-box-shadow !default;
-$btn-disabled-opacity: .65 !default;
-$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;
-
-$btn-link-color: var(--#{$prefix}link-color) !default;
-$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;
-$btn-link-disabled-color: var(--#{$prefix}gray-600) !default;
-// $btn-link-color-contrast: color-contrast($link-color) !default;
-// $btn-link-focus-shadow-rgb: to-rgb(color.mix($btn-link-color-contrast, $link-color, 15%)) !default;
-
-// Allows for customizing button radius independently from global border radius
-$btn-border-radius: var(--#{$prefix}border-radius) !default;
-$btn-border-radius-sm: var(--#{$prefix}border-radius-sm) !default;
-$btn-border-radius-lg: var(--#{$prefix}border-radius-lg) !default;
-
-$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
-// scss-docs-end btn-variables
-
-
// Z-index master list
//
// Warning: Avoid customizing these values. They're used for a bird's eye view
padding-inline: $btn-padding-x-lg * .75;
}
-
- // The clickable button for toggling the menu
- // Set the same inset shadow as the :active state
- .btn-group.show .dropdown-toggle {
- @include box-shadow($btn-active-box-shadow);
-
- // Show no shadow for `.btn-link` since it has no other button styles.
- &.btn-link {
- @include box-shadow(none);
- }
- }
-
-
//
// Vertical button groups
//
$btn-border-width: $input-btn-border-width !default;
$btn-font-weight: $font-weight-normal !default;
-$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default;
$btn-disabled-opacity: .65 !default;
-$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default;
$btn-link-color: var(--#{$prefix}link-color) !default;
$btn-link-hover-color: var(--#{$prefix}link-hover-color) !default;
--#{$prefix}btn-active-border-color: transparent;
--#{$prefix}btn-disabled-color: #{$btn-link-disabled-color};
--#{$prefix}btn-disabled-border-color: transparent;
- --#{$prefix}btn-box-shadow: 0 0 0 #000; // Can't use `none` as keyword negates all values when used with multiple shadows
- // --#{$prefix}btn-focus-shadow-rgb: #{$btn-link-focus-shadow-rgb};
text-decoration: var(--#{$prefix}link-decoration);
@use "../variables" as *;
@use "../functions" as *;
@use "../mixins/border-radius" as *;
-@use "../mixins/box-shadow" as *;
@use "../mixins/color-mode" as *;
@use "../mixins/focus-ring" as *;
@use "../mixins/transition" as *;
border-color: var(--#{$prefix}theme-bg, var(--#{$prefix}check-checked-border-color));
}
+ :where(input:focus-visible) {
+ @include focus-ring(true);
+ }
+
&:has(input:checked) .checked,
&:has(input:indeterminate) .indeterminate {
display: block;
cursor: default;
}
}
-
&:has(input:disabled:checked) {
opacity: var(--#{$prefix}check-disabled-opacity);
}
@use "../mixins/gradients" as *;
@use "../mixins/transition" as *;
@use "form-variables" as *;
+@use "../buttons/button-variables" as *; // mdo-do: remove?
@layer forms {
.form-control {
background-color: $input-focus-bg;
border-color: $input-focus-border-color;
@include focus-ring(true);
+ --#{$prefix}focus-ring-offset: -1px;
}
&::-webkit-date-and-time-value {
@use "../variables" as *;
@use "../mixins/border-radius" as *;
@use "../mixins/box-shadow" as *;
+@use "../mixins/focus-ring" as *;
@use "../mixins/transition" as *;
@use "../mixins/gradients" as *;
@use "form-variables" as *;
$form-range-thumb-border: 0 !default;
$form-range-thumb-border-radius: 1rem !default;
$form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default;
-$form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default;
-$form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge
$form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default;
$form-range-thumb-disabled-bg: var(--#{$prefix}secondary-color) !default;
$form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default;
@layer forms {
.form-range {
width: 100%;
- height: add($form-range-thumb-height, $form-range-thumb-focus-box-shadow-width * 2);
+ height: calc(#{$form-range-thumb-height} + (var(--#{$prefix}focus-ring-width) * 2));
padding: 0; // Need to reset padding
appearance: none;
background-color: transparent;
&:focus {
outline: 0;
+
// Pseudo-elements must be split across multiple rulesets to have an effect.
- // No box-shadow() mixin for focus accessibility.
- &::-webkit-slider-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }
- &::-moz-range-thumb { box-shadow: $form-range-thumb-focus-box-shadow; }
+ &::-webkit-slider-thumb {
+ @include focus-ring(true);
+ --#{$prefix}focus-ring-offset: 1px;
+ }
+ &::-moz-range-thumb {
+ @include focus-ring(true);
+ --#{$prefix}focus-ring-offset: 1px;
+ }
}
&::-moz-focus-outer {
$input-focus-bg: $input-bg !default;
$input-focus-border-color: var(--#{$prefix}primary-border) !default;
$input-focus-color: $input-color !default;
-$input-focus-width: $input-btn-focus-width !default;
-$input-focus-box-shadow: $input-btn-focus-box-shadow !default;
$input-placeholder-color: var(--#{$prefix}secondary-color) !default;
$input-plaintext-color: var(--#{$prefix}color-body) !default;
"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),
+ // "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}form-valid-border-color),
),
"invalid": (
"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),
+ // "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}form-invalid-border-color),
)
) !default;
@use "../variables" as *;
@use "../functions" as *;
@use "../mixins/border-radius" as *;
-@use "../mixins/box-shadow" as *;
@use "../mixins/color-mode" as *;
@use "../mixins/focus-ring" as *;
@use "../mixins/transition" as *;
cursor: default;
}
}
+
+ &:focus-visible {
+ @include focus-ring(true);
+ }
+
}
}
flex-shrink: 0;
width: calc(var(--#{$prefix}switch-height) - calc(var(--#{$prefix}switch-padding) * 2) - var(--#{$prefix}switch-border-width) * 2);
height: calc(var(--#{$prefix}switch-height) - calc(var(--#{$prefix}switch-padding) * 2) - var(--#{$prefix}switch-border-width) * 2);
- // width: calc(var(--#{$prefix}switch-height) - calc(var(--#{$prefix}switch-padding) * 2));
- // height: calc(var(--#{$prefix}switch-height) - calc(var(--#{$prefix}switch-padding) * 2));
content: "";
background-color: var(--#{$prefix}switch-indicator-bg);
// stylelint-disable-next-line property-disallowed-list
inset: 0;
appearance: none;
background-color: transparent;
+ outline: 0;
+ }
+
+ &:focus-within {
+ @include focus-ring(true);
}
&:has(input:checked) {
padding-inline-start: calc(var(--#{$prefix}switch-height) / 2 + var(--#{$prefix}switch-padding));
- background-color: var(--#{$prefix}switch-checked-bg);
- border-color: var(--#{$prefix}switch-checked-border-color);
+ background-color: var(--#{$prefix}theme-bg, var(--#{$prefix}switch-checked-bg));
+ border-color: var(--#{$prefix}theme-bg, var(--#{$prefix}switch-checked-border-color));
}
&:has(input:disabled) {
$icon,
$tooltip-color: color-contrast($color),
$tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity),
- $focus-box-shadow: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity),
+ $focus-box-shadow: null, // mdo-do: fix
$border-color: $color
) {
.#{$state}-feedback {
+++ /dev/null
-@use "sass:color";
-@use "../../../scss/config" as *;
-@use "../../../scss/colors" as *;
-@use "variables" as *;
-
-@layer custom {
- // scss-docs-start btn-css-vars-example
- .btn-bd-primary {
- --bs-btn-font-weight: 600;
- --bs-btn-color: var(--bs-white);
- --bs-btn-bg: var(--bd-violet-bg);
- --bs-btn-border-color: var(--bd-violet-bg);
- --bs-btn-hover-color: var(--bs-white);
- --bs-btn-hover-bg: #{shade-color($bd-violet, 10%)};
- --bs-btn-hover-border-color: #{shade-color($bd-violet, 10%)};
- --bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
- --bs-btn-active-color: var(--bs-btn-hover-color);
- --bs-btn-active-bg: #{shade-color($bd-violet, 20%)};
- --bs-btn-active-border-color: #{shade-color($bd-violet, 20%)};
- }
- // scss-docs-end btn-css-vars-example
-
- .btn-bd-accent {
- --bs-btn-font-weight: 600;
- --bs-btn-color: var(--bd-accent);
- --bs-btn-border-color: var(--bd-accent);
- --bs-btn-hover-color: var(--bd-dark);
- --bs-btn-hover-bg: var(--bd-accent);
- --bs-btn-hover-border-color: var(--bd-accent);
- --bs-btn-focus-shadow-rgb: var(--bd-accent-rgb);
- --bs-btn-active-color: var(--bs-btn-hover-color);
- --bs-btn-active-bg: var(--bs-btn-hover-bg);
- --bs-btn-active-border-color: var(--bs-btn-hover-border-color);
- }
-
- .btn-bd-light {
- --btn-custom-color: #{color.mix($bd-violet, $white, 75%)};
-
- --bs-btn-color: var(--bs-gray-600);
- --bs-btn-border-color: var(--bs-border-color);
- --bs-btn-hover-color: var(--btn-custom-color);
- --bs-btn-hover-border-color: var(--btn-custom-color);
- --bs-btn-active-color: var(--btn-custom-color);
- --bs-btn-active-bg: var(--bs-white);
- --bs-btn-active-border-color: var(--btn-custom-color);
- --bs-btn-focus-border-color: var(--btn-custom-color);
- --bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
- }
-
- .bd-btn-lg {
- --bs-btn-border-radius: .5rem;
-
- padding: .8125rem 2rem;
- }
-}
@use "toc";
@use "footer";
@use "component-examples";
-@use "buttons";
@use "callouts";
@use "details";
@use "brand";