- Форма css с ползунком
- Валидация
- Дополнительные атрибуты
- list
- max
- min
- step
- Не стандартные атрибуты
- Examples
- Указание минимума и максимума
- Настройка детализации значения
- Добавление хэш-меток и лейблов
- Макеты контроллера диапазона
- Изменение ориентации
- Standards
- CSS
- HTML
- Результат
- transform: rotate(-90deg)
- HTML
- CSS
- appearance property
- HTML
- CSS
- orient attribute
- HTML
- writing-mode: bt-lr
- HTML
- CSS
- Все вместе
- HTML
- CSS
- Спецификации
- Поддержка браузерами
- Смотрите также
- Found a content problem with this page?
- MDN
- Support
- Our communities
- Developers
Форма css с ползунком
Если используемый браузер не поддерживает тип range , он будет отображаться как input text (en-US).
Value | DOMString , содержащий строковое представление выбранного числового значения; используйте valueAsNumber чтобы получить значение Number . |
---|---|
События | change (en-US) и input (en-US) |
Поддерживаемые общие атрибуты | autocomplete , list , max , min , and step |
IDL атрибуты | list , value , и valueAsNumber |
Методы | stepDown() (en-US) и stepUp() (en-US) |
Валидация
Для этого поля нет доступного паттерна валидации, но следующая валидация реализованы следующие проверки
- Если значение value содержит что-то что не может быть конвертированно в число с плавающей точкой, произойдёт ошибка некорректного ввода.
- Значение не может быть меньше чем min . По умолчанию: 0.
- Значение не может быть больше чем max . По умолчанию: 100.
- Значение должно кратно step . По умолчанию: 1.
Атрибут value содержит DOMString , который содержит строковое представление выбранного числа. Значение никогда не является пустой строкой ( «» ). Значение, по умолчанию, находится посередине, между указанными минимальным и максимальным значениями — если максимум оказывается меньше минимума, то значение по умолчанию приравнивается к значению атрибута min . Алгоритм определения значения по умолчанию:
= (rangeElem.max rangeElem.min) ? rangeElem.min : rangeElem.min + (rangeElem.max - rangeElem.min)/2;
Если предпринята попытка установить значение меньше минимального, то оно примет значение атрибута min. Аналогично, попытка установить значение больше максимального, приведёт к установлению значения равного атрибуту max.
Дополнительные атрибуты
В дополнение к атрибутам, общим для всех элементов , range инпуты предлагают следующие атрибуты:
Attribute | Description |
---|---|
list | id элемента , который содержит предопределённые значение (не обязательно) |
max | Максимальное допустимое значение |
min | Минимальное допустимое значение |
step | Шаговый, используемый для пользовательского интерфейса и для проверки |
list
The values of the list attribute is the id of a element located in the same document. The provides a list of predefined values to suggest to the user for this input. Any values in the list that are not compatible with the type are not included in the suggested options. The values provided are suggestions, not requirements: users can select from this predefined list or provide a different value.
Смотрите управление диапазоном с помощью решётки ниже, для примера того, как параметры диапазона обозначаются в поддерживаемых браузерах.
max
Это значение должно быть больше или равно значению атрибута min .
min
Наименьшее значение в диапазоне допустимых значений. Если value , введённый в элемент, меньше этого значения, то элемент не проходит проверку ограничения (en-US) . Если значение атрибута min не является числом, то элемент не имеет максимального значения.
Это значение должно быть меньше или равно значению атрибута max .
step
По умолчанию шаг для инпута с типом range равен 1, допустим ввод только целых чисел, если база шага не является целым; например, если вы установили min на -10 и value на 1.5, то step 1 позволит только такие значения как 1.5, 2.5, 3.5. в положительном направлении и -0.5, -1.5, -2.5. в отрицательном направлении.
Не стандартные атрибуты
Attribute | Description |
---|---|
orient | Устанавливает ориентацию слайдера. Firefox only. |
orient Non-standard
Примечание: Note: Следующие атрибуты не применимы: accept , alt , checked , dirname , formaction , formenctype , formmethod , formnovalidate , formtarget , height , maxlength , minlength , multiple , pattern , placeholder , readonly , required , size , src , и width . Каждый из них будет проигнорирован в случае употребления.
Examples
Пока тип number позволяет пользователям вводить число с дополнительными ограничениями, заставляя их значения находиться между максимальным и минимальным, он требует, чтобы они вводили определённое значение. Инпут с типом range позволяет вам запрашивать у пользователя значение в тех случаях, когда пользователь не может даже знать — каково выбранное конкретное числовое значение.
Несколько примеров основный ситуаций, в которых инпуты с range используются:
- Аудио-контроллеры громкости и баланса, или контроллеры фильтра.
- Контроллеры настройки цвета, такие как цветовые каналы, прозрачность, яркость, и т.д.
- Контроллеры игровой настройки, такие как сложность, дальность видимости, размер мира и т.д.
- Длина пароля для сгенерированных паролей менеджера паролей.
Как правило, если пользователь в большей степени интересуется процентным значением между минимумом и максимумом, нежели реальным значением, range инпут является отличным решением. Например, в случае с контролем громкости домашнего стерео, обычно пользователь думает «установить громкости наполовину максимума» вместо «установить громкость на 0.5».
Указание минимума и максимума
По умолчанию, минимум равен 0, а максимум равен 100. Если вас это не устраивает, вы можете с лёгкостью указать другие границы, изменив значения атрибутов min и/или max . Они могут быть принимать любые значения с плавающей точкой.
Например, указать диапазон значений между -10 и 10, вы можете, используя:
input type="range" min="-10" max="10">
Настройка детализации значения
По умолчанию, степень детализации равна 1, тем самым показывая, что значение всегда является целым числом. Вы можете изменить атрибут step контроля степени детализации. Например, если вам нужно значение между 5 и 10, с точностью до двух знаков после запятой, вы должны установить значение step на 0.01:
input type="range" min="5" max="10" step="0.01">
Если вы хотите принять любое значение, независимо от разрядности, вы можете указать значение any для атрибута step :
input type="range" min="0" max="3.14" step="any">
Этот пример позволяет пользователю выбрать любое значение между 0 и π без ограничений на разрядность.
Добавление хэш-меток и лейблов
Спецификация HTML даёт браузерам некоторую гибкость при представлении диапазонных контроллеров. Нигде эта гибкость не проявляется больше, чем в области хэш-меток и, в меньшей степени, лейблов. Спецификация описывает как добавлять кастомные точки контроллера диапазона, используя атрибут list и элемент , но не имеет требований или рекомендаций по стандартизации хэш-меток и лейблов по длине контроллера.
Макеты контроллера диапазона
Так как браузеры имеют эту гибкость, и на сегодняшний день ни один из них не поддерживает все возможности, определённые HTML, представляем несколько макетов, показывающих как вы можете получить на macOS в браузере, который их поддерживает.
Недекорированный контроллер диапазона
Этот результат вы получите, если не укажите атрибут list , или браузер не будет его поддерживать.
Контроллер диапазона с хэш-метками
input type="range" list="tickmarks"> datalist id="tickmarks"> option value="0"> option value="10"> option value="20"> option value="30"> option value="40"> option value="50"> option value="60"> option value="70"> option value="80"> option value="90"> option value="100"> datalist>
Контроллер диапазона с хэш-метками и лейблами
Вы можете добавить лейблы в свой контроллер диапазонов, добавив атрибут label элементам , соответствующим значениям, на которых вы бы хотели видеть лейблы.
input type="range" list="tickmarks"> datalist id="tickmarks"> option value="0" label="0%"> option value="10"> option value="20"> option value="30"> option value="40"> option value="50" label="50%"> option value="60"> option value="70"> option value="80"> option value="90"> option value="100" label="100%"> datalist>
Примечание: В настоящее время ни один браузер полностью не поддерживает эти возможности. Firefox не поддерживает хэш-метки и лейблы, например, в то время как Chrome поддерживает хэш-метки, но не поддерживает лейблы. Версия 66 (66.0.3359.181) Chrome поддерживает лейблы, но тэг должен быть стилизован с помощью CSS, так как его свойство display по умолчанию — none , тем самым скрывая лейблы.
Изменение ориентации
По умолчанию, если браузер отображает инпут диапазона как слайдер, он отобразит его так чтоб ползунок ездил в право и в лево. Когда поддержка браузерами будет реализовано, можно будет делать слайдер вертикальным, так чтобы ползунок мог ездить вверх и вниз. Ни один из наиболее используемых браузеров не имплементировал это пока. (Firefox баг 981916, Chrome bug 341071). также, возможно, следующий баг под вопросом.
В реальности, мы можем сделать слайдер вертикальным используя CSS трансформации, или применяя уникальный метод для каждого браузера в отдельности, включая: настройки appearance для slider-vertical , использование нестандартной ориентации orient в Firefox,или изменение text direction для Internet Explorer и Edge
Рассмотрим контроллер диапазона:
input type="range" id="volume" min="0" max="11" value="7" step="1">
Это горизонтальный контроллер (по крайне мере на большинстве основных браузеров, другие могут отличаться).
Standards
Следуя спецификации, сделать его вертикальным также просто как добавить CSS, чтобы изменить размеры контроллера, чтобы его высота оказалась больше ширины:
CSS
#volume height: 150px; width: 50px; >
HTML
input type="range" id="volume" min="0" max="11" value="7" step="1">
Результат
К сожалению, большинство браузеров сейчас не поддерживают вертикальные контроллы напрямую.
transform: rotate(-90deg)
Но вы, всё же, можете сделать вертикальный контролл используя горизонтальный контролл. Самый простой способ — использовать CSS: применяя transform для поворота элемента на 90 градусов. Посмотрим:
HTML
div class="slider-wrapper"> input type="range" min="0" max="11" value="7" step="1"> div>
CSS
Теперь нам нужно немного CSS. Во-первых, это CSS для самой обёртки; это указание дисплея и размеров для правильного расположения на странице; по сути, он резервирует область страницы для слайдера, так, чтобы можно было поместить повёрнутый слайдер в зарезервированном пространстве, не создавая беспорядка.
.slider-wrapper display: inline-block; width: 20px; height: 150px; padding: 0; >
Затем информация о стиле элемента в зарезервированном пространстве:
.slider-wrapper input width: 150px; height: 20px; margin: 0; transform-origin: 75px 75px; transform: rotate(-90deg); >
Размеры контроллера это набор из 150 пикселей длины и 20 пикселей высоты. Маржинги установлены на 0 и transform-origin (en-US) смещается в середину пространства, на котором вращается слайдер; поскольку слайдер имеет ширину 150 пикселей, он вращается через прямоугольник по 150 пикселей с каждой стороны. Смещение начала координат на 75px по каждой оси означает, что мы будем вращаться вокруг центра этого пространства. Наконец, мы поворачиваем против часовой стрелки на 90°. Результат: инпут range, который вращается таким образом, что максимальное значение находится сверху, а минимальное снизу.
appearance property
Свойство appearance имеет нестандартное значение slider-vertical , которое делает слайдер вертикальным.
HTML
Используем тот же HTML что и в предыдущем примере:
input type="range" min="0" max="11" value="7" step="1">
CSS
Берём только те инпуты что имеют тип range:
input[type="range"] -webkit-appearance: slider-vertical; >
orient attribute
В Firefox, реализовано нестандартное свойство orient .
HTML
Используем тот же HTML что и в предыдущем примере и добавляем атрибут со значением vertical :
input type="range" min="0" max="11" value="7" step="1" orient="vertical">
writing-mode: bt-lr
Свойство writing-mode может быть использовано для специальных эффектов
HTML
Используем тот же HTML что и в предыдущем примере:
input type="range" min="0" max="11" value="7" step="1">
CSS
Берём только те инпуты что имеют тип range, меняем writing mode с default на bt-lr , или bottom-to-top и left-to-right:
input[type="range"] writing-mode: bt-lr; >
Все вместе
Каждый из вышеперечисленных примеров работает в своём браузере, мы попробуем объединить все вместе чтоб добиться кроссбраузерности решения:
HTML
Оставим orient атрибут со значением vertical для Firefox:
input type="range" min="0" max="11" value="7" step="1" orient="vertical">
CSS
Берём только те инпуты что имеют тип range, меняем writing mode с default на bt-lr , или bottom-to-top и left-to-right, для Edge и Internet Explorer, и добавляем -webkit-appearance: slider-vertical для всех -webkit-based браузеров:
input[type="range"] writing-mode: bt-lr; -webkit-appearance: slider-vertical; >
Спецификации
Поддержка браузерами
BCD tables only load in the browser
Смотрите также
Found a content problem with this page?
This page was last modified on 17 июл. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
Our communities
Developers
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.