Skeleton
<sf-skeleton> рисует серые фигуры на месте содержимого, которое ещё
загружается: строки текста, аватар, изображение, карточку. Страница не
прыгает, когда приходят данные, и читатель заранее видит раскладку. Элемент
строится на классах компонента Скелетон.
Для ожидания без известной раскладки берите
Spinner, для известной доли
выполненного — Progress Bar.
Пример
Применение
Строки
count (от 1 до 20) задаёт число фигур одного элемента. size — высота
каждой фигуры по шкале текста, от 1/7 до 7, по умолчанию 1: берите
ступень текста, который появится на этом месте.
width и height принимают список через запятую; значения применяются к
фигурам по очереди и повторяются по кругу. Так три строки разной длины
описываются одним элементом: width="100%,80%,60%". Значение — процент,
имя токена размера (a12, b4) или var(--sf-…); остальные значения
игнорируются.
Форма
kind задаёт форму фигуры: text — строка со скруглением (по умолчанию),
circle — круг, square — без скругления, rounded — скругление как у
строки. type="icon" делает ширину равной высоте — вместе с
kind="circle" получается место под аватар или иконку, как в примере.
Движение
animation выбирает движение: pulse — мягкое изменение прозрачности (по
умолчанию), wave — блик по фигуре, none — без движения. При системной
настройке уменьшения движения фигуры остаются статичными.
Замена на содержимое
Скелетон не знает, когда данные готовы. Приложение держит его на месте содержимого и заменяет, когда ответ пришёл.
const region = document.querySelector('#author');
region.setAttribute('aria-busy', 'true');
const author = await api.getAuthor(id);
region.replaceChildren(renderAuthor(author));
region.removeAttribute('aria-busy');
Доступность
- Фигуры скрыты от экранного диктора и не получают фокус: они ничего не сообщают.
- О загрузке сообщает область, в которой стоит скелетон: задайте ей
aria-busy="true"и уберите атрибут, когда содержимое на месте. - Если ожидание долгое, объявите его текстом с
role="status"один раз, а не для каждой фигуры. - Не используйте скелетон как сообщение об ошибке или пустом результате: когда данных нет, покажите текст.
Справочник API
Раздел собран из манифеста компонента выпуска ui-106d5901f8c3 и обновляется вместе с выпуском. Чтобы исправить описание, исправьте манифест.
Каждому атрибуту соответствует свойство элемента с тем же именем в camelCase: search-placeholder — searchPlaceholder. Свойство атрибута template называется templateName.
| Тег | <sf-skeleton> |
| Назначение | Декоративная заглушка загрузки, которая резервирует геометрию будущего содержимого, использует семантические токены и учитывает режим уменьшенного движения. |
| Контракт | smart.skeleton, версия 1.0.0 |
| Поставка | выпуск Framework ui-106d5901f8c3 |
| Жизненный цикл | экспериментальный: API может меняться между выпусками |
| Готовность | описан: манифест и сценарий есть, продуктовой приёмки нет |
| Заготовка до прихода кода | нет: атрибут data-sf-skeleton не пишется; своего скелетона при загрузке данных нет (Заготовка до прихода кода) |
Атрибуты
size—string, по умолчанию1, значения:1/7,1/6,1/5,1/4,1/3,1/2,1,2,3,4,5,6,7.width—string, по умолчанию100%.height—string, по умолчанию пусто.count—number, по умолчанию1, значения: от 1; до 20.animation—string, по умолчаниюpulse, значения:pulse,wave,none.kind—string, по умолчаниюtext, значения:text,circle,square,rounded. Форма заглушки: строка текста, круг, квадрат или скруглённый блок.items—string, по умолчанию пусто.root-class—string, по умолчанию пусто.
Прежние имена:
| Имя | Прежнее имя | Состояние | Убирается после |
|---|---|---|---|
kind |
variant |
работает, отмечается в SF.deprecations |
2026-12-01 |
kind |
type |
принимается для совместимости | — |
Методы
setState(nextState: object)— возвращаетobject. Записывает каждый ключ как атрибут в kebab-case: false, null, undefined или пустая строка удаляет его, true устанавливает пустым, всё остальное приводится к строке.
События
Своих событий нет; общие события базового элемента перечислены в главе Жизненный цикл → Этапы.
Доступность
- Роль: нет; сгенерированная геометрия заглушки имеет aria-hidden.
- Доступное имя: рекомендуется.
- Фокус: Скелетон не интерактивен и никогда не попадает в порядок табуляции. Область содержимого хоста отвечает за aria-busy и любое озвучиваемое состояние загрузки.
Минимальная разметка
<sf-skeleton></sf-skeleton>
Источник
simai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/smart/skeletonsimai/ui@106d5901f8c3b4f23131ce0e7ede5dbd8abfe4f4:distr/rule/rule.json#name=cl-skeleton