Флаг
Флаг показывает страну картинкой: в телефонном поле, списке стран, рядом с ценой или адресом. Берите его вместо флага-эмодзи: эмодзи рисует системный шрифт, и в одних системах флаг выглядит иначе, а в других (Windows) вместо него стоят две буквы. Картинки набора выглядят одинаково везде.
Пример
Разметка
Минимальную разметку показывает пример выше: пустой
<span class="sf-flag sf-flag--rect" data-country="ru">.
data-country— код страны из двух букв по ISO 3166-1 alpha-2, регистр не важен. Скрипт вставляет в элемент картинку<img>.- Класс формы
sf-flag--rectилиsf-flag--circleвыбирает файл набора и пропорции; без него скрипт берёт прямоугольник. data-altзадаёт картинке текстовую альтернативу; без него флаг декоративный (см. «Доступность»).data-lazy="false"загружает файл сразу. По умолчанию файл грузится, когда флаг подходит к экрану: длинный список стран не тянет все файлы ради видимых.data-flag-baseна элементе или любом предке задаёт свой набор. Он повторяет раскладку набора Framework:<база>/rect/<код>.svg,<база>/circle/<код>.svgи<база>/index.jsonсо списками кодов каждой формы. Без атрибута путь берётся из рантайма Framework.
Варианты
Форма
sf-flag--rect — прямоугольник 28×20, форма по умолчанию для полей,
списков и таблиц. sf-flag--circle — круг 24×24 рядом с аватарами, где
важнее общая форма. Круглый флаг — отдельный рисунок, а не обрезанный
прямоугольник: у Непала сохраняется форма полотнища, у Сингапура — полумесяц
со звёздами. Поэтому форму выбирает класс, а не border-radius. Если у кода
нет файла нужной формы, скрипт показывает другую форму и меняет класс.
В каждой форме набора 247 кодов. 37 из них построены из
flag-icons (лицензия MIT) и приведены
к палитре набора; их круглые версии вырезаны из прямоугольных. Уведомление
об авторстве лежит в flags/index.json компонента.
sf-flag--rect
sf-flag--circle
Размер
Высоту задаёт переменная --sf-flag--size (по умолчанию var(--sf-b8)),
ширина считается из неё по пропорциям формы. Задайте переменную на
элементе или в своём слое.
Состояния
Без картинки
Пока файл не загружен или код не задан, элемент держит размер и показывает нейтральную подложку: строка не прыгает, когда картинка приходит.
без data-country
без data-country
Доступность
- Без
data-altкартинка получаетaria-hidden="true"и пустойalt: экранный диктор её пропускает. Так правильно, когда название страны или код написаны рядом. data-altс названием страны задавайте, только если картинка несёт смысл сама, например рядом с телефонным кодом.- Флаг не обозначает язык: у одного языка много стран, в одной стране
бывает несколько языков. В переключателе языка рядом с флагом пишите
название языка на этом языке (
langна подписи). - Скругление и тонкая рамка следуют теме: рамка цвета
--sf-outline-variantне даёт белым флагам слиться со страницей.
- Deutsch
- Français
- +81
JavaScript
Скрипт подключает флаги при загрузке страницы и флаги, добавленные позже.
Объект SF.Flag появляется вместе со скриптом компонента; Loader подключает
его, когда находит на странице .sf-flag. Событий компонент не отправляет.
SF.Flag.render(element)— перерисовывает флаг. Сменуdata-countryили формы скрипт сам не отслеживает: после неё вызовитеrender.SF.Flag.mount(element)иSF.Flag.mountAll(root)— подключают флаг или все флаги внутриrootс учётом ленивой загрузки.
Имя SF.flag указывает на тот же объект.
const flag = document.querySelector('#phone-country');
flag.dataset.country = 'de';
SF.Flag.render(flag);
Классы
| Что | Классы |
|---|---|
| Блок | sf-flag |
| Модификаторы | sf-flag--circle, sf-flag--rect |
Классы и переменные собраны из CSS выпуска и обновляются вместе с ним.
Переменные
Компонент читает свои переменные, а модификаторы задают им значения; таблица показывает, из чего складывается вид. Переменные компонента — его внутренняя проводка, а не поверхность настройки: их имена и устройство могут меняться. Вид проекта меняют общие токены, а глубокий вид Smart-компонента — его шаблон (см. Переменные компонента). Значение по умолчанию — из базового правила блока (.sf-flag); переменную без него задают только модификаторы.
| Переменная | По умолчанию | Задаёт |
|---|---|---|
--sf-flag--height |
var(--sf-flag--size, var(--sf-b8)) |
height, block-size, width, inline-size |
--sf-flag--outline-color |
var(--sf-outline-variant) |
outline |
--sf-flag--radius |
var(--sf-radius--ui) |
border-radius |