Темы
VKUI поддерживает три темы - vkBase (по умолчанию), vkIOS (на платформе iOS) и vkCom (на платформе vkcom)
в двух цветовых режимах (светлом и тёмном).
Это позволяет компонентам визуально мимикрировать под соответствующую платформу и выглядеть неотличимо от нативных приложений.
Тема в библиотеке представляет из себя набор дизайн-токенов ↗ в виде CSS-переменных ↗. Вот как это может выглядеть:
.SomeComponent {
color: var(--vkui--color_text_primary);
background: var(--vkui--color_background_content);
}По умолчанию тема определяется автоматически в зависимости от используемого устройства, но вы можете
задать поддержку только одной через свойство platform у ConfigProvider:
import { ConfigProvider, AdaptivityProvider, AppRoot, SimpleCell } from '@vkontakte/vkui';
import '@vkontakte/vkui/dist/vkui.css';
<ConfigProvider platform="ios">
<AdaptivityProvider>
<AppRoot>
<SimpleCell>Темным-темно</SimpleCell>
</AppRoot>
</AdaptivityProvider>
</ConfigProvider>;Стили библиотеки, которые подключаются через import '@vkontakte/vkui/dist/vkui.css',
содержат 3 темы, которые автоматически меняются в зависимости от платформы и режима:
- android (используется по умолчанию)
light– темаvkBase(ссылка на CSS файл ↗)dark– темаvkBaseDark(ссылка на CSS файл ↗)
- iOS
light– темаvkIOS(ссылка на CSS файл ↗)dark– темаvkIOSDark(ссылка на CSS файл ↗)
- vkcom
light– темаvkCom(ссылка на CSS файл ↗)dark– темаvkComDark(ссылка на CSS файл ↗)
Режимы
Каждая тема обычно поддерживает как светлый (англ. light), так и тёмный (англ. dark) режим.
За его определение отвечает свойство colorScheme, и также как platform, по умолчанию, определяется
автоматически за счёт CSS медиа выражения prefers-color-scheme ↗.
Ручное определение будет выглядеть так:
import { ConfigProvider, AdaptivityProvider, AppRoot, SimpleCell } from '@vkontakte/vkui';
import '@vkontakte/vkui/dist/vkui.css';
<ConfigProvider colorScheme="dark">
<AdaptivityProvider>
<AppRoot>
<SimpleCell>Темным-темно</SimpleCell>
</AppRoot>
</AdaptivityProvider>
</ConfigProvider>;Если вы хотите переопределить режим для отдельных компонентов приложения, воспользуйтесь
ColorSchemeProvider. Убедитесь, что потомок ColorSchemeProvider
принимает свойство className, иначе переопределить тему не получится.
<ColorSchemeProvider value="dark">
<Snackbar action="Поделиться">Поделиться</Snackbar>
</ColorSchemeProvider>Чтобы получить значение текущего режима, используйте хук useColorScheme.
Это может пригодиться для замены изображений на инвертированную версию в темных темах. Пример:
const colorScheme = useColorScheme();
<Div>{colorScheme === 'light' ? 'Out of the blue' : 'And into the black'}</Div>;