@@ -13,11 +13,8 @@ path: /catalog/input-controls/sliders/
13
13
selections from a range of values.
14
14
15
15
The MDC Slider implementation supports both single point sliders (one thumb)
16
- and range sliders (two thumbs). It is modeled after the browser's
17
- ` <input type="range"> ` element.
18
-
19
- Sliders follow accessibility best practices per the [ WAI-ARIA spec] ( https://www.w3.org/TR/wai-aria-practices/#slider )
20
- and are fully RTL-aware.
16
+ and range sliders (two thumbs). It is backed by the browser
17
+ ` <input type="range"> ` element, is fully accessible, and is RTL-aware.
21
18
22
19
## Contents
23
20
@@ -56,22 +53,24 @@ information on how to import JavaScript.
56
53
57
54
### Making sliders accessible
58
55
59
- Sliders follow the
60
- [ WAI-ARIA guidelines] ( https://www.w3.org/TR/wai-aria-practices/#slider ) .
56
+ Sliders are backed by an ` <input> ` element, meaning that they are fully
57
+ accessible. Unlike the [ ARIA-based slider] ( https://www.w3.org/TR/wai-aria-practices/#slider ) ,
58
+ MDC sliders are adjustable using touch-based assistive technologies such as
59
+ TalkBack on Android.
60
+
61
61
Per the spec, ensure that the following attributes are added to the
62
- ` mdc-slider__thumb ` element(s):
62
+ ` input ` element(s):
63
63
64
- * ` role="slider" `
65
- * ` aria-valuenow ` : Value representing the current value.
66
- * ` aria-valuemin ` : Value representing the minimum allowed value.
67
- * ` aria-valuemax ` : Value representing the maximum allowed value.
64
+ * ` value ` : Value representing the current value.
65
+ * ` min ` : Value representing the minimum allowed value.
66
+ * ` max ` : Value representing the maximum allowed value.
68
67
* ` aria-label ` or ` aria-labelledby ` : Accessible label for the slider.
69
68
70
- If the value of ` aria-valuenow ` is not user-friendly (e.g. a number to
69
+ If the value is not user-friendly (e.g. a number to
71
70
represent the day of the week), also set the following:
72
71
73
- * ` aria-valuetext ` : Set to a string that makes the slider value
74
- understandable, e.g. 'Monday'.
72
+ * ` aria-valuetext ` : Set this input attribute to a string that makes the slider
73
+ value understandable, e.g. 'Monday'.
75
74
* Add a function to map the slider value to ` aria-valuetext ` via the
76
75
` MDCSlider#setValueToAriaValueTextFn ` method.
77
76
@@ -95,15 +94,14 @@ element.
95
94
96
95
``` html
97
96
<div class =" mdc-slider" >
98
- <input class =" mdc-slider__input" type =" hidden " min =" 0" max =" 100" value =" 50" name =" volume" >
97
+ <input class =" mdc-slider__input" type =" range " min =" 0" max =" 100" value =" 50" name =" volume" aria-label = " Continuous slider demo " >
99
98
<div class =" mdc-slider__track" >
100
99
<div class =" mdc-slider__track--inactive" ></div >
101
100
<div class =" mdc-slider__track--active" >
102
101
<div class =" mdc-slider__track--active_fill" ></div >
103
102
</div >
104
103
</div >
105
- <div class =" mdc-slider__thumb" role =" slider" tabindex =" 0" aria-label =" Continuous slider demo" aria-valuemin =" 0"
106
- aria-valuemax =" 100" aria-valuenow =" 50" >
104
+ <div class =" mdc-slider__thumb" >
107
105
<div class =" mdc-slider__thumb-knob" ></div >
108
106
</div >
109
107
</div >
@@ -115,18 +113,18 @@ element.
115
113
116
114
``` html
117
115
<div class =" mdc-slider mdc-slider--range" >
118
- <input class =" mdc-slider__input" type =" hidden " min =" 0" max =" 70" value =" 30" name =" rangeStart" >
119
- <input class =" mdc-slider__input" type =" hidden " min =" 30" max =" 100" value =" 70" name =" rangeEnd" >
116
+ <input class =" mdc-slider__input" type =" range " min =" 0" max =" 70" value =" 30" name =" rangeStart" aria-label = " Continuous range slider demo " >
117
+ <input class =" mdc-slider__input" type =" range " min =" 30" max =" 100" value =" 70" name =" rangeEnd" aria-label = " Continuous range slider demo " >
120
118
<div class =" mdc-slider__track" >
121
119
<div class =" mdc-slider__track--inactive" ></div >
122
120
<div class =" mdc-slider__track--active" >
123
121
<div class =" mdc-slider__track--active_fill" ></div >
124
122
</div >
125
123
</div >
126
- <div class =" mdc-slider__thumb" role = " slider " tabindex = " 0 " aria-label = " Continuous range slider demo " aria-valuemin = " 0 " aria-valuemax = " 100 " aria-valuenow = " 30 " >
124
+ <div class =" mdc-slider__thumb" >
127
125
<div class =" mdc-slider__thumb-knob" ></div >
128
126
</div >
129
- <div class =" mdc-slider__thumb" role = " slider " tabindex = " 0 " aria-label = " Continuous range slider demo " aria-valuemin = " 0 " aria-valuemax = " 100 " aria-valuenow = " 70 " >
127
+ <div class =" mdc-slider__thumb" >
130
128
<div class =" mdc-slider__thumb-knob" ></div >
131
129
</div >
132
130
</div >
@@ -147,14 +145,14 @@ To create a discrete slider, add the following:
147
145
148
146
``` html
149
147
<div class =" mdc-slider mdc-slider--discrete" >
150
- <input class =" mdc-slider__input" type =" hidden " min =" 0" max =" 100" value =" 50" name =" volume" step =" 10" >
148
+ <input class =" mdc-slider__input" type =" range " min =" 0" max =" 100" value =" 50" name =" volume" step =" 10" aria-label = " Discrete slider demo " >
151
149
<div class =" mdc-slider__track" >
152
150
<div class =" mdc-slider__track--inactive" ></div >
153
151
<div class =" mdc-slider__track--active" >
154
152
<div class =" mdc-slider__track--active_fill" ></div >
155
153
</div >
156
154
</div >
157
- <div class =" mdc-slider__thumb" role = " slider " tabindex = " 0 " aria-label = " Discrete slider demo " aria-valuemin = " 0 " aria-valuemax = " 100 " aria-valuenow = " 50 " >
155
+ <div class =" mdc-slider__thumb" >
158
156
<div class =" mdc-slider__value-indicator-container" >
159
157
<div class =" mdc-slider__value-indicator" >
160
158
<span class =" mdc-slider__value-indicator-text" >
@@ -184,7 +182,7 @@ To add tick marks to a discrete slider, add the following:
184
182
185
183
``` html
186
184
<div class =" mdc-slider mdc-slider--discrete mdc-slider--tick-marks" >
187
- <input class =" mdc-slider__input" type =" hidden " min =" 0" max =" 100" value =" 50" name =" volume" step =" 10" >
185
+ <input class =" mdc-slider__input" type =" range " min =" 0" max =" 100" value =" 50" name =" volume" step =" 10" aria-label = " Discrete slider with tick marks demo " >
188
186
<div class =" mdc-slider__track" >
189
187
<div class =" mdc-slider__track--inactive" ></div >
190
188
<div class =" mdc-slider__track--active" >
@@ -204,7 +202,7 @@ To add tick marks to a discrete slider, add the following:
204
202
<div class =" mdc-slider__tick-mark--inactive" ></div >
205
203
</div >
206
204
</div >
207
- <div class =" mdc-slider__thumb" role = " slider " tabindex = " 0 " aria-label = " Discrete slider with tick marks demo " aria-valuemin = " 0 " aria-valuemax = " 100 " aria-valuenow = " 50 " >
205
+ <div class =" mdc-slider__thumb" >
208
206
<div class =" mdc-slider__value-indicator-container" >
209
207
<div class =" mdc-slider__value-indicator" >
210
208
<span class =" mdc-slider__value-indicator-text" >
@@ -221,15 +219,15 @@ To add tick marks to a discrete slider, add the following:
221
219
222
220
``` html
223
221
<div class =" mdc-slider mdc-slider--range mdc-slider--discrete" >
224
- <input class =" mdc-slider__input" type =" hidden " min =" 0" max =" 50" value =" 20" step =" 10" name =" rangeStart" >
225
- <input class =" mdc-slider__input" type =" hidden " min =" 20" max =" 100" value =" 50" step =" 10" name =" rangeEnd" >
222
+ <input class =" mdc-slider__input" type =" range " min =" 0" max =" 50" value =" 20" step =" 10" name =" rangeStart" aria-label = " Discrete range slider demo " >
223
+ <input class =" mdc-slider__input" type =" range " min =" 20" max =" 100" value =" 50" step =" 10" name =" rangeEnd" aria-label = " Discrete range slider demo " >
226
224
<div class =" mdc-slider__track" >
227
225
<div class =" mdc-slider__track--inactive" ></div >
228
226
<div class =" mdc-slider__track--active" >
229
227
<div class =" mdc-slider__track--active_fill" ></div >
230
228
</div >
231
229
</div >
232
- <div class =" mdc-slider__thumb" role = " slider " tabindex = " 0 " aria-label = " Discrete range slider demo " aria-valuemin = " 0 " aria-valuemax = " 100 " aria-valuenow = " 20 " >
230
+ <div class =" mdc-slider__thumb" >
233
231
<div class =" mdc-slider__value-indicator-container" >
234
232
<div class =" mdc-slider__value-indicator" >
235
233
<span class =" mdc-slider__value-indicator-text" >
@@ -239,7 +237,7 @@ To add tick marks to a discrete slider, add the following:
239
237
</div >
240
238
<div class =" mdc-slider__thumb-knob" ></div >
241
239
</div >
242
- <div class =" mdc-slider__thumb" role = " slider " tabindex = " 0 " aria-label = " Discrete range slider demo " aria-valuemin = " 0 " aria-valuemax = " 100 " aria-valuenow = " 50 " >
240
+ <div class =" mdc-slider__thumb" >
243
241
<div class =" mdc-slider__value-indicator-container" >
244
242
<div class =" mdc-slider__value-indicator" >
245
243
<span class =" mdc-slider__value-indicator-text" >
@@ -264,14 +262,14 @@ To disable a slider, add the following:
264
262
265
263
``` html
266
264
<div class =" mdc-slider mdc-slider--disabled" >
267
- <input class =" mdc-slider__input" type =" hidden " min =" 0" max =" 100" value =" 50" step =" 10" disabled name =" volume" >
265
+ <input class =" mdc-slider__input" type =" range " min =" 0" max =" 100" value =" 50" step =" 10" disabled name =" volume" aria-label = " Disabled slider demo " >
268
266
<div class =" mdc-slider__track" >
269
267
<div class =" mdc-slider__track--inactive" ></div >
270
268
<div class =" mdc-slider__track--active" >
271
269
<div class =" mdc-slider__track--active_fill" ></div >
272
270
</div >
273
271
</div >
274
- <div class =" mdc-slider__thumb" role = " slider " tabindex = " -1 " aria-label = " Disabled slider demo " aria-valuemin = " 0 " aria-valuemax = " 100 " aria-valuenow = " 50 " aria-disabled = " true " >
272
+ <div class =" mdc-slider__thumb" >
275
273
<div class =" mdc-slider__thumb-knob" ></div >
276
274
</div >
277
275
</div >
@@ -281,19 +279,17 @@ To disable a slider, add the following:
281
279
282
280
### Initialization with custom ranges and values
283
281
284
- When ` MDCSlider ` is initialized, it reads the thumb element's ` aria-valuemin ` ,
285
- ` aria-valuemax ` , and ` aria-valuenow ` attributes if present, using them to set
282
+ When ` MDCSlider ` is initialized, it reads the input element's ` min ` ,
283
+ ` max ` , and ` value ` attributes if present, using them to set
286
284
the component's internal ` min ` , ` max ` , and ` value ` properties.
287
285
288
286
Use these attributes to initialize the slider with a custom range and values,
289
287
as shown below:
290
288
291
289
``` html
292
290
<div class =" mdc-slider" >
291
+ <input class =" mdc-slider__input" aria-label =" Slider demo" min =" 0" max =" 100" value =" 75" >
293
292
<!-- ... -->
294
- <div class =" mdc-slider__thumb" role =" slider" tabindex =" 0" aria-label =" Slider demo" aria-valuemin =" 0" aria-valuemax =" 100" aria-valuenow =" 75" >
295
- <div class =" mdc-slider__thumb-knob" ></div >
296
- </div >
297
293
</div >
298
294
```
299
295
@@ -329,17 +325,19 @@ This is an example of a range slider with internal values of
329
325
330
326
``` html
331
327
<div class =" mdc-slider mdc-slider--range" >
328
+ <input class =" mdc-slider__input" type =" range" min =" 0" max =" 70" value =" 30" name =" rangeStart" aria-label =" Range slider demo" >
329
+ <input class =" mdc-slider__input" type =" range" min =" 30" max =" 100" value =" 70" name =" rangeEnd" aria-label =" Range slider demo" >
332
330
<div class =" mdc-slider__track" >
333
331
<div class =" mdc-slider__track--inactive" ></div >
334
332
<div class =" mdc-slider__track--active" >
335
333
<div class =" mdc-slider__track--active_fill"
336
334
style =" transform :scaleX (.4 ); left :30% " ></div >
337
335
</div >
338
336
</div >
339
- <div class =" mdc-slider__thumb" role = " slider " tabindex = " 0 " aria-label = " Range slider demo " aria-valuemin = " 0 " aria-valuemax = " 100 " aria-valuenow = " 30 " style =" left :calc (30% -24px )" >
337
+ <div class =" mdc-slider__thumb" style =" left :calc (30% -24px )" >
340
338
<div class =" mdc-slider__thumb-knob" ></div >
341
339
</div >
342
- <div class =" mdc-slider__thumb" role = " slider " tabindex = " 0 " aria-label = " Range slider demo " aria-valuemin = " 0 " aria-valuemax = " 100 " aria-valuenow = " 70 " style =" left :calc (70% -24px )" >
340
+ <div class =" mdc-slider__thumb" style =" left :calc (70% -24px )" >
343
341
<div class =" mdc-slider__thumb-knob" ></div >
344
342
</div >
345
343
</div >
0 commit comments