- Use a semitransparent gradient from light to dark which works on any background-color
- Store the gradient as a custom property (--bs-gradient)
- Remove `.bg-gradient-*` variants in favour of `.bg-gradient` which works even when `$enable-gradients` are enabled
- Add gradients to navbar, active page links and badges when gradients are enabled
white-space: nowrap;
vertical-align: baseline;
@include border-radius($badge-border-radius);
+ @include gradient-bg();
// Empty badges collapse automatically
&:empty {
-@import "helpers/background";
@import "helpers/clearfix";
@import "helpers/colored-links";
@import "helpers/embed";
@import "mixins/table-variants";
// Skins
-@import "mixins/background-variant";
@import "mixins/border-radius";
@import "mixins/box-shadow";
@import "mixins/gradients";
.nav-link.active,
.show > .nav-link {
color: $nav-pills-link-active-color;
- background-color: $nav-pills-link-active-bg;
+ @include gradient-bg($nav-pills-link-active-bg);
}
}
padding-right: $navbar-padding-x; // default: null
padding-bottom: $navbar-padding-y;
padding-left: $navbar-padding-x; // default: null
+ @include gradient-bg();
// Because flex properties aren't inherited, we need to redeclare these first
// few properties so that content nested within behave properly.
&.active .page-link {
z-index: 3;
color: $pagination-active-color;
- background-color: $pagination-active-bg;
+ @include gradient-bg($pagination-active-bg);
border-color: $pagination-active-border-color;
}
// See https://github.com/sass/sass/issues/2383#issuecomment-336349172
--bs-font-sans-serif: #{inspect($font-family-sans-serif)};
--bs-font-monospace: #{inspect($font-family-monospace)};
+ --bs-gradient: #{$gradient};
}
)
)
),
+ "gradient": (
+ property: background-image,
+ class: bg,
+ values: (gradient: var(--bs-gradient))
+ ),
"white-space": (
property: white-space,
class: text,
$enable-deprecation-messages: true !default;
$enable-important-utilities: true !default;
+// Gradient
+//
+// The gradient which is added to components if `$enable-gradients` is `true`
+// This gradient is also added to elements with `.bg-gradient`
+$gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default;
// Spacing
//
&[type="checkbox"] {
@if $enable-gradients {
- background-image: escape-svg($form-check-input-checked-bg-image), linear-gradient(180deg, lighten($form-check-input-checked-bg-color, 10%), $form-check-input-checked-bg-color);
+ background-image: escape-svg($form-check-input-checked-bg-image), var(--bs-gradient);
} @else {
background-image: escape-svg($form-check-input-checked-bg-image);
}
&[type="radio"] {
@if $enable-gradients {
- background-image: escape-svg($form-check-radio-checked-bg-image), linear-gradient(180deg, lighten($form-check-input-checked-bg-color, 10%), $form-check-input-checked-bg-color);
+ background-image: escape-svg($form-check-radio-checked-bg-image), var(--bs-gradient);
} @else {
background-image: escape-svg($form-check-radio-checked-bg-image);
}
border-color: $form-check-input-indeterminate-border-color;
@if $enable-gradients {
- background-image: escape-svg($form-check-input-indeterminate-bg-image), linear-gradient(180deg, lighten($form-check-input-checked-bg-color, 10%), $form-check-input-checked-bg-color);
+ background-image: escape-svg($form-check-input-indeterminate-bg-image), var(--bs-gradient);
} @else {
background-image: escape-svg($form-check-input-indeterminate-bg-image);
}
+++ /dev/null
-@if $enable-gradients {
- @each $color, $value in $theme-colors {
- @include bg-gradient-variant(".bg-gradient-#{$color}", $value);
- }
-}
+++ /dev/null
-// stylelint-disable declaration-no-important
-
-@mixin bg-gradient-variant($parent, $color) {
- #{$parent} {
- background-image: linear-gradient(180deg, mix($body-bg, $color, 15%), $color) !important;
- }
-}
border-color: $color;
&:checked {
- @include gradient-bg(lighten($color, 10%), escape-svg($form-check-input-checked-bg-image));
+ background-color: $color;
}
&:focus {
// Gradients
-@mixin gradient-bg($color, $foreground: null) {
+@mixin gradient-bg($color: null) {
+ background-color: $color;
+
@if $enable-gradients {
- @if $foreground {
- background-image: $foreground, linear-gradient(180deg, mix($body-bg, $color, 15%), $color);
- } @else {
- background-image: linear-gradient(180deg, mix($body-bg, $color, 15%), $color);
- }
- } @else {
- background-color: $color;
+ background-image: var(--bs-gradient);
}
}
- `color-yiq()` function and related variables are renamed to `color-contrast()` since it's not related to YIQ colorspace anymore. [See #30168.](https://github.com/twbs/bootstrap/pull/30168/)
- `$yiq-contrasted-threshold` is renamed `$min-contrast-ratio`.
- `$yiq-text-dark` and `$yiq-text-light` are respectively renamed `$color-contrast-dark` and `$color-contrast-light`.
+- Linear gradients are simplified when gradients are enabled and therefore, `gradient-bg()` now only accepts an optional `$color` parameter.
+- `bg-gradient-variant()` mixin is removed since the `.bg-gradient` class can now be used to add gradients to elements instead of the `.bg-gradient-*` classes.
## JavaScript
## Background gradient
-When `$enable-gradients` is set to `true` (default is `false`), you can use `.bg-gradient-` utility classes. [Learn about our Sass options]({{< docsref "/customize/sass" >}}) to enable these classes and more.
+By adding a `.bg-gradient` class, a linear gradient is added as background image to the backgrounds. This gradient starts with a semi-transparent white which fades out to the bottom.
+
+Do you need a gradient in your custom CSS? Just add `background-image: var(--bs-gradient);`.
{{< markdown >}}
{{< colors.inline >}}
{{- range (index $.Site.Data "theme-colors") }}
-- `.bg-gradient-{{ .name }}`
+<div class="p-3 mb-2 bg-{{ .name }} bg-gradient {{ if or (eq .name "light") (eq .name "warning") }}text-dark{{ else }}text-white{{ end }}">.bg-{{ .name }}.bg-gradient</div>
{{- end -}}
{{< /colors.inline >}}
{{< /markdown >}}