Перейти к основному содержимому

Скелетон

Плейсхолдер, который показывается, пока содержимое ещё загружается.

Базовое использование​

Базовое использование
import { LhSkeleton } from '@lh-ui/react'

export default function Demo() {
return <LhSkeleton avatar rows={2} sx={{ w: 300 }} />
}

Skeleton Props​

СвойствоОписаниеТипВариантыПо умолчанию
loadingПоказывать ли скелетон (при false рендерит дочерние элементы)boolean—true
rowsКоличество текстовых строкnumber—3
avatarДобавлять ли круглый плейсхолдер аватараboolean—false
animatedВключать ли анимациюboolean—true
sxСокращённые props макетаSxProps——

SkeletonItem Props​

LhSkeletonItem — независимо экспортируемый плейсхолдер-блок, который можно использовать отдельно для компоновки произвольных скелетных структур.

СвойствоОписаниеТипВариантыПо умолчанию
variantФорма плейсхолдера'text' | 'rect' | 'circle'—'text'
animatedВключать ли анимациюboolean—true
classNameДобавляемое имя классаstring——
styleДобавляемый inline-стильCSSProperties——
sxСокращённые props макетаSxProps——
import { LhSkeletonItem } from '@lh-ui/react'

export default function Demo() {
return (
<div style={{ display: 'flex', gap: 16, width: 300 }}>
<LhSkeletonItem variant="circle" />
<div style={{ flex: 1 }}>
<LhSkeletonItem style={{ marginBottom: 8 }} />
<LhSkeletonItem style={{ width: '60%' }} />
</div>
</div>
)
}
Алгоритм ширины строк

При rows > 1 последняя строка сужается до 60%, имитируя реальный набор абзаца; корневой элемент должен иметь определённую ширину (ширины строк заданы в процентах).

Доступность

Контейнер скелетона выводит aria-busy="true" + aria-live="polite"; все плейсхолдеры помечены aria-hidden, а когда данные готовы, скринридер снова объявляет реальное содержимое. При prefers-reduced-motion анимация автоматически деградирует до статического плейсхолдера.

Стили​

import '@lh-ui/react/style/skeleton'