Skip to content

Commit e9ec5e7

Browse files
ysdsXhmikosR
authored andcommitted
spinners: use .sr-only instead of text-hide technique (#27736)
1 parent a2d0e78 commit e9ec5e7

File tree

2 files changed

+44
-22
lines changed

2 files changed

+44
-22
lines changed

scss/_spinners.scss

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
display: inline-block;
1111
width: $spinner-width;
1212
height: $spinner-height;
13-
overflow: hidden;
14-
text-indent: -999em;
1513
vertical-align: text-bottom;
1614
border: $spinner-border-width solid currentColor;
1715
border-right-color: transparent;
@@ -42,8 +40,6 @@
4240
display: inline-block;
4341
width: $spinner-width;
4442
height: $spinner-height;
45-
overflow: hidden;
46-
text-indent: -999em;
4743
vertical-align: text-bottom;
4844
background-color: currentColor;
4945
border-radius: 50%;

site/docs/4.1/components/spinners.md

Lines changed: 44 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ toc: true
1010

1111
Bootstrap "spinners" can be used to show the loading state in your projects. They're built only with HTML and CSS, meaning you don't need any JavaScript to create them. You will, however, need some custom JavaScript to toggle their visibility. Their appearance, alignment, and sizing can be easily customized with our amazing utility classes.
1212

13-
For accessibility purposes, each loader here includes `role="status"` and `Loading...` text within. We account for this in our CSS, using a text hiding technique to prevent it from rendering on screen.
13+
For accessibility purposes, each loader here includes `role="status"` and a nested `<span class="sr-only">Loading...</span>`.
1414

1515
## Border spinner
1616

1717
Use the border spinners for a lightweight loading indicator.
1818

1919
{% capture example %}
20-
<div class="spinner-border" role="status">Loading...</div>
20+
<div class="spinner-border" role="status">
21+
<span class="sr-only">Loading...</span>
22+
</div>
2123
{% endcapture %}
2224
{% include example.html content=example %}
2325

@@ -27,7 +29,9 @@ The border spinner uses `currentColor` for its `border-color`, meaning you can c
2729

2830
{% capture example %}
2931
{% for color in site.data.theme-colors %}
30-
<div class="spinner-border text-{{ color.name }}" role="status">Loading...</div>{% endfor %}
32+
<div class="spinner-border text-{{ color.name }}" role="status">
33+
<span class="sr-only">Loading...</span>
34+
</div>{% endfor %}
3135
{% endcapture %}
3236
{% include example.html content=example %}
3337

@@ -41,15 +45,19 @@ The border spinner uses `currentColor` for its `border-color`, meaning you can c
4145
If you don't fancy a border spinner, switch to the grow spinner. While it doesn't technically spin, it does repeatedly grow!
4246

4347
{% capture example %}
44-
<div class="spinner-grow" role="status">Loading...</div>
48+
<div class="spinner-grow" role="status">
49+
<span class="sr-only">Loading...</span>
50+
</div>
4551
{% endcapture %}
4652
{% include example.html content=example %}
4753

4854
Once again, this spinner is built with `currentColor`, so you can easily change its appearance with [text color utilities][color]. Here it is in blue, along with the supported variants.
4955

5056
{% capture example %}
5157
{% for color in site.data.theme-colors %}
52-
<div class="spinner-grow text-{{ color.name }}" role="status">Loading...</div>{% endfor %}
58+
<div class="spinner-grow text-{{ color.name }}" role="status">
59+
<span class="sr-only">Loading...</span>
60+
</div>{% endfor %}
5361
{% endcapture %}
5462
{% include example.html content=example %}
5563

@@ -62,7 +70,9 @@ Spinners in Bootstrap are built with `rem`s, `currentColor`, and `display: inlin
6270
Use [margin utilities][margin] like `.m-5` for easy spacing.
6371

6472
{% capture example %}
65-
<div class="spinner-border m-5" role="status">Loading...</div>
73+
<div class="spinner-border m-5" role="status">
74+
<span class="sr-only">Loading...</span>
75+
</div>
6676
{% endcapture %}
6777
{% include example.html content=example %}
6878

@@ -74,15 +84,17 @@ Use [flexbox utilities][flex], [float utilities][float], or [text alignment][tex
7484

7585
{% capture example %}
7686
<div class="d-flex justify-content-center">
77-
<div class="spinner-border" role="status">Loading...</div>
87+
<div class="spinner-border" role="status">
88+
<span class="sr-only">Loading...</span>
89+
</div>
7890
</div>
7991
{% endcapture %}
8092
{% include example.html content=example %}
8193

8294
{% capture example %}
8395
<div class="d-flex align-items-center">
8496
<strong>Loading...</strong>
85-
<div class="spinner-border ml-auto" role="status"></div>
97+
<div class="spinner-border ml-auto" role="status" aria-hidden="true"></div>
8698
</div>
8799
{% endcapture %}
88100
{% include example.html content=example %}
@@ -91,7 +103,9 @@ Use [flexbox utilities][flex], [float utilities][float], or [text alignment][tex
91103

92104
{% capture example %}
93105
<div class="clearfix">
94-
<div class="spinner-border float-right" role="status">Loading...</div>
106+
<div class="spinner-border float-right" role="status">
107+
<span class="sr-only">Loading...</span>
108+
</div>
95109
</div>
96110
{% endcapture %}
97111
{% include example.html content=example %}
@@ -100,7 +114,9 @@ Use [flexbox utilities][flex], [float utilities][float], or [text alignment][tex
100114

101115
{% capture example %}
102116
<div class="text-center">
103-
<div class="spinner-border" role="status">Loading...</div>
117+
<div class="spinner-border" role="status">
118+
<span class="sr-only">Loading...</span>
119+
</div>
104120
</div>
105121
{% endcapture %}
106122
{% include example.html content=example %}
@@ -110,16 +126,24 @@ Use [flexbox utilities][flex], [float utilities][float], or [text alignment][tex
110126
Add `.spinner-border-sm` and `.spinner-grow-sm` to make a smaller spinner that can quickly be used within other components.
111127

112128
{% capture example %}
113-
<div class="spinner-border spinner-border-sm" role="status">Loading...</div>
114-
<div class="spinner-grow spinner-grow-sm" role="status">Loading...</div>
129+
<div class="spinner-border spinner-border-sm" role="status">
130+
<span class="sr-only">Loading...</span>
131+
</div>
132+
<div class="spinner-grow spinner-grow-sm" role="status">
133+
<span class="sr-only">Loading...</span>
134+
</div>
115135
{% endcapture %}
116136
{% include example.html content=example %}
117137

118138
Or, use custom CSS or inline styles to change the dimensions as needed.
119139

120140
{% capture example %}
121-
<div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">Loading...</div>
122-
<div class="spinner-grow" style="width: 3rem; height: 3rem;" role="status">Loading...</div>
141+
<div class="spinner-border" style="width: 3rem; height: 3rem;" role="status">
142+
<span class="sr-only">Loading...</span>
143+
</div>
144+
<div class="spinner-grow" style="width: 3rem; height: 3rem;" role="status">
145+
<span class="sr-only">Loading...</span>
146+
</div>
123147
{% endcapture %}
124148
{% include example.html content=example %}
125149

@@ -129,21 +153,23 @@ Use spinners within buttons to indicate an action is currently processing or tak
129153

130154
{% capture example %}
131155
<button class="btn btn-primary" type="button" disabled>
132-
<span class="spinner-border spinner-border-sm" role="status">Loading...</span>
156+
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
157+
<span class="sr-only">Loading...</span>
133158
</button>
134159
<button class="btn btn-primary" type="button" disabled>
135-
<span class="spinner-border spinner-border-sm" role="status"></span>
160+
<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>
136161
Loading...
137162
</button>
138163
{% endcapture %}
139164
{% include example.html content=example %}
140165

141166
{% capture example %}
142167
<button class="btn btn-primary" type="button" disabled>
143-
<span class="spinner-grow spinner-grow-sm" role="status">Loading...</span>
168+
<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
169+
<span class="sr-only">Loading...</span>
144170
</button>
145171
<button class="btn btn-primary" type="button" disabled>
146-
<span class="spinner-grow spinner-grow-sm" role="status"></span>
172+
<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
147173
Loading...
148174
</button>
149175
{% endcapture %}

0 commit comments

Comments
 (0)