Темы
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>;