Дизайн станів завантаження (Skeleton/Shimmer) мобільного додатка
Спіннер на весь екран—рішення з 2015 року. Користувач бачить пустоту й не розуміє, що завантажується: список з 3 елементів або з 300, маленький блок або весь екран. Skeleton-екрани вирішують це: користувач бачить структуру контенту до його появи, сприймана швидкість завантаження зростає.
Як правильно будувати skeleton
Skeleton—це не просто сірі прямокутники. Вони повинні точно повторювати структуру реального контенту: ширину, висоту, розташування елементів. Якщо карточка товара займає 120pt висоти з фото 80×80, двома строками тексту й ціною—skeleton повинен мати таку саму висоту й таке саме розташування заглушок.
Типова помилка: skeleton-заглушка для тексту шириною 100% контейнера. У реальності текст так не виглядає—він займає 60–80% ширини в першій строці, 40–50% в останній. Неравномерні заглушки виглядають природніше.
Розміри заглушок:
- Заголовок: висота 16–20pt, ширина 60–70% контейнера
- Основний текст, строка: висота 12–14pt, ширина 85–95% (перша строка), 50–60% (остання)
- Аватар: круглая заглушка, точний розмір аватара
- Зображення: прямокутник з точним співвідношенням сторін оригіналу
Shimmer-анімація
Shimmer—це градієнт, який рухається зліва направо поверх skeleton-блоків, імітуючи «відблиск». Реалізується через:
- iOS:
CAGradientLayerз анімацієюCABasicAnimationнаposition.x, або готова бібліотекаSkeletonView - Android: через
Shimmerвід Facebook (fblibrary) або нативнийPlaceholderHighlightу Compose зModifier.placeholder - React Native:
react-native-skeleton-placeholderабо кастомнаAnimated.Value - Flutter: пакет
shimmerз pub.dev
Кольори shimmer: base color приблизно #E0E0E0 (light mode), highlight #F5F5F5. У dark mode—#2A2A2A base, #3A3A3A highlight. Швидкість анімації: 1–1.5 секунди на повний цикл.
Скільки skeleton-екранів показувати
Помилка: показувати тільки один скелетон для першої строки, а решта—пустне місце. Правильно: показувати 3–5 заглушок карточек, імітуючи перший видимий екран. Користувач не повинен бачити, що список закінчується—поки дані не завантажилися.
Перехід від skeleton до реального контенту: fade-in анімація 200–300ms. Без анімації перехід різкий, зі занадто довгою анімацією—дратує.
Що робити при частковому завантаженні
Дані приходять не завжди одним блоком. Приклад: текст поста завантажився, зображення ще нема. У такому разі skeleton залишається тільки для зображення—текст уже показуємо. Це вимагає окремого компонента ImagePlaceholder з shimmer, який живе незалежно від тексту.
Термін—1 день на повний набір skeleton-станів для всіх ключових екранів. Вартість розраховується індивідуально.







