Skip to content

Commit 71582ea

Browse files
authored
Convert spinners to CSS variables (#35960)
* Convert spinners to CSS variables * bundlewatch
1 parent 8182fd9 commit 71582ea

File tree

3 files changed

+58
-24
lines changed

3 files changed

+58
-24
lines changed

.bundlewatch.config.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626
},
2727
{
2828
"path": "./dist/css/bootstrap.css",
29-
"maxSize": "26.6 kB"
29+
"maxSize": "26.65 kB"
3030
},
3131
{
3232
"path": "./dist/css/bootstrap.min.css",
33-
"maxSize": "24.65 kB"
33+
"maxSize": "24.75 kB"
3434
},
3535
{
3636
"path": "./dist/js/bootstrap.bundle.js",

scss/_spinners.scss

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,43 @@
22
// Rotating border
33
//
44

5+
.spinner-grow,
6+
.spinner-border {
7+
display: inline-block;
8+
width: var(--#{$prefix}spinner-width);
9+
height: var(--#{$prefix}spinner-height);
10+
vertical-align: var(--#{$prefix}spinner-vertical-align);
11+
// stylelint-disable-next-line property-disallowed-list
12+
border-radius: 50%;
13+
animation: var(--#{$prefix}spinner-animation-speed) linear infinite var(--#{$prefix}spinner-animation-name);
14+
}
15+
516
// scss-docs-start spinner-border-keyframes
617
@keyframes spinner-border {
718
to { transform: rotate(360deg) #{"/* rtl:ignore */"}; }
819
}
920
// scss-docs-end spinner-border-keyframes
1021

1122
.spinner-border {
12-
display: inline-block;
13-
width: $spinner-width;
14-
height: $spinner-height;
15-
vertical-align: $spinner-vertical-align;
16-
border: $spinner-border-width solid currentColor;
23+
// scss-docs-start spinner-border-css-vars
24+
--#{$prefix}spinner-width: #{$spinner-width};
25+
--#{$prefix}spinner-height: #{$spinner-height};
26+
--#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};
27+
--#{$prefix}spinner-border-width: #{$spinner-border-width};
28+
--#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};
29+
--#{$prefix}spinner-animation-name: spinner-border;
30+
// scss-docs-end spinner-border-css-vars
31+
32+
border: var(--#{$prefix}spinner-border-width) solid currentColor;
1733
border-right-color: transparent;
18-
// stylelint-disable-next-line property-disallowed-list
19-
border-radius: 50%;
20-
animation: $spinner-animation-speed linear infinite spinner-border;
2134
}
2235

2336
.spinner-border-sm {
24-
width: $spinner-width-sm;
25-
height: $spinner-height-sm;
26-
border-width: $spinner-border-width-sm;
37+
// scss-docs-start spinner-border-sm-css-vars
38+
--#{$prefix}spinner-width: #{$spinner-width-sm};
39+
--#{$prefix}spinner-height: #{$spinner-height-sm};
40+
--#{$prefix}spinner-border-width: #{$spinner-border-width-sm};
41+
// scss-docs-end spinner-border-sm-css-vars
2742
}
2843

2944
//
@@ -43,27 +58,28 @@
4358
// scss-docs-end spinner-grow-keyframes
4459

4560
.spinner-grow {
46-
display: inline-block;
47-
width: $spinner-width;
48-
height: $spinner-height;
49-
vertical-align: $spinner-vertical-align;
61+
// scss-docs-start spinner-grow-css-vars
62+
--#{$prefix}spinner-width: #{$spinner-width};
63+
--#{$prefix}spinner-height: #{$spinner-height};
64+
--#{$prefix}spinner-vertical-align: #{$spinner-vertical-align};
65+
--#{$prefix}spinner-animation-speed: #{$spinner-animation-speed};
66+
--#{$prefix}spinner-animation-name: spinner-grow;
67+
// scss-docs-end spinner-grow-css-vars
68+
5069
background-color: currentColor;
51-
// stylelint-disable-next-line property-disallowed-list
52-
border-radius: 50%;
5370
opacity: 0;
54-
animation: $spinner-animation-speed linear infinite spinner-grow;
5571
}
5672

5773
.spinner-grow-sm {
58-
width: $spinner-width-sm;
59-
height: $spinner-height-sm;
74+
--#{$prefix}spinner-width: #{$spinner-width-sm};
75+
--#{$prefix}spinner-height: #{$spinner-height-sm};
6076
}
6177

6278
@if $enable-reduced-motion {
6379
@media (prefers-reduced-motion: reduce) {
6480
.spinner-border,
6581
.spinner-grow {
66-
animation-duration: $spinner-animation-speed * 2;
82+
--#{$prefix}spinner-animation-speed: #{$spinner-animation-speed * 2};
6783
}
6884
}
6985
}

site/content/docs/5.1/components/spinners.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,28 @@ Use spinners within buttons to indicate an action is currently processing or tak
171171
</button>
172172
{{< /example >}}
173173

174-
## Sass
174+
## CSS
175175

176176
### Variables
177177

178+
{{< added-in "5.2.0" >}}
179+
180+
As part of Bootstrap's evolving CSS variables approach, spinners now use local CSS variables on `.spinner-border` and `.spinner-grow` for enhanced real-time customization. Values for the CSS variables are set via Sass, so Sass customization is still supported, too.
181+
182+
Border spinner variables:
183+
184+
{{< scss-docs name="spinner-border-css-vars" file="scss/_spinners.scss" >}}
185+
186+
Growing spinner variables:
187+
188+
{{< scss-docs name="spinner-grow-css-vars" file="scss/_spinners.scss" >}}
189+
190+
For both spinners, small spinner modifier classes are used to update the values of these CSS variables as needed. For example, the `.spinner-border-sm` class does the following:
191+
192+
{{< scss-docs name="spinner-border-sm-css-vars" file="scss/_spinners.scss" >}}
193+
194+
### Sass variables
195+
178196
{{< scss-docs name="spinner-variables" file="scss/_variables.scss" >}}
179197

180198
### Keyframes

0 commit comments

Comments
 (0)