Поле ввода
Поле ввода принимает одну строку текста: имя, email, адрес сайта. Само по себе это голая рамка; чтобы у поля были подпись, подсказка и ошибки, оберните его в
<tk-field label="Email address" helper="We only use this for the receipt"> <tk-input type="email" name="email" autocomplete="email"></tk-input> </tk-field>
Анатомия
| Часть | Что это |
|---|---|
tk-input |
сам элемент; одна остановка Tab |
part field |
рамка поля |
part input |
нативный <input> внутри |
слот prefix |
текст или иконка перед значением, по желанию |
слот suffix |
текст или иконка после значения, по желанию |
Подпись, подсказку и сообщение об ошибке рисует
Размеры
<tk-input aria-label="Medium input" value="Medium"></tk-input> <tk-input aria-label="Large input" size="large" value="Large"></tk-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-input aria-label="Workspace URL" value="acme.thykes.com" readonly></tk-input> <tk-input aria-label="Company" value="Acme Inc." disabled></tk-input>
<tk-field label="Email address" required error="Enter an email address, like name@example.com"> <tk-input type="email" name="email" value="ada@"></tk-input> </tk-field>
При наведении рамка не меняется. При фокусе она окрашивается в цвет фокуса и утолщается внутрь, так что ничего не сдвигается.
readonly: на поле можно перейти, значение можно выделить и скопировать, но не изменить. Выглядит как обычный текст. Подходит для значений, которые нужно прочитать или скопировать.disabled: на поле нельзя перейти и нельзя ввести текст, а в форму оно не попадает. Лучшеreadonlyили активное поле. Если поле нельзя изменить, объясните почему в подсказке.- Ошибка: задайте
errorу Field. Сообщение появится под полем, рамка станет красной и останется красной при фокусе. - Обязательное поле: задайте
requiredу Field. У подписи появится звёздочка, а поле станет обязательным. Без Field ставьтеrequiredна само поле.
Поле не проверяет введённый текст, кроме встроенных проверок браузера (required, формат
по type, maxlength). Когда проверять и что писать в ошибке, решаете вы.
Подпись, подсказка и ошибки
<tk-field label="Card number" helper="The 16 digits on the front of your card"> <tk-input inputmode="numeric" name="card" autocomplete="cc-number"></tk-input> </tk-field>
<tk-input aria-label="Filter by name"></tk-input>
- Оберните поле в
Field , чтобы дать ему подпись, подсказку или ошибку. Field называет поле для скринридеров. - Внутри Field задавайте
requiredиdisabledу Field. Field перезаписывает их у поля. - Если видимой подписи нет, задайте
aria-label(илиaria-labelledby) у поля. Только когда назначение поля понятно из того, что вокруг. - Каждому полю нужно одно из двух. Плейсхолдер никогда не заменяет подпись.
Префикс и суффикс
<tk-field label="Username"> <tk-input name="username"><span slot="prefix">@</span></tk-input> </tk-field> <tk-field label="Workspace address"> <tk-input name="workspace"><span slot="suffix">.thykes.com</span></tk-input> </tk-field>
<tk-field label="Website"> <tk-input type="url" name="website"><tk-icon slot="prefix" name="link"></tk-icon></tk-input> </tk-field>
- В
prefixпоказывают, какое значение ждёт поле (@, $, иконка), вsuffix— единицу или домен (USD, .example.com). В каждом слоте короткий текст или один .tk-icon - Префикс и суффикс скрыты от скринридеров. Не пишите там того, чего нет в подписи или подсказке.
- Это украшение. Не кладите туда кнопки; кнопки очистки, счётчика символов и показа пароля нет.
Когда использовать
- Поле ввода — для свободного текста в одну строку. Оно работает в обычных формах: значение отправляется вместе с формой, а Enter отправляет форму.
- Для нескольких строк берите
Textarea . - Для выбора из вариантов —
Select илиCombobox . - Для сумм и других чисел —
Number input , для поиска —Search field .
Текст
- Подпись: называйте, что спрашиваете. Коротко, заглавная буква только в начале, без двоеточия. Всё важное — в подпись, а не в подсказку.
- Подсказка: одна короткая строка, например формат или где найти значение. Без ссылок.
- Ошибка: скажите, что случилось и как исправить, словами из подписи. Для пустого поля — указание («Введите email»). Для нарушенного правила — описание («Имя должно быть не длиннее 35 символов»). Без «пожалуйста», «извините», «неверно» и «произошла ошибка».
- Плейсхолдер: лучше без него. Он пропадает, как только начинают печатать, и слишком бледный, чтобы его удобно читать. Если всё же нужен — коротко, без точки в конце и ничего важного.
- Обязательные поля: если форма отмечает их звёздочкой, добавьте сверху одну строку: «* — обязательное поле». А лучше спрашивайте только то, что действительно нужно.
Подробнее в
Можно / нельзя
| ✅ Можно | ❌ Нельзя |
|---|---|
| Обернуть поле в Field с подписью | Оставить голое поле без имени |
| Важные указания в подписи | Важные указания в плейсхолдере |
required у Field |
required у поля внутри Field |
inputmode="numeric" для цифр, например номера карты |
type="number": колесо мыши случайно меняет значение |
readonly для значений, которые копируют |
disabled по умолчанию |
| Ширина поля по ожидаемому ответу | Поле для индекса во всю страницу |
| «Введите email» | «Неверный ввод» |
Связанные
Field : подпись, подсказка и ошибка вокруг поля.Textarea : ввод текста в несколько строк.Number input иSearch field : поля для чисел и поиска.Button : кнопка отправки рядом с полем; высоты совпадают.
API
Атрибуты
| Атрибут | Тип | По умолчанию | Что делает |
|---|---|---|---|
value |
string | '' |
значение; отправляется под именем name |
type |
text | email | password | tel | url | search |
text |
нативный тип; number нет, используйте inputmode |
name |
string | — | имя поля в форме |
placeholder |
string | — | подсказка внутри пустого поля; лучше без неё |
inputmode |
string | — | экранная клавиатура, например numeric или decimal |
autocomplete |
string | — | назначение для автозаполнения, например email; ставьте на личные данные |
maxlength |
number | — | сколько символов можно ввести; счётчика нет |
required |
boolean | false |
браузер не отправит форму с пустым полем; видимой отметки нет |
readonly |
boolean | false |
можно перейти и скопировать, нельзя изменить |
disabled |
boolean | false |
не в фокусе, не редактируется, не попадает в форму |
size |
medium | large |
medium |
высота 32 / 36px |
Слоты
| Слот | Содержимое |
|---|---|
prefix |
текст или один tk-icon перед значением |
suffix |
текст или один tk-icon после значения |
События
Своих событий нет. Слушайте input на каждое нажатие клавиши и change, когда значение
подтверждено; текущее значение — в свойстве value. Сброс формы возвращает первоначальное
значение и не вызывает change.
Методы
focus(): переводит фокус в поле.
CSS
::part(field): рамка поля.::part(input): нативный<input>.
Токены
| Роль | Покой | Фокус | Ошибка | Отключено | Только чтение |
|---|---|---|---|---|---|
| рамка | border/subtle |
border/accent/focus |
border/error |
border/disabled |
border/subtle |
| фон | surface/default |
surface/default |
surface/default |
surface/disabled |
surface/subtle |
| текст значения | text/default |
text/default |
text/default |
text/disabled |
text/default |
При фокусе рамка утолщается внутрь на focus/border-inset — цветом фокуса, а при ошибке
цветом border/error. Плейсхолдер — text/placeholder, префикс и суффикс —
text/secondary. Углы — radius-8. Токены подписи, подсказки и ошибки принадлежат
Доступность
Встроено:
- Нативный
<input>: до него доходит Tab, работают автозаполнение, выделение текста и встроенные проверки браузера. - Рамка фокуса, которая никогда не прячется.
- Field вокруг поля называет его, связывает с ним подсказку и ошибку и при ошибке отмечает поле как неверное.
- Префикс и суффикс скрыты от скринридеров.
На вашей стороне:
- Дайте каждому полю имя: подпись в Field или
aria-label. - Ставьте
autocompleteна личные данные: имя, email, адрес. - Не пишите инструкции в плейсхолдер.
- Ошибку зачитывают, когда поле получает фокус, а не в момент появления. Если вы проверяете всю форму при отправке, покажите сверху сводку ошибок, переведите на неё фокус и свяжите каждое сообщение с его полем.
| Клавиша | Действие |
|---|---|
Tab |
переводит фокус в поле; отключённое пропускает |
Enter |
отправляет форму, в которой стоит поле |
Пределы контраста
- Рамка в покое: 1.33:1 в светлой теме и 2.00:1 в тёмной, ниже минимума 3:1; в контрастной 4.22:1. Дайте каждому полю видимую подпись, чтобы рамка не была единственной подсказкой. Рамки фокуса и ошибки не ниже 3:1 в любой теме.
- Плейсхолдер: 3.26:1 в светлой теме, ниже 4.5:1 в любой теме.
- Текст отключённого поля: 2.54:1 в светлой теме. Для значений, которые нужно прочитать,
берите
readonly.