Country select
Country select позволяет выбрать одну страну: человек печатает, и список фильтруется. Полный список стран, их названия на языке пользователя и флаги уже встроены; значение — двухбуквенный код страны.
<tk-field label="Country"> <tk-country-select name="country"></tk-country-select> </tk-field>
Поместите его в aria-label. Пункты писать не нужно.
Анатомия
| Часть | Что это |
|---|---|
tk-country-select |
сам элемент; одна остановка Tab |
| поле | текстовое поле: показывает выбранную страну или то, что человек печатает |
| флаг | стоит в начале поля и каждого пункта; декоративный |
| кнопка очистки | видна, пока в поле есть текст |
| шеврон | переворачивается, пока меню открыто |
| меню | все страны, по алфавиту на языке пользователя |
| пункт | одна страна; выбранную отмечает галочка |
Страны и названия
<tk-country-select aria-label="Pays" locale="fr" value="DE"></tk-country-select>
- В списке все 249 стран и территорий ISO 3166-1, а также Косово (
XK). - Названия берутся из браузера на языке страницы (
langна<html>), а если он не задан, на языке браузера.localeзадаёт язык для одного поля; список пересортируется под него. - Значение — двухбуквенный код alpha-2 заглавными буквами, например
GBилиUS.valueстрочными буквами преобразуется. Храните и отправляйте код, а не название. - Флаги загружаются, когда первый из них появляется на экране, из файлов самой библиотеки. До загрузки их место остаётся пустым, поэтому ничего не сдвигается.
Фильтрация
- Введите часть названия, в любом регистре и с любого места: «kingdom» найдёт «United Kingdom».
- Диакритика не важна: «curacao» найдёт «Curaçao».
- Подходит и двухбуквенный код: «gb» найдёт United Kingdom.
- Ничего не выбирается, пока человек сам не выберет пункт. При уходе из поля возвращается выбранная страна. Добавить страну, которой нет в списке, нельзя.
Телефонные коды
<tk-field label="Phone country"> <tk-country-select dial-code value="NL"></tk-country-select> </tk-field>
dial-code добавляет к названию телефонный код: «Netherlands (+31)». Тогда по цифрам,
например «44», страны ищутся по коду. У территорий без телефонного кода его нет.
Компактный вид
<tk-country-select compact dial-code aria-label="Country calling code" autocomplete="tel-country-code" value="US" ></tk-country-select>
compact сжимает поле до флага и телефонного кода, чтобы поставить его рядом с полем
номера. Используйте вместе с dial-code. Кнопка очистки скрыта, а меню остаётся
достаточно широким для полных названий. В поле помещается около пяти символов, поэтому
введённое название в нём прокручивается; совпадения читайте в меню. При фокусе код
выделяется, и ввод его заменяет.
Компактному полю давайте имя через aria-label: видимая подпись над ним называла бы весь
ряд. bare дополнительно убирает рамку, фон, рамку фокуса и шеврон, чтобы поле можно было
встроить в рамку другого поля.
Размеры
<tk-country-select aria-label="Country" value="JP"></tk-country-select> <tk-country-select size="large" aria-label="Country" value="JP"></tk-country-select>
size |
Высота | Текст | Флаг |
|---|---|---|---|
medium (по умолчанию) |
32px | Body Small (14/20) | 24×16px |
large |
36px | Body Medium (16/24) | 30×20px |
Состояния
<tk-country-select aria-label="Country" value="IT" disabled></tk-country-select> <tk-country-select aria-label="Country" value="IT" readonly></tk-country-select>
Состояния те же, что у
disabled: на поле нельзя перейти, его нельзя открыть, значение не отправляется.readonly: страна видна и отправляется, но изменить её или открыть меню нельзя. Флаг остаётся; кнопка очистки и шеврон скрыты.- Ошибка: задайте
errorна Field.
Когда использовать
- Country select нужен везде, где выбирают страну: регистрация, оформление заказа, адрес, оплата.
- Для телефонных номеров берите
Phone input . В нём уже есть выбор кода страны. - Для других длинных списков, например валют или часовых поясов, берите
Combobox со своими пунктами.
Текст
- Подпись: «Country» или то, для чего нужна страна: «Country of residence», «Billing country». С заглавной буквы только первое слово, без двоеточия.
- Ошибка: скажите, как её исправить: «Select your country of residence».
Подробнее в
Можно / нельзя
| ✅ Можно | ❌ Нельзя |
|---|---|
| Брать его для любого поля страны | Собирать свой список стран на combobox |
| Хранить и отправлять код alpha-2 | Отправлять название страны |
Включать dial-code в телефонных полях |
Показывать телефонные коды там, где они не нужны |
| Передавать смысл названием | Полагаться только на флаг |
Связанные
Combobox : то же поле для ваших длинных списков.Phone input : поле телефона с компактным country select.Field : подпись, подсказка и ошибка вокруг поля.Select family : как они соотносятся.
API
Атрибуты
| Атрибут | Тип | По умолчанию | Что делает |
|---|---|---|---|
value |
string | '' |
код alpha-2 выбранной страны; '' — ничего не выбрано |
locale |
string | язык страницы | язык названий стран и их порядка |
dial-code |
boolean | false |
показывает телефонные коды и ищет по ним |
compact |
boolean | false |
только флаг и телефонный код, для телефонного поля |
bare |
boolean | false |
без рамки, фона, рамки фокуса и шеврона; для встраивания в рамку другого поля |
autocomplete |
string | country |
подсказка для автозаполнения; для телефонного кода ставьте tel-country-code |
placeholder |
string | — | подсказка, пока поле пустое |
name |
string | — | имя поля в форме |
required |
boolean | false |
пустое значение не даёт отправить форму; видимой метки нет (звёздочку добавляет Field) |
disabled |
boolean | false |
нельзя перейти и открыть, не отправляется с формой |
readonly |
boolean | false |
можно перейти, значение отправляется, но изменить и открыть нельзя |
size |
medium | large |
medium |
высота 32 / 36px |
Дочерние <option> игнорируются: список встроен.
События
change срабатывает, когда человек выбирает страну или очищает поле. Оно не срабатывает
при вводе и когда вы задаёте value из кода.
В форме код отправляется под именем name, а сброс формы возвращает начальное значение.
CSS
::part(field): поле.::part(listbox): меню.
Токены
Всё остальное —
| Часть | Токены |
|---|---|
| флаг | высота icon-size-16 (icon-size-20 при large), пропорции 3:2; radius-2; край 1px border/subtle |
Цвета флага — его собственные.
Доступность
Уже встроено:
- Всё, что есть в
Combobox : одна остановка Tab, объявление числа совпадений по ходу ввода, фокус остаётся в поле. - Флаги скрыты от скринридера. Доступное имя каждого пункта и поля — название страны.
Ваша часть:
- Дайте полю имя: подпись Field или
aria-labelв компактном виде. - Если задаёте
locale, используйте настоящий языковой тег, напримерfrилиpt-BR.
Клавиатура как у
Пределы контраста
- Рамка поля: 1.33:1 в светлой теме и 2.00:1 в тёмной, ниже минимума 3:1; 4.22:1 в высококонтрастной. Всегда показывайте подпись.