НачалоОсновыКомпонентыТексты

Number input

Number input принимает число, которое вводят с клавиатуры: сумму, цену, ставку, размер. Поле умеет показывать значение как валюту, проценты или единицы измерения, а маленькие кнопки ▲▼ меняют его на шаг. Чтобы у поля была подпись, оберните его в Field.

Стабильный Figma
ОбзорИспользованиеAPIДоступность
<tk-field label="Amount">
  <tk-number-input name="amount" format="currency" currency="USD" min="0" step="0.01" value="1234.5"></tk-number-input>
</tk-field>

Анатомия

Часть Что это
tk-number-input сам элемент; одна остановка Tab
part field рамка поля
part input внутреннее текстовое поле с ролью spinbutton
слоты prefix / suffix текст или иконка до или после значения, по желанию
part spinners пара ▲▼ у правого края; нажмите, чтобы сделать шаг, или удерживайте

Подпись, подсказку и сообщение об ошибке рисует Field.

Форматирование

<tk-field label="Price">
  <tk-number-input format="currency" currency="EUR" value="1250"></tk-number-input>
</tk-field>
<tk-field label="Completion">
  <tk-number-input format="percent" value="0.5" step="0.01"></tk-number-input>
</tk-field>
%
<tk-field label="Discount">
  <tk-number-input min="0" max="100" step="5" value="20"><span slot="suffix">%</span></tk-number-input>
</tk-field>
  • Без фокуса поле показывает отформатированное значение («$1,234.50»), а в фокусе — простое число («1234.5»), чтобы разделители не мешали печатать. value всегда остаётся простым числом.
  • format: decimal (по умолчанию), currency с кодом в currency (без него — USD), percent или unit с единицей в unit, например kilometer. precision фиксирует число знаков после запятой, locale задаёт разделители.
  • format="percent" считает значение долей: 0.5 показывается как «50%». Если ваше значение уже 50, поставьте суффикс %.
  • Префикс и суффикс — украшение, скринридеры их не читают. Если единица — часть значения, берите format.
  • Для остальных возможностей Intl.NumberFormat задайте свойство formatOptions. Оно перекрывает атрибуты-сокращения.

Значение и шаг

  • min, max и step задают допустимые значения. Ввести можно что угодно; когда человек уходит из поля, жмёт Enter или делает шаг, значение прижимается к диапазону и округляется до step.
  • ▲▼ и стрелки меняют значение на step. Page Up, Page Down и Shift со стрелкой — на large-step (десятая часть диапазона или step × 10, если диапазона нет).
  • На min или max соответствующая кнопка отключается. Шаг из пустого поля начинается с min или с 0.
  • Отрицательные числа вводить можно, если min не задан или меньше 0.
  • Колесо мыши значение не меняет. Чтобы разрешить, задайте wheel: тогда колесо работает, только пока поле в фокусе.

Размеры

<tk-number-input aria-label="Medium number input" value="12"></tk-number-input>
<tk-number-input aria-label="Large number input" size="large" value="12"></tk-number-input>
size Высота Отступ слева Текст значения
medium (по умолчанию) 32px space-8 Body Small (14/20)
large 36px space-10 Body Medium (16/24)

Высоты совпадают с кнопками medium и large. Размера small нет: с size="small" поле рисуется как medium и пишет предупреждение в консоль.

Состояния

<tk-number-input aria-label="Seats included" value="25" readonly></tk-number-input>
<tk-number-input aria-label="Seats" value="25" disabled></tk-number-input>
<tk-field label="Seats" required error="Enter a number of seats from 1 to 500">
  <tk-number-input name="seats" min="1" max="500" value="900"></tk-number-input>
</tk-field>

Рамка ведёт себя как у Input: при наведении не меняется, а при фокусе окрашивается в цвет фокуса и утолщается внутрь. Кнопки ▲▼ под курсором подсвечиваются.

  • readonly: на поле можно перейти и скопировать значение, но не изменить. Кнопки ▲▼ скрыты.
  • disabled: на поле нельзя перейти и нельзя его изменить, а в форму оно не попадает.
  • Ошибка: задайте error у Field. Поле прижимает значение к диапазону, но само ошибку не показывает: когда и что сказать, решаете вы.
  • Обязательное поле: задайте required у Field. Без Field ставьте его на сам number input.