aboutsummaryrefslogtreecommitdiff
path: root/files/zh-cn/web/html/element/input/range/index.html
blob: 36749a861a80ed13d45a494bd237501b04ddc1d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
---
title: <input type="range">
slug: Web/HTML/Element/input/range
tags:
  - HTML
  - 元素
  - 参考
  - 网页
  - 范围
translation_of: Web/HTML/Element/input/range
original_slug: Web/HTML/Element/Input/范围
---
<div>{{HTMLRef}}</div>

<p><span class="seoSummary">{{HTMLElement("input")}}  <strong><code>range</code></strong> 类型的元素允许用户指定一个数值,该数值必须不小于给定值,并且不得大于另一个给定值。但是,精确值并不重要。通常使用滑块或拨号控件而不是像 {{HTMLElement('input/number', 'number')}}  输入类型这样的文本输入框来表示。</span> 由于这种小部件不精确,因此除非控件的确切值不重要,否则通常不应使用它。</p>

<div>{{EmbedInteractiveExample("pages/tabbed/input-range.html", "tabbed-standard")}}</div>

<p class="hidden">该交互式示例的源存储在GitHub存储库中。 如果您想为交互式示例项目做出贡献,请克隆 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> 并向我们发送请求请求。</p>

<p>如果用户的浏览器不支持类型范围,它将回退并将其视为 <code>{{HTMLElement('input/text', 'text')}}</code> 输入。</p>

<table class="properties">
 <tbody>
  <tr>
   <td><strong>{{anch("Value")}}</strong></td>
   <td>A {{domxref("DOMString")}} containing the string representation of the selected numeric value; use {{domxref("HTMLInputElement.valueAsNumber", "valueAsNumber")}} to get the value as a {{jsxref("Number")}}.</td>
  </tr>
  <tr>
   <td><strong>事件</strong></td>
   <td>{{event("change")}} and {{event("input")}}</td>
  </tr>
  <tr>
   <td><strong>支持的常用属性</strong></td>
   <td>{{htmlattrxref("autocomplete", "input")}}, {{htmlattrxref("list", "input")}}, {{htmlattrxref("max", "input")}}, {{htmlattrxref("min", "input")}}, and {{htmlattrxref("step", "input")}}</td>
  </tr>
  <tr>
   <td><strong>IDL属性</strong></td>
   <td><code>list</code>, <code>value</code>, 和 <code>valueAsNumber</code></td>
  </tr>
  <tr>
   <td><strong>方法</strong></td>
   <td>{{domxref("HTMLInputElement.stepDown", "stepDown()")}} and {{domxref("HTMLInputElement.stepUp", "stepUp()")}}</td>
  </tr>
 </tbody>
</table>

<h3 id="验证方式">验证方式</h3>

<p>没有可用的模式验证。 但是,执行以下形式的自动验证:</p>

<ul>
 <li>如果将 {{htmlattrxref("value", "input")}} 设置为无法转换为有效浮点数的值,则验证将失败,因为输入正遭受错误的输入。</li>
 <li>该值不得小于 {{htmlattrxref("min", "input")}}. 默认值为0。</li>
 <li>该值将不大于 {{htmlattrxref("max", "input")}}.  默认值为100。</li>
 <li>该值将是 {{htmlattrxref("step", "input")}}.  预设值为1。</li>
</ul>

<h3 id="值"></h3>

<p>{{htmlattrxref("value", "input")}} 属性包含一个 {{domxref("DOMString")}} 该属性包含所选数字的字符串表示形式。 该值绝不能为空字符串 (<code>""</code>).  默认值介于指定的最小值和最大值之间,除非最大值实际上小于最小值,在这种情况下,默认值设置 <code>min</code> 属性的值。确定默认值的算法是:</p>

<pre class="brush: js notranslate">defaultValue = (rangeElem.max &lt; rangeElem.min) ? rangeElem.min
               : rangeElem.min + (rangeElem.max - rangeElem.min)/2;</pre>

<p>如果尝试将值设置为小于最小值,则将其设置为最小值。 类似地,尝试将值设置为大于最大值会导致将其设置为最大值。</p>

<h2 id="其他属性">其他属性</h2>

<p>除了所有 {{HTMLElement("input")}} 元素共享的属性之外,范围输入还提供以下属性:</p>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">属性</th>
   <th scope="col">描述</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>{{anch("list")}}</code></td>
   <td>&lt;datalist&gt;元素的ID,其中包含可选的预定义选项</td>
  </tr>
  <tr>
   <td><code>{{anch("max")}}</code></td>
   <td>最大允许值</td>
  </tr>
  <tr>
   <td><code>{{anch("min")}}</code></td>
   <td>最小允许值</td>
  </tr>
  <tr>
   <td><code>{{anch("step")}}</code></td>
   <td>步进间隔,用于用户界面和验证目的</td>
  </tr>
 </tbody>
</table>

<p id="htmlattrdeflist">{{page("/en-US/docs/Web/HTML/Element/input/text", "list", 0, 1, 2)}}</p>

<p>有关在支持的浏览器中如何表示范围中的选项的示例,请参见下面的<a href="#A_range_control_with_hash_marks">带散列的标记范围控制</a></p>

<h3 id="htmlattrdefmax">{{htmlattrdef("max")}}</h3>

<p>允许值范围内的最大值。 如果输入到元素中的{{htmlattrxref("value", "input")}}超过此值,则元素将无法通过<a href="/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation">约束验证</a>。  如果 <code><a href="/en-US/docs/Web/HTML/Attributes/max">max</a></code> 属性的值不是数字,则元素没有最大值。</p>

<p>此值必须大于或等于min属性的值。 请参见 <a href="/en-US/docs/Web/HTML/Attributes/max">HTML <code>max</code></a><code>属性。</code></p>

<h3 id="htmlattrdefmin">{{htmlattrdef("min")}}</h3>

<p>允许值范围内的最小值。 如果元素的{{htmlattrxref("value", "input")}} 小于此值,则该元素将无法通过 <a href="/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation">约束验证</a>。如果为<code>min</code> 指定的值不是有效数字,则输入没有最小值。</p>

<p>该值必须小于或等于max属性的值。 请参见 <a href="/en-US/docs/Web/HTML/Attributes/min">HTML <code>min</code>属性</a></p>

<h3 id="htmlattrdefstep">{{htmlattrdef("step")}}</h3>

<p>{{page("/en-US/docs/Web/HTML/Element/input/number", "step-include")}}</p>

<p><code>range</code> 输入的默认步进值为1,除非步进基数不是整数,否则仅允许输入整数;否则,默认值为1。 例如,如果将 <code>min</code> 设置为-10并将 <code>value</code> 设置为1.5,则1的 <code>step</code> 将只允许正方向上的值为1.5、2.5、3.5,...,以及-0.5,-1.5,-2.5等。 ..朝负面方向发展。 请参阅<a href="/en-US/docs/Web/HTML/Attributes/step">HTML <code>step</code> 属性</a></p>

<h3 id="非标准属性">非标准属性</h3>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">属性</th>
   <th scope="col">描述</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td><code>{{anch("orient")}}</code></td>
   <td>设置范围滑块的方向。 <strong>仅限Firefox .</strong></td>
  </tr>
 </tbody>
</table>

<dl>
 <dt>{{htmlattrdef("orient")}} {{non-standard_inline}}</dt>
 <dd id="orient-include">类似于-moz-orient非标准CSS属性会影响 {{htmlelement('progress')}}{{htmlelement('meter')}} 元素, <code>orient</code> 属性定义范围滑块的方向。 值包括 <code>horizontal</code>, 表示范围是水平呈现, 和 <code>vertical</code>, 其中范围是垂直呈现)。</dd>
</dl>

<div class="blockIndicator note">
<p>注意:以下输入属性不适用于输入范围:<code>accept</code>, <code>alt</code>, <code>checked</code>, <code>dirname</code>, <code>formaction</code>, <code>formenctype</code>, <code>formmethod</code>, <code>formnovalidate</code>, <code>formtarget</code>,高度, <code>maxlength</code>, <code>minlength</code>, <code>multiple</code>, <code>pattern</code>, <code>placeholder</code>, <code>readonly</code>, <code>required</code>, <code>size</code>, <code>src</code>, 和 <code>width</code>. 这些属性中的任何一个(如果包含)将被忽略。</p>
</div>

<h2 id="例子">例子</h2>

<p>虽然 <code>number</code> 类型允许用户输入带有可选约束的数字,以强制其值介于最小值和最大值之间,但它确实要求他们输入特定值。 <code>range</code> 输入类型使您可以在用户甚至不关心或不知道所选的特定数字值是什么的情况下,向用户询问一个值。</p>

<p>常用范围输入的一些情况示例:</p>

<ul>
 <li>音频控件(例如音量和平衡)或过滤器控件。</li>
 <li>颜色配置控件,例如颜色通道,透明度,亮度等。</li>
 <li>游戏配置控件,例如难度,可见性距离,世界范围等等。</li>
 <li>密码管理员生成的密码的密码长度。</li>
</ul>

<p>通常,如果用户对最小值和最大值之间的距离的百分比比实际数字本身更感兴趣,则范围输入是一个不错的选择。 例如,在家庭立体声音量控制的情况下,用户通常认为“将音量设置为最大音量的一半”而不是“将音量设置为0.5”。</p>

<h3 id="指定最小和最大">指定最小和最大</h3>

<p>默认情况下,最小值为0,最大值为100。如果这不是您想要的值,则可以通过更改 {{htmlattrxref("min", "input")}} 和/或 {{htmlattrxref("max", "input")}} 属性。 这些可以是任何浮点值。</p>

<p>例如,要要求用户输入介于-10和10之间的值,可以使用:</p>

<pre class="brush: html notranslate">&lt;input type="range" min="-10" max="10"&gt;</pre>

<p>{{EmbedLiveSample("Specifying_the_minimum_and_maximum", 600, 40)}}</p>

<h3 id="设置值的粒度">设置值的粒度</h3>

<p>默认情况下,粒度为1,表示该值始终是整数。 您可以更改 {{htmlattrxref("step")}} 属性以控制粒度。 例如,如果您需要一个介于5到10之间的值(精确到两位小数),则应将 <code>step</code> 的值设置为0.01:</p>

<div id="Granularity_sample1">
<pre class="brush: html notranslate">&lt;input type="range" min="5" max="10" step="0.01"&gt;</pre>

<p>{{EmbedLiveSample("Granularity_sample1", 600, 40)}}</p>
</div>

<p>如果要接受任何值而不论扩展到小数点后多少位,都可以为{{htmlattrxref("step", "input")}} 属性指定 <code>any</code> 数值。</p>

<div id="Granularity_sample2">
<pre class="brush: html notranslate">&lt;input type="range" min="0" max="3.14" step="any"&gt;</pre>

<p>{{EmbedLiveSample("Granularity_sample2", 600, 40)}}</p>

<p>该示例使用户可以选择0到π之间的任何值,而对所选值的小数部分没有任何限制。</p>
</div>

<h3 id="添加井号和标签">添加井号和标签</h3>

<p>HTML规范使浏览器在如何显示范围控件方面具有一定的灵活性。 在散列标记和较小程度上的标签方面,这种灵活性最明显。 该规范描述了如何使用 {{htmlattrxref("list", "input")}} 属性和 {{HTMLElement("datalist")}} 元素将自定义点添加到范围控件,但没有任何要求或 甚至是沿控件长度的标准化哈希或刻度线的建议。</p>

<h4 id="范围控制模型">范围控制模型</h4>

<p>由于浏览器具有这种灵活性,并且迄今为止都不支持HTML为范围控件定义的所有功能,因此以下是一些模型,以向您展示在支持它们的浏览器中在macOS上可以得到的功能。</p>

<h5 id="无装饰的范围控制">无装饰的范围控制</h5>

<p>如果不指定 {{htmlattrxref("list", "input")}} 属性,或者浏览器不支持该属性,则会得到此结果。</p>

<table class="fullwidth standard-table">
 <tbody>
  <tr>
   <th>HTML</th>
   <th>例子</th>
  </tr>
  <tr>
   <td rowspan="4">
    <pre class="brush: html notranslate">
&lt;input type="range"&gt;</pre>
   </td>
   <th>屏幕截图</th>
  </tr>
  <tr>
   <td><img alt="Screenshot of a plain slider control on macOS" src="https://mdn.mozillademos.org/files/14989/macslider-plain.png" style="height: 28px; width: 184px;"></td>
  </tr>
  <tr>
   <th>留存</th>
  </tr>
  <tr>
   <td>{{EmbedLiveSample("An_unadorned_range_control",200,55,"","", "nobutton")}}</td>
  </tr>
 </tbody>
</table>

<h5 id="带散列标记的范围控件">带散列标记的范围控件</h5>

<p>此范围控件使用的 <code>list</code> 属性指定{{HTMLElement("datalist")}} 的ID,该ID定义了控件上的一系列带散列的标记。 其中有11个,因此在0%和每个10%标记处都有一个。 每个点均使用 {{HTMLElement("option")}} 元素表示,其元素 {{htmlattrxref("value", "option")}} 设置为应绘制标记的范围值。</p>

<table class="fullwidth standard-table">
 <tbody>
  <tr>
   <th>HTML</th>
   <th>例子</th>
  </tr>
  <tr>
   <td rowspan="4">
    <pre class="brush: html notranslate">
&lt;input type="range" list="tickmarks"&gt;

&lt;datalist id="tickmarks"&gt;
  &lt;option value="0"&gt;&lt;/option&gt;
  &lt;option value="10"&gt;&lt;/option&gt;
  &lt;option value="20"&gt;&lt;/option&gt;
  &lt;option value="30"&gt;&lt;/option&gt;
  &lt;option value="40"&gt;&lt;/option&gt;
  &lt;option value="50"&gt;&lt;/option&gt;
  &lt;option value="60"&gt;&lt;/option&gt;
  &lt;option value="70"&gt;&lt;/option&gt;
  &lt;option value="80"&gt;&lt;/option&gt;
  &lt;option value="90"&gt;&lt;/option&gt;
  &lt;option value="100"&gt;&lt;/option&gt;
&lt;/datalist&gt;
</pre>
   </td>
   <th>屏幕截图</th>
  </tr>
  <tr>
   <td><img alt="Screenshot of a plain slider control on macOS" src="https://mdn.mozillademos.org/files/14991/macslider-ticks.png" style="height: 28px; width: 184px;"></td>
  </tr>
  <tr>
   <th>留存</th>
  </tr>
  <tr>
   <td>{{EmbedLiveSample("A_range_control_with_hash_marks_and_labels",200,55,"","", "nobutton")}}</td>
  </tr>
 </tbody>
</table>

<h5 id="具有散列标记和标签的范围控件">具有散列标记和标签的范围控件</h5>

<p>您可以通过向 {{htmlattrxref("label", "option")}} 元素添加 {{HTMLElement("option")}} 属性来将标签添加到您的范围控件中,这些元素对应于您希望为其添加标签的标记。</p>

<table class="fullwidth standard-table">
 <tbody>
  <tr>
   <th>HTML</th>
   <th>例子</th>
  </tr>
  <tr>
   <td rowspan="4">
    <pre class="brush: html notranslate">
&lt;input type="range" list="tickmarks"&gt;

&lt;datalist id="tickmarks"&gt;
  &lt;option value="0" label="0%"&gt;&lt;/option&gt;
  &lt;option value="10"&gt;&lt;/option&gt;
  &lt;option value="20"&gt;&lt;/option&gt;
  &lt;option value="30"&gt;&lt;/option&gt;
  &lt;option value="40"&gt;&lt;/option&gt;
  &lt;option value="50" label="50%"&gt;&lt;/option&gt;
  &lt;option value="60"&gt;&lt;/option&gt;
  &lt;option value="70"&gt;&lt;/option&gt;
  &lt;option value="80"&gt;&lt;/option&gt;
  &lt;option value="90"&gt;&lt;/option&gt;
  &lt;option value="100" label="100%"&gt;&lt;/option&gt;
&lt;/datalist&gt;
</pre>
   </td>
   <th>屏幕截图</th>
  </tr>
  <tr>
   <td><img alt="Screenshot of a plain slider control on macOS" src="https://mdn.mozillademos.org/files/14993/macslider-labels.png" style="height: 44px; width: 184px;"></td>
  </tr>
  <tr>
   <th>留存</th>
  </tr>
  <tr>
   <td>{{EmbedLiveSample("A_range_control_with_hash_marks_and_labels",200,55,"","", "nobutton")}}</td>
  </tr>
 </tbody>
</table>

<div class="note">
<p><strong>注意</strong>: 目前没有浏览器完全支持这些特性。例如,Firefox根本不支持散列标记和标签,而Chrome支持散列标记,但不支持标签。Chrome的66版本(66.0.3359.181)支持标签,但是 {{htmlelement("datalist")}} 标签必须使用CSS样式,因为它的 {{cssxref("display")}}属性默认设置为 <code>none</code> ,隐藏了标签。</p>
</div>

<h3 id="改变方向">改变方向</h3>

<div class="xhidden">
<p>使旋钮向左和向右滑动。 如果支持,我们将能够声明垂直高度,并通过声明高度值大于宽度值来使用CSS上下滑动。 任何主要的浏览器实际上尚未实现此功能。(请参阅{{bug(981916)}}, <a href="https://bugs.chromium.org/p/chromium/issues/detail?id=341071">Chrome bug 341071</a>)。也许它仍在讨论中。</p>

<p>同时,我们可以通过使用CSS变换旋转范围来使范围垂直,或者通过使用各自的方法定位每个浏览器引擎,包括通过将 {{cssxref('appearance')}} 设置为 <code>slider-vertical</code>, 在Firefox中使用非标准的<code>orient</code> 属性,或通过更改Internet Explorer和Edge的文本方向。</p>

<p>考虑以下范围控制:</p>

<div id="Orientation_sample1">
<pre class="brush: html notranslate">&lt;input type="range" id="volume" min="0" max="11" value="7" step="1"&gt;</pre>
</div>

<p>{{EmbedLiveSample("Orientation_sample1", 200, 200, "https://mdn.mozillademos.org/files/14983/Orientation_sample1.png")}}</p>

<p>此控件是水平的(至少对大多数主要浏览器(至少,如果不是全部);其他控件可能有所不同)。</p>

<h3 id="标准">标准</h3>

<p>根据规范,使其垂直需要添加CSS来更改控件的尺寸,以使其比宽度高,如下所示:</p>

<div id="Orientation_sample2">
<h4 id="CSS">CSS</h4>

<pre class="brush: css notranslate">#volume {
  height: 150px;
  width: 50px;
}</pre>

<h4 id="HTML">HTML</h4>

<pre class="brush: html notranslate">&lt;input type="range" id="volume" min="0" max="11" value="7" step="1"&gt;</pre>

<h4 id="结果">结果</h4>

<p>{{EmbedLiveSample("Orientation_sample2", 200, 200, "https://mdn.mozillademos.org/files/14985/Orientation_sample2.png")}}</p>
</div>
</div>

<p>不幸的是,当前没有主流浏览器直接支持垂直范围控件。</p>

<h3 id="变换:旋转(-90deg)">变换:旋转(-90deg)</h3>

<p>但是,您可以通过在侧面绘制水平范围控件来创建垂直范围控件。 最简单的方法是使用CSS:通过应用 {{cssxref("transform")}} 旋转元素,可以使其垂直。 让我们来看看。</p>

<h4 id="HTML_2">HTML</h4>

<p>需要更新HTML,以将 {{HTMLElement("input")}} 包裹在 {{HTMLElement("div")}} 中,以便我们在执行转换后纠正布局(因为转换不会自动影响 页面的布局):</p>

<pre class="brush: html notranslate">&lt;div class="slider-wrapper"&gt;
  &lt;input type="range" min="0" max="11" value="7" step="1"&gt;
&lt;/div&gt;</pre>

<h4 id="CSS_2">CSS</h4>

<p>现在我们需要一些CSS。 首先是包装器本身的CSS; 这指定了我们想要的显示模式和大小,以便页面正确布局; 本质上,它是为滑块保留页面的区域,以便旋转的滑块适合保留的空间而不会造成混乱。</p>

<pre class="brush: css notranslate">.slider-wrapper {
  display: inline-block;
  width: 20px;
  height: 150px;
  padding: 0;
}
</pre>

<p>然后是保留空间中 <code>&lt;input&gt;</code> 元素的样式信息:</p>

<pre class="brush: css notranslate">.slider-wrapper input {
  width: 150px;
  height: 20px;
  margin: 0;
  transform-origin: 75px 75px;
  transform: rotate(-90deg);
}</pre>

<p>控件的大小设置为150像素长x 20像素高。 边距设置为0, {{cssxref("transform-origin")}} 移至滑块旋转通过的空间的中间; 由于滑块配置为150像素宽,因此它将旋转通过每边150像素的框。 在每个轴上将原点偏移75像素,这意味着我们将围绕该空间的中心旋转。 最后,我们将逆时针旋转90°。 结果:旋转一个范围输入,因此最大值在顶部,最小值在底部。</p>

<p>{{EmbedLiveSample("transform_rotate-90deg", 200, 200, "https://mdn.mozillademos.org/files/14987/Orientation_sample3.png")}}</p>

<h3 id="外观特性">外观特性</h3>

<p>{{cssxref('appearance')}}属性具有非标准值的<code>slider-vertical</code>可以使滑块垂直。</p>

<h4 id="HTML_3">HTML</h4>

<p>我们使用与前面的示例相同的HTML:</p>

<pre class="brush: html notranslate">&lt;input type="range" min="0" max="11" value="7" step="1"&gt;
</pre>

<h4 id="CSS_3">CSS</h4>

<p>我们仅针对具有范围类型的输入:</p>

<pre class="brush: css notranslate">input[type="range"] {
  -webkit-appearance: slider-vertical;
}</pre>

<p>{{EmbedLiveSample("appearance_property", 200, 200)}}</p>

<h3 id="定向属性">定向属性</h3>

<p>仅在Firefox中,有一个非标准的 <code>orient</code> 属性。</p>

<h4 id="HTML_4">HTML</h4>

<p>使用与前面示例类似的HTML,我们添加属性值为 <code>vertical</code>:</p>

<pre class="brush: html notranslate">&lt;input type="range" min="0" max="11" value="7" step="1" orient="vertical"&gt;
</pre>

<p>{{EmbedLiveSample("orient_attribute", 200, 200)}}</p>

<h3 id="写作模式:bt-lr">写作模式:bt-lr;</h3>

<p>The {{cssxref('writing-mode')}} 属性通常不应用于出于国际化或本地化目的更改文本方向,而可以用于特殊效果。</p>

<h4 id="HTML_5">HTML</h4>

<p>我们使用与前面的示例相同的HTML:</p>

<pre class="brush: html notranslate">&lt;input type="range" min="0" max="11" value="7" step="1"&gt;
</pre>

<h4 id="CSS_4">CSS</h4>

<p>我们仅以范围为类型的输入作为目标,将写入模式从默认更改为 <code>bt-lr</code>, 或从下至上和从左至右:</p>

<pre class="brush: css notranslate">input[type="range"] {
  writing-mode: bt-lr;
}</pre>

<p>{{EmbedLiveSample("writing-mode_bt-lr", 200, 200)}}</p>

<h3 id="放在一起">放在一起</h3>

<p>由于上述每个示例都在不同的浏览器中工作,因此您可以将所有示例放在一个示例中,以使其在跨浏览器中工作:</p>

<h4 id="HTML_6">HTML</h4>

<p>对于Firefox,我们将<code>orient</code>属性的值保持为<code>vertical:</code></p>

<pre class="brush: html notranslate">&lt;input type="range" min="0" max="11" value="7" step="1" orient="vertical"&gt;
</pre>

<h4 id="CSS_5">CSS</h4>

<p>对于Edge和Internet Explorer,我们仅将输入类型作为目标,将写入模式从默认更改为 <code>bt-lr</code>, 或者从下至上,从左至右,然后添加 <code>-webkit-appearance: slider-vertical</code>用于所有基于-webkit的浏览器:</p>

<pre class="brush: css notranslate">input[type="range"] {
  writing-mode: bt-lr;
  -webkit-appearance: slider-vertical;
}</pre>

<p>{{EmbedLiveSample("Putting_it_all_together", 200, 200)}}</p>

<h2 id="技术指标">技术指标</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">规格</th>
   <th scope="col">状态</th>
   <th scope="col">评论</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName('HTML WHATWG', 'forms.html#range-state-(type=range)', '&lt;input type="range"&gt;')}}</td>
   <td>{{Spec2('HTML WHATWG')}}</td>
   <td>最初的定义</td>
  </tr>
  <tr>
   <td>{{SpecName('HTML5.1', 'sec-forms.html#range-state-typerange', '&lt;input type="range"&gt;')}}</td>
   <td>{{Spec2('HTML5.1')}}</td>
   <td>最初的定义</td>
  </tr>
 </tbody>
</table>

<h2 id="浏览器兼容性">浏览器兼容性</h2>

<p>{{Compat("html.elements.input.input-range")}}</p>

<h2 id="另请参考">另请参考</h2>

<ul>
 <li><a href="/en-US/docs/Learn/HTML/Forms">HTML 表单</a></li>
 <li>{{HTMLElement("input")}} and the {{domxref("HTMLInputElement")}} interface it's based upon</li>
 <li><code><a href="/en-US/docs/Web/HTML/Element/input/number">&lt;input type="number"&gt;</a></code></li>
 <li>{{domxref('validityState.rangeOverflow')}} and {{domxref('validityState.rangeUnderflow')}}</li>
 <li><a href="/en-US/docs/Web/API/Web_Audio_API/Controlling_multiple_parameters_with_ConstantSourceNode">使用ConstantSourceNode控制多个参数</a></li>
 <li><a href="https://css-tricks.com/sliding-nightmare-understanding-range-input">设置范围元素的样式</a></li>
</ul>