Skip to content

Commit 5cf8f7a

Browse files
committed
refactor: generate CSS variables for color variants instead of styles
1 parent 32fcd38 commit 5cf8f7a

File tree

10 files changed

+185
-240
lines changed

10 files changed

+185
-240
lines changed

scss/_alert.scss

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
position: relative;
77
padding: $alert-padding-y $alert-padding-x;
88
margin-bottom: $alert-margin-bottom;
9-
border: $alert-border-width solid transparent;
9+
color: var(--#{$variable-prefix}alert-color);
10+
@include gradient-bg(var(--#{$variable-prefix}alert-bg));
11+
border: $alert-border-width solid var(--#{$variable-prefix}alert-border-color, transparent);
1012
@include border-radius($alert-border-radius);
1113
}
1214

@@ -19,6 +21,7 @@
1921
// Provide class for links that match alerts
2022
.alert-link {
2123
font-weight: $alert-link-font-weight;
24+
color: var(--#{$variable-prefix}alert-link-color);
2225
}
2326

2427

@@ -44,13 +47,13 @@
4447
// Generate contextual modifier classes for colorizing the alert.
4548

4649
@each $state, $map in $alert-variants {
47-
$background: var(--#{$variable-prefix}alert-background, map-get($map, "background"));
48-
$border: var(--#{$variable-prefix}alert-border-color, map-get($map, "border"));
49-
$color: var(--#{$variable-prefix}alert-color, contrast-ratio-correction(map-get($map, "color"), map-get($map, "background"), abs($alert-color-scale), $state));
50-
$link-color: var(--#{$variable-prefix}alert-link-color, map-get($map, "link-color"));
50+
$background: map-get($map, "background");
51+
$border-color: map-get($map, "border-color");
52+
$color: contrast-ratio-correction(map-get($map, "color"), map-get($map, "background"), abs($alert-color-scale), $state);
53+
$link-color: map-get($map, "link-color");
5154

5255
.alert-#{$state} {
53-
@include alert-variant($background, $border, $color, $link-color);
56+
@include alert-variant($background, $border-color, $color, $link-color);
5457
}
5558
}
5659
// scss-docs-end alert-modifiers

scss/_buttons.scss

Lines changed: 67 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,44 +7,73 @@
77
font-family: $btn-font-family;
88
font-weight: $btn-font-weight;
99
line-height: $btn-line-height;
10-
color: var(--#{$variable-prefix}body-color, $body-color);
10+
color: var(--#{$variable-prefix}btn-color, $body-color);
1111
text-align: center;
1212
text-decoration: if($link-decoration == none, null, none);
1313
white-space: $btn-white-space;
1414
vertical-align: middle;
1515
cursor: if($enable-button-pointers, pointer, null);
1616
user-select: none;
17-
background-color: transparent;
18-
border: $btn-border-width solid transparent;
17+
@include gradient-bg(var(--#{$variable-prefix}btn-bg, transparent));
18+
border: $btn-border-width solid var(--#{$variable-prefix}btn-border-color, transparent);
19+
@include box-shadow(var(--#{$variable-prefix}btn-box-shadow, $btn-box-shadow));
1920
@include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-border-radius);
2021
@include transition($btn-transition);
2122

2223
&:hover {
23-
color: var(--#{$variable-prefix}body-color, $body-color);
24+
color: var(--#{$variable-prefix}btn-hover-color, $body-color);
25+
@include gradient-bg(var(--#{$variable-prefix}btn-hover-bg));
2426
text-decoration: if($link-hover-decoration == underline, none, null);
27+
border-color: var(--#{$variable-prefix}btn-hover-border-color, transparent);
2528
}
2629

2730
.btn-check:focus + &,
2831
&:focus {
32+
color: var(--#{$variable-prefix}btn-hover-color);
33+
@include gradient-bg(var(--#{$variable-prefix}btn-hover-bg));
34+
border-color: var(--#{$variable-prefix}btn-hover-border-color, transparent);
2935
outline: 0;
30-
box-shadow: $btn-focus-box-shadow;
36+
// box-shadow: $btn-focus-box-shadow; // TODO: check this solution
37+
@if $enable-shadows {
38+
@include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width var(--#{$variable-prefix}btn-shadow));
39+
} @else {
40+
// Avoid using mixin so we can pass custom focus shadow properly
41+
box-shadow: 0 0 0 $btn-focus-width var(--#{$variable-prefix}btn-shadow);
42+
}
3143
}
3244

3345
.btn-check:checked + &,
3446
.btn-check:active + &,
3547
&:active,
36-
&.active {
48+
&.active,
49+
.show > &.dropdown-toggle {
50+
color: var(--#{$variable-prefix}btn-active-color);
51+
background-color: var(--#{$variable-prefix}btn-active-bg);
52+
// Remove CSS gradients if they're enabled
53+
background-image: if($enable-gradients, none, null);
54+
border-color: var(--#{$variable-prefix}btn-active-border-color, transparent);
3755
@include box-shadow($btn-active-box-shadow);
3856

3957
&:focus {
40-
@include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow);
58+
// @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow); // TODO: check this solution
59+
@if $enable-shadows {
60+
@include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width var(--#{$variable-prefix}btn-shadow));
61+
} @else {
62+
// Avoid using mixin so we can pass custom focus shadow properly
63+
box-shadow: 0 0 0 $btn-focus-width var(--#{$variable-prefix}btn-shadow);
64+
}
4165
}
4266
}
4367

4468
&:disabled,
4569
&.disabled,
4670
fieldset:disabled & {
71+
color: var(--#{$variable-prefix}btn-disabled-color);
4772
pointer-events: none;
73+
background-color: var(--#{$variable-prefix}btn-disabled-bg);
74+
// Remove CSS gradients if they're enabled
75+
background-image: if($enable-gradients, none, null);
76+
border-color: var(--#{$variable-prefix}btn-disabled-border-color, transparent);
4877
opacity: $btn-disabled-opacity;
4978
@include box-shadow(none);
5079
}
@@ -59,19 +88,19 @@
5988
@each $state, $map in $button-variants {
6089
.btn-#{$state} {
6190
@include button-variant(
62-
$background: var(--#{$variable-prefix}btn-background, map-get($map, "background")),
63-
$border-color: var(--#{$variable-prefix}btn-border-color, map-get($map, "border-color")),
64-
$color: var(--#{$variable-prefix}btn-color, map-get($map, "color")),
65-
$hover-background: var(--#{$variable-prefix}btn-hover-background, map-get($map, "hover-background")),
66-
$hover-border-color: var(--#{$variable-prefix}btn-hover-border, map-get($map, "hover-border-color")),
67-
$hover-color: var(--#{$variable-prefix}btn-hover-color, map-get($map, "hover-color")),
68-
$active-background: var(--#{$variable-prefix}btn-active-background, map-get($map, "active-background")),
69-
$active-border-color: var(--#{$variable-prefix}btn-active-border, map-get($map, "active-border-color")),
70-
$active-color: var(--#{$variable-prefix}btn-active-color, map-get($map, "active-color")),
71-
$disabled-background: var(--#{$variable-prefix}btn-disabled-background, map-get($map, "disabled-background")),
72-
$disabled-border-color: var(--#{$variable-prefix}btn-disabled-border, map-get($map, "disabled-border-color")),
73-
$disabled-color: var(--#{$variable-prefix}btn-disabled-color, map-get($map, "disabled-color")),
74-
$shadow: var(--#{$variable-prefix}btn-shadow, map-get($map, "shadow"))
91+
$background: map-get($map, "background"),
92+
$border-color: map-get($map, "border-color"),
93+
$color: map-get($map, "color"),
94+
$hover-background: map-get($map, "hover-background"),
95+
$hover-border-color: map-get($map, "hover-border-color"),
96+
$hover-color: map-get($map, "hover-color"),
97+
$active-background: map-get($map, "active-background"),
98+
$active-border-color: map-get($map, "active-border-color"),
99+
$active-color: map-get($map, "active-color"),
100+
$disabled-background: map-get($map, "disabled-background"),
101+
$disabled-border-color: map-get($map, "disabled-border-color"),
102+
$disabled-color: map-get($map, "disabled-color"),
103+
$shadow: map-get($map, "shadow")
75104
);
76105
}
77106
}
@@ -81,15 +110,15 @@
81110
@each $state, $map in $button-outline-ghost-variants {
82111
.btn-outline-#{$state} {
83112
@include button-outline-variant(
84-
$color: var(--#{$variable-prefix}btn-color, map-get($map, "color")),
85-
$hover-background: var(--#{$variable-prefix}btn-hover-background, map-get($map, "hover-background")),
86-
$hover-border-color: var(--#{$variable-prefix}btn-hover-border-color, map-get($map, "hover-border-color")),
87-
$hover-color: var(--#{$variable-prefix}btn-hover-color, map-get($map, "hover-color")),
88-
$active-background: var(--#{$variable-prefix}btn-active-background, map-get($map, "active-background")),
89-
$active-border-color: var(--#{$variable-prefix}btn-active-border-color, map-get($map, "active-border-color")),
90-
$active-color: var(--#{$variable-prefix}btn-active-color, map-get($map, "active-color")),
91-
$disabled-color: var(--#{$variable-prefix}btn-disabled-color, map-get($map, "disabled-color")),
92-
$shadow: var(--#{$variable-prefix}btn-shadow, map-get($map, "shadow"))
113+
$color: map-get($map, "color"),
114+
$hover-background: map-get($map, "hover-background"),
115+
$hover-border-color: map-get($map, "hover-border-color"),
116+
$hover-color: map-get($map, "hover-color"),
117+
$active-background: map-get($map, "active-background"),
118+
$active-border-color: map-get($map, "active-border-color"),
119+
$active-color: map-get($map, "active-color"),
120+
$disabled-color: map-get($map, "disabled-color"),
121+
$shadow: map-get($map, "shadow")
93122
);
94123
}
95124
}
@@ -99,15 +128,15 @@
99128
@each $state, $map in $button-outline-ghost-variants {
100129
.btn-ghost-#{$state} {
101130
@include button-ghost-variant(
102-
$color: var(--#{$variable-prefix}btn-color, map-get($map, "color")),
103-
$hover-background: var(--#{$variable-prefix}btn-hover-background, map-get($map, "hover-background")),
104-
$hover-border-color: var(--#{$variable-prefix}btn-hover-border-color, map-get($map, "hover-border-color")),
105-
$hover-color: var(--#{$variable-prefix}btn-hover-color, map-get($map, "hover-color")),
106-
$active-background: var(--#{$variable-prefix}btn-active-background, map-get($map, "active-background")),
107-
$active-border-color: var(--#{$variable-prefix}btn-active-border-color, map-get($map, "active-border-color")),
108-
$active-color: var(--#{$variable-prefix}btn-active-color, map-get($map, "active-color")),
109-
$disabled-color: var(--#{$variable-prefix}btn-disabled-color, map-get($map, "disabled-color")),
110-
$shadow: var(--#{$variable-prefix}btn-shadow, map-get($map, "shadow"))
131+
$color: map-get($map, "color"),
132+
$hover-background: map-get($map, "hover-background"),
133+
$hover-border-color: map-get($map, "hover-border-color"),
134+
$hover-color: map-get($map, "hover-color"),
135+
$active-background: map-get($map, "active-background"),
136+
$active-border-color: map-get($map, "active-border-color"),
137+
$active-color: map-get($map, "active-color"),
138+
$disabled-color: map-get($map, "disabled-color"),
139+
$shadow: map-get($map, "shadow")
111140
);
112141
}
113142
}

scss/_functions.scss

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
184184
@function alert-color-map($color) {
185185
@return (
186186
"background": shift-color($color, $alert-bg-scale),
187-
"border": shift-color($color, $alert-border-scale),
187+
"border-color": shift-color($color, $alert-border-scale),
188188
"color": shift-color($color, $alert-color-scale),
189189
"link-color": shade-color(shift-color($color, $alert-color-scale), 20%)
190190
);
@@ -239,6 +239,28 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
239239
}
240240
// scss-docs-end list-group-color-functions
241241

242+
// scss-docs-start table-color-functions
243+
@function table-color-map($background) {
244+
$table-bg: $background;
245+
$color: color-contrast(opaque($body-bg, $background));
246+
$striped-bg: mix($color, $background, percentage($table-striped-bg-factor));
247+
$active-bg: mix($color, $background, percentage($table-active-bg-factor));
248+
$hover-bg: mix($color, $background, percentage($table-hover-bg-factor));
249+
250+
@return (
251+
"table-bg": $background,
252+
"table-color": $color,
253+
"table-border-color": mix($color, $background, percentage($table-border-factor)),
254+
"table-striped-bg": $striped-bg,
255+
"table-striped-color": color-contrast($striped-bg),
256+
"table-active-bg": $active-bg,
257+
"table-active-color": color-contrast($active-bg),
258+
"table-hover-bg": $hover-bg,
259+
"table-hover-color": color-contrast($hover-bg)
260+
);
261+
}
262+
// scss-docs-end table-color-functions
263+
242264
// Return valid calc
243265
@function add($value1, $value2, $return-calc: true) {
244266
@if $value1 == null {

scss/_list-group.scss

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
&:active {
3636
color: var(--#{$variable-prefix}list-group-action-active-color, $list-group-action-active-color);
3737
background-color: var(--#{$variable-prefix}list-group-action-active-bg, $list-group-action-active-bg);
38+
border-color: var(--#{$variable-prefix}list-group-action-active-border-color);
3839
}
3940
}
4041

@@ -152,9 +153,9 @@
152153
// Organizationally, this must come after the `:hover` states.
153154

154155
@each $state, $map in $list-group-variants {
155-
$background: var(--#{$variable-prefix}list-group-background, map-get($map, "background"));
156-
$background-hover: var(--#{$variable-prefix}list-group-background-hover, map-get($map, "background-hover"));
157-
$color: var(--#{$variable-prefix}list-group-color, contrast-ratio-correction(map-get($map, "color"), map-get($map, "background"), abs($alert-color-scale), $state));
156+
$background: map-get($map, "background");
157+
$background-hover: map-get($map, "background-hover");
158+
$color: contrast-ratio-correction(map-get($map, "color"), map-get($map, "background"), abs($alert-color-scale), $state);
158159

159160
@include list-group-item-variant($state, $background, $background-hover, $color);
160161
}

scss/_tables.scss

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@
2626
// stylelint-disable-next-line selector-max-universal
2727
> :not(caption) > * > * {
2828
padding: $table-cell-padding-y $table-cell-padding-x;
29+
color: var(--#{$variable-prefix}table-color);
2930
background-color: var(--#{$variable-prefix}table-bg);
30-
border-bottom-width: $table-border-width;
31+
border-bottom: $table-border-width;
32+
border-bottom-color: var(--#{$variable-prefix}table-border-color);
3133
box-shadow: inset 0 0 0 9999px var(--#{$variable-prefix}table-accent-bg);
3234
}
3335

@@ -131,10 +133,32 @@
131133
// Table variants set the table cell backgrounds, border colors
132134
// and the colors of the striped, hovered & active tables
133135

134-
@each $color, $value in $table-variants {
135-
@include table-variant($color, $value);
136+
// @each $color, $value in $table-variants {
137+
// @include table-variant($color, $value);
138+
// }
139+
140+
@each $color, $map in $table-variants {
141+
// @include table-variant($color, $value);
142+
.table-#{$color} {
143+
@include table-variant($map);
144+
}
145+
}
146+
147+
@each $state, $map in $alert-variants {
148+
$background: map-get($map, "background");
149+
$border-color: map-get($map, "border-color");
150+
$color: contrast-ratio-correction(map-get($map, "color"), map-get($map, "background"), abs($alert-color-scale), $state);
151+
$link-color: map-get($map, "link-color");
152+
153+
.alert-#{$state} {
154+
@include alert-variant($background, $border-color, $color, $link-color);
155+
}
136156
}
137157

158+
// @each $state, $map in $list-group-variants {
159+
160+
// }
161+
138162
// Responsive tables
139163
//
140164
// Generate series of `.table-responsive-*` classes for configuring the screen

scss/_variables.scss

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -561,16 +561,6 @@ $text-high-emphasis-inverse: $high-emphasis-inverse !default;
561561
$text-medium-emphasis-inverse: $medium-emphasis-inverse !default;
562562
$text-disabled-inverse: $disabled-inverse !default;
563563

564-
// Text colors
565-
// TODO: clean-up
566-
// $high-emphasis-dark: rgba(shift-color($gray-base, +26), .87) !default;
567-
// $medium-emphasis-dark: rgba(shift-color($gray-base, +26), .6) !default;
568-
// $disabled-dark: rgba(shift-color($gray-base, +26), .38) !default;
569-
570-
// $high-emphasis-inverse: rgba($white, .87) !default;
571-
// $medium-emphasis-inverse: rgba($white, .6) !default;
572-
// $disabled-inverse: rgba($white, .38) !default;
573-
574564
$initialism-font-size: $small-font-size !default;
575565

576566
$blockquote-margin-y: $spacer !default;
@@ -653,14 +643,14 @@ $table-bg-scale: -80% !default;
653643

654644
// scss-docs-start table-loop
655645
$table-variants: (
656-
"primary": shift-color($primary, $table-bg-scale),
657-
"secondary": shift-color($secondary, $table-bg-scale),
658-
"success": shift-color($success, $table-bg-scale),
659-
"info": shift-color($info, $table-bg-scale),
660-
"warning": shift-color($warning, $table-bg-scale),
661-
"danger": shift-color($danger, $table-bg-scale),
662-
"light": $light,
663-
"dark": $dark,
646+
"primary": table-color-map(shift-color($primary, $table-bg-scale)),
647+
"secondary": table-color-map(shift-color($secondary, $table-bg-scale)),
648+
"success": table-color-map(shift-color($success, $table-bg-scale)),
649+
"danger": table-color-map(shift-color($danger, $table-bg-scale)),
650+
"warning": table-color-map(shift-color($warning, $table-bg-scale)),
651+
"info": table-color-map(shift-color($info, $table-bg-scale)),
652+
"light": table-color-map(shift-color($light, $table-bg-scale)),
653+
"dark": table-color-map(shift-color($dark, $table-bg-scale))
664654
) !default;
665655
// scss-docs-end table-loop
666656

scss/mixins/_alert.scss

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1+
// scss-docs-start alert-variant-mixin
12
@mixin alert-variant($background, $border-color, $color, $link-color) {
2-
color: $color;
3-
@include gradient-bg($background);
4-
border-color: $border-color;
5-
6-
.alert-link {
7-
color: $link-color;
8-
}
3+
--#{$variable-prefix}alert-color: #{$color};
4+
--#{$variable-prefix}alert-bg: #{$background};
5+
--#{$variable-prefix}alert-border-color: #{$border-color};
6+
--#{$variable-prefix}alert-link-color: #{$link-color};
97
}
108
// scss-docs-end alert-variant-mixin

0 commit comments

Comments
 (0)