diff --git a/scss/_dropdown.scss b/scss/_dropdown.scss index ad45b84a9..2c50f36ca 100644 --- a/scss/_dropdown.scss +++ b/scss/_dropdown.scss @@ -1,3 +1,5 @@ +// stylelint-disable custom-property-empty-line-before + // The dropdown wrapper (`
`) .dropup, .dropend, @@ -20,7 +22,7 @@ --#{$variable-prefix}dropdown-padding: #{$dropdown-padding-y $dropdown-padding-x}; --#{$variable-prefix}dropdown-spacer: #{$dropdown-spacer}; @include rfs($dropdown-font-size, --#{$variable-prefix}dropdown-font-size); - --#{$variable-prefix}dropdown-color: #{$dropdown-color}; // stylelint-disable-line custom-property-empty-line-before + --#{$variable-prefix}dropdown-color: #{$dropdown-color}; --#{$variable-prefix}dropdown-bg: #{$dropdown-bg}; --#{$variable-prefix}dropdown-border-color: #{$dropdown-border-color}; --#{$variable-prefix}dropdown-border-radius: #{$dropdown-border-radius}; @@ -165,6 +167,7 @@ white-space: nowrap; // prevent links from randomly breaking onto new lines background-color: transparent; // For `
' diff --git a/site/assets/scss/_ads.scss b/site/assets/scss/_ads.scss index b9369eb19..cc5634096 100644 --- a/site/assets/scss/_ads.scss +++ b/site/assets/scss/_ads.scss @@ -14,10 +14,10 @@ @include font-size(.8125rem); line-height: 1.4; text-align: left; - background-color: $gray-100; + background-color: var(--bs-tertiary-bg); a { - color: $gray-800; + color: var(--bs-body-color); text-decoration: none; } @@ -34,5 +34,5 @@ .carbon-poweredby { display: block; margin-top: .75rem; - color: $gray-700 !important; + color: var(--bs-body-color) !important; } diff --git a/site/assets/scss/_buttons.scss b/site/assets/scss/_buttons.scss index 13bd6e48a..0613ebc99 100644 --- a/site/assets/scss/_buttons.scss +++ b/site/assets/scss/_buttons.scss @@ -34,7 +34,7 @@ .btn-bd-light { --bs-btn-color: var(--bs-gray-600); - --bs-btn-border-color: var(--bs-gray-400); + --bs-btn-border-color: var(--bs-border-color); --bs-btn-hover-color: var(--bd-violet); --bs-btn-hover-border-color: var(--bd-violet); --bs-btn-active-color: var(--bd-violet); @@ -43,3 +43,7 @@ --bs-btn-focus-border-color: var(--bd-violet); --bs-btn-focus-shadow-rgb: var(--bd-violet-rgb); } + +.btn-bd-lg { + padding: .8rem 2rem; +} diff --git a/site/assets/scss/_callouts.scss b/site/assets/scss/_callouts.scss index 3c3c469b3..ad589fecb 100644 --- a/site/assets/scss/_callouts.scss +++ b/site/assets/scss/_callouts.scss @@ -13,7 +13,7 @@ margin-bottom: .25rem; } - p:last-child { + > :last-child { margin-bottom: 0; } diff --git a/site/assets/scss/_clipboard-js.scss b/site/assets/scss/_clipboard-js.scss index 756198b0c..38ab5afa0 100644 --- a/site/assets/scss/_clipboard-js.scss +++ b/site/assets/scss/_clipboard-js.scss @@ -24,8 +24,8 @@ display: block; padding: .5em .75em .625em; line-height: 1; - color: $gray-900; - background-color: $gray-100; + color: var(--bs-body-color); + background-color: var(--bs-tertiary-bg); border: 0; @include border-radius(.25rem); diff --git a/site/assets/scss/_component-examples.scss b/site/assets/scss/_component-examples.scss index 1f9f5a164..95e032067 100644 --- a/site/assets/scss/_component-examples.scss +++ b/site/assets/scss/_component-examples.scss @@ -86,7 +86,7 @@ position: relative; padding: 1rem; margin: 1rem ($bd-gutter-x * -.5) 0; - border: solid $gray-300; + border: solid var(--bs-border-color); border-width: 1px 0 0; @include clearfix(); @@ -317,7 +317,7 @@ .highlight { padding: .75rem ($bd-gutter-x * .5); margin-bottom: 1rem; - background-color: var(--bs-gray-100); + background-color: var(--bs-tertiary-bg); @include media-breakpoint-up(md) { padding: .75rem 1.5rem; @@ -339,7 +339,7 @@ pre code { @include font-size(inherit); - color: $gray-900; // Effectively the base text color + color: var(--bs-body-color); // Effectively the base text color word-wrap: normal; } } diff --git a/site/assets/scss/_content.scss b/site/assets/scss/_content.scss index 6c193d728..d3eba1aa0 100644 --- a/site/assets/scss/_content.scss +++ b/site/assets/scss/_content.scss @@ -31,6 +31,8 @@ // Override Bootstrap defaults > .table { + --bs-table-border-color: var(--bs-border-color); + max-width: 100%; margin-bottom: 1.5rem; @include font-size(.875rem); @@ -74,6 +76,11 @@ min-width: 280px; } +.table-swatches { + td:first-child { width: 340px; } + td:nth-child(2) { width: 200px; } +} + .bd-title { @include font-size(3rem); } @@ -83,8 +90,8 @@ font-weight: 300; } -.bd-text-purple-bright { - color: $bd-violet; +.bd-text-violet { + color: var(--bd-violet); } .bd-bg-purple-bright { @@ -94,6 +101,7 @@ .bi { width: 1em; height: 1em; + vertical-align: -.125em; fill: currentColor; } diff --git a/site/assets/scss/_footer.scss b/site/assets/scss/_footer.scss index 87cee6d2b..b66b62225 100644 --- a/site/assets/scss/_footer.scss +++ b/site/assets/scss/_footer.scss @@ -4,12 +4,12 @@ .bd-footer { a { - color: $gray-700; + color: var(--bs-body-color); text-decoration: none; &:hover, &:focus { - color: $link-color; + color: var(--bs-primary); text-decoration: underline; } } diff --git a/site/assets/scss/_masthead.scss b/site/assets/scss/_masthead.scss index bbc867583..e38c7ded1 100644 --- a/site/assets/scss/_masthead.scss +++ b/site/assets/scss/_masthead.scss @@ -1,16 +1,15 @@ .bd-masthead { padding: 3rem 0; - background: linear-gradient(165deg, tint-color($bd-purple-light, 85%) 50%, $white 50%); + background: linear-gradient(165deg, rgba(var(--bd-violet-rgb), .05) 50%, var(--bs-body-bg) 50%); h1 { @include font-size(4rem); - line-height: 1; } .lead { @include font-size(1rem); font-weight: 400; - color: $gray-700; + color: var(--bs-secondary-color); } .highlight { @@ -24,8 +23,7 @@ } #carbonads { // stylelint-disable-line selector-max-id - margin-right: auto; - margin-left: auto; + margin-inline: auto; } @include media-breakpoint-up(md) { @@ -35,7 +33,7 @@ } } -.masthead-followup { +.bd-masthead-followup { .lead { @include font-size(1rem); } @@ -71,5 +69,6 @@ } .masthead-notice { - background-color: #d2f4ea; + --bg: #{to-rgb($teal)}; + background-color: rgba(var(--bg), .2); } diff --git a/site/assets/scss/_navbar.scss b/site/assets/scss/_navbar.scss index 91ec45944..1a570d60d 100644 --- a/site/assets/scss/_navbar.scss +++ b/site/assets/scss/_navbar.scss @@ -2,7 +2,13 @@ padding: .75rem 0; background-color: transparent; background-image: linear-gradient(to bottom, rgba(var(--bd-violet-rgb), 1), rgba(var(--bd-violet-rgb), .95)); - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .15), inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: 0 .5rem 1rem rgba($black, .15), inset 0 -1px 0 rgba($white, .15); + + [data-theme="dark"] & { + backdrop-filter: blur(.25rem); + background-image: linear-gradient(to bottom, rgba(var(--bd-violet-rgb), 1), rgba(var(--bd-violet-rgb), .75)); + box-shadow: 0 .5rem 1rem rgba($black, .15), inset 0 -1px 0 rgba($white, .15); + } .navbar-toggler { padding: 0; @@ -64,17 +70,63 @@ } .dropdown-menu { - --#{$variable-prefix}dropdown-min-width: 12rem; - --#{$variable-prefix}dropdown-link-hover-bg: rgba(var(--bd-violet-rgb), .1); - @include rfs(.875rem, --#{$variable-prefix}dropdown-font-size); + --bs-dropdown-min-width: 12rem; + --bs-dropdown-padding: .25rem; + --bs-dropdown-link-hover-bg: rgba(var(--bd-violet-rgb), .1); + --bs-dropdown-link-active-bg: rgba(var(--bd-violet-rgb), 1); + @include rfs(.875rem, --bs-dropdown-font-size); + @include border-radius(.5rem); box-shadow: $dropdown-box-shadow; - } - .dropdown-item.current { - font-weight: 600; - background-image: escape-svg($dropdown-active-icon); - background-repeat: no-repeat; - background-position: right $dropdown-item-padding-x top .6rem; - background-size: .75rem .75rem; + .current { + font-weight: 600; + + .bi { + display: block !important; // stylelint-disable-line declaration-no-important + } + } + + .dropdown-item { + @include border-radius(.25rem); + + &:active { + .bi { + color: inherit !important; // stylelint-disable-line declaration-no-important + } + } + } } } + +.bd-theme-toggle { + width: 2rem; + height: 2rem; + cursor: pointer; +} + +.bd-theme-toggle-checkbox { + position: absolute; + z-index: -1; + width: 1px; + height: 1px; + overflow: hidden; + clip: rect(0 0 0 0); + clip-path: inset(100%); + white-space: nowrap; + + ~ .bd-theme-toggle-light { display: none; } + ~ .bd-theme-toggle-dark { display: block; } + + &:checked { + ~ .bd-theme-toggle-light { display: block; } + ~ .bd-theme-toggle-dark { display: none; } + } +} + +.bd-theme-toggle-light { + color: var(--bs-warning); +} + +.bd-theme-toggle-dark { + color: var(--bs-navbar-brand-color); +} diff --git a/site/assets/scss/_sidebar.scss b/site/assets/scss/_sidebar.scss index ed76b3ca8..9baeb0509 100644 --- a/site/assets/scss/_sidebar.scss +++ b/site/assets/scss/_sidebar.scss @@ -11,6 +11,13 @@ margin-left: -.25rem; overflow-y: auto; } + + @include media-breakpoint-down(lg) { + .offcanvas-lg { + border-right-color: var(--bs-border-color); + box-shadow: $box-shadow-lg; + } + } } .bd-links-nav { @@ -35,16 +42,16 @@ .bd-links-link { padding: .1875rem .5rem; margin-top: .125rem; - margin-left: 1rem; - color: rgba($black, .65); + margin-left: 1.125rem; + color: var(--bs-body-color); text-decoration: if($link-decoration == none, null, none); &:hover, &:focus, &.active { - color: rgba($black, .85); + color: var(--bs-heading-color); text-decoration: if($link-hover-decoration == underline, none, null); - background-color: rgba(var(--bd-violet-rgb), .1); + background-color: var(--bd-sidebar-link-bg); } &.active { diff --git a/site/assets/scss/_syntax.scss b/site/assets/scss/_syntax.scss index 319819d4a..b01df21a7 100644 --- a/site/assets/scss/_syntax.scss +++ b/site/assets/scss/_syntax.scss @@ -1,4 +1,5 @@ -:root { +:root, +[data-theme="light"] { --base00: #fff; --base01: #f5f5f5; --base02: #c8c8fa; @@ -17,6 +18,25 @@ --base0F: #333; } +[data-theme="dark"] { + --base00: #282c34; + --base01: #353b45; + --base02: #3e4451; + --base03: #545862; + --base04: #565c64; + --base05: #abb2bf; + --base06: #b6bdca; + --base07: #d19a66; + --base08: #e06c75; + --base09: #d19a66; + --base0A: #e5c07b; + --base0B: #98c379; + --base0C: #56b6c2; + --base0D: #61afef; + --base0E: #c678dd; + --base0F: #be5046; +} + .hll { background-color: #fff; } .c { color: var(--base03); } .err { color: var(--base08); } diff --git a/site/assets/scss/_toc.scss b/site/assets/scss/_toc.scss index 512a11b42..2132c8f30 100644 --- a/site/assets/scss/_toc.scss +++ b/site/assets/scss/_toc.scss @@ -52,7 +52,7 @@ } @include media-breakpoint-down(md) { - border: 1px solid $border-color; + border: 1px solid var(--bs-border-color); @include border-radius(.4rem); &:hover, diff --git a/site/assets/scss/_variables.scss b/site/assets/scss/_variables.scss index 8c00d8d45..3ae7dfc2e 100644 --- a/site/assets/scss/_variables.scss +++ b/site/assets/scss/_variables.scss @@ -5,7 +5,6 @@ $bd-purple: #4c0bce; $bd-violet: lighten(saturate($bd-purple, 5%), 15%); // stylelint-disable-line function-disallowed-list $bd-purple-light: lighten(saturate($bd-purple, 5%), 45%); // stylelint-disable-line function-disallowed-list $bd-accent: #ffe484; -$dropdown-active-icon: url("data:image/svg+xml,"); $bd-gutter-x: 2rem; $bd-callout-variants: info, warning, danger !default; @@ -16,4 +15,11 @@ $bd-callout-variants: info, warning, danger !default; --bd-accent: #{$bd-accent}; --bd-violet-rgb: #{to-rgb($bd-violet)}; --bd-accent-rgb: #{to-rgb($bd-accent)}; + --bd-sidebar-link-bg: rgba(var(--bd-violet-rgb), .1); +} + +@media (prefers-color-scheme: dark) { + :root { + --bd-violet: #{mix($bd-violet, $black, 75%)}; + } } diff --git a/site/content/docs/5.1/components/dropdowns.md b/site/content/docs/5.1/components/dropdowns.md index 4a53be28d..782f91761 100644 --- a/site/content/docs/5.1/components/dropdowns.md +++ b/site/content/docs/5.1/components/dropdowns.md @@ -963,9 +963,13 @@ As part of Bootstrap's evolving CSS variables approach, dropdowns now use local {{< scss-docs name="dropdown-css-vars" file="scss/_dropdown.scss" >}} -Customization through CSS variables can be seen on the `.dropdown-menu-dark` class where we override specific values without adding duplicate CSS selectors. +{{< callout info >}} +Dropdown items include at least one variable that is not set on `.dropdown`. This allows you to provide a new value while Bootstrap defaults to a fallback value. -{{< scss-docs name="dropdown-dark-css-vars" file="scss/_dropdown.scss" >}} +- `--bs-dropdown-item-border-radius` +{{< /callout >}} + +Customization through CSS variables can be seen on the `.dropdown-menu-dark` class where we override specific values without adding duplicate CSS selectors. ### Sass variables diff --git a/site/content/docs/5.1/customize/color.md b/site/content/docs/5.1/customize/color.md index 1b9647645..63e1b33f2 100644 --- a/site/content/docs/5.1/customize/color.md +++ b/site/content/docs/5.1/customize/color.md @@ -6,6 +6,70 @@ group: customize toc: true --- +## Dark mode + +Added in v5.3.0 + +**Bootstrap now supports dark mode!** After upgrading to v5.3.0, you'll be able to implement your own color mode toggler (see below for an example from Bootstrap's docs) and apply the different color modes as you see fit. Color modes can be toggled globally on the `` element, or on specific components and elements, thanks to an easy `data-theme` attribute. + +For example, to change the toggle mode of a dropdown menu, add `data-theme="light"` or `data-theme="dark"` to the parent `.dropdown`. Now, no matter the global color mode, these dropdowns will display as intended. + +{{< example class="d-flex justify-content-between" >}} + + + +{{< /example >}} + +## New theme colors + +Added in v5.2.0 + +Bootstrap's color palette has continued to expand and become more nuanced in v5.2.0 with the addition of new `secondary` and `tertiary` colors. Our new colors are available through Sass and CSS variables (but not our color maps), with the express goal of making it easier to customize across multiple colors modes like light and dark. + +Colors ending in `--rgb` provide the `red, green, blue` values for use in `rgb()` and `rgba()` color modes. For example, `rgba(var(--bs-secondary-bg-rgb), .5)`. + +{{< callout warning>}} +**Heads up!** There's some potentially confusing things regarding new secondary and tertiary colors, and our secondary theme color. +{{< /callout >}} + +{{< bs-table "table text-start table-swatches" >}} +| Description | Swatch | Variables | +| --- | --- | --- | +| **Body —** Default foreground (color) and background, including components. |
 
 
| `--bs-body-color`
`--bs-body-color-rgb`
`--bs-body-bg`
`--bs-body-bg-rgb` | +| **Secondary —** For disabled states, dividers, and lighter text. |
 
 
| `--bs-secondary-color`
`--bs-secondary-color-rgb`
`--bs-secondary-bg`
`--bs-secondary-bg-rgb` | +| **Tertiary —** For hovers, accents, wells, and text. |
 
 
| `--bs-tertiary-color`
`--bs-tertiary-color-rgb`
`--bs-tertiary-bg`
`--bs-tertiary-bg-rgb` | +| **Border —** For component borders, dividers, and rules. Blends with background colors thanks to `rgba()` values. |
Border color
| `--bs-border-color` | +| **Primary —** Main theme color, used for hyperlinks, focus styles, and component and form active states. |
Primary
| `--bs-primary`
`--bs-primary-rgb` | +| **Success —** Theme color used for positive or successful actions and information. |
Success
| `--bs-success`
`--bs-success-rgb` | +| **Danger —** Theme color used for errors and dangerous actions. |
Danger
| `--bs-danger`
`--bs-danger-rgb` | +| **Warning —** Theme color used for warning messages. |
Warning
| `--bs-warning`
`--bs-warning-rgb` | +| **Info —** Theme color used for neutral and informative content. |
Info
| `--bs-info`
`--bs-info-rgb` | +{{< /bs-table >}} + ## Theme colors We use a subset of all colors to create a smaller color palette for generating color schemes, also available as Sass variables and a Sass map in Bootstrap's `scss/_variables.scss` file. diff --git a/site/content/docs/5.1/customize/css-variables.md b/site/content/docs/5.1/customize/css-variables.md index 06a4cbdb9..7efba0ec4 100644 --- a/site/content/docs/5.1/customize/css-variables.md +++ b/site/content/docs/5.1/customize/css-variables.md @@ -46,7 +46,7 @@ Customize the prefix via the `$variable-prefix` Sass variable. By default, it's CSS variables offer similar flexibility to Sass's variables, but without the need for compilation before being served to the browser. For example, here we're resetting our page's font and link styles with CSS variables. -```css +```scss body { font: 1rem/1.5 var(--bs-font-sans-serif); } diff --git a/site/layouts/_default/baseof.html b/site/layouts/_default/baseof.html index fdf19b31f..608a6f857 100644 --- a/site/layouts/_default/baseof.html +++ b/site/layouts/_default/baseof.html @@ -1,5 +1,5 @@ - + {{ partial "header" . }} diff --git a/site/layouts/_default/docs.html b/site/layouts/_default/docs.html index 3c61cd342..ba2f99daa 100644 --- a/site/layouts/_default/docs.html +++ b/site/layouts/_default/docs.html @@ -1,5 +1,5 @@ {{ define "main" }} -
+