Библиотека MUI предоставляет мощный инструмент для управления
глобальными стилями в приложении через компонент
GlobalStyles. Этот компонент позволяет задавать
CSS-правила, которые будут применяться ко всему приложению, без
необходимости прописывать их в отдельных CSS-файлах или использовать
сторонние библиотеки.
Для начала необходимо импортировать GlobalStyles из
пакета MUI:
import { GlobalStyles } from '@mui/material';
Компонент принимает объект styles, который может быть
написан в виде обычного объекта JavaScript, где ключи — это
CSS-селекторы, а значения — стили:
<GlobalStyles
styles={{
body: {
margin: 0,
padding: 0,
fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
backgroundColor: '#f5f5f5',
},
a: {
textDecoration: 'none',
color: 'inherit',
},
}}
/>
В этом примере:
body задаёт базовые стили для всей страницы: обнуление
отступов и установка шрифта.a убирает стандартное подчеркивание ссылок и наследует
цвет от родителя.GlobalStyles полностью интегрируется с системой тем MUI.
Это позволяет использовать переменные темы и поддерживать единый стиль
во всём приложении:
import { GlobalStyles, useTheme } from '@mui/material';
function AppGlobalStyles() {
const theme = useTheme();
return (
<GlobalStyles
styles={{
body: {
backgroundColor: theme.palette.background.default,
color: theme.palette.text.primary,
fontFamily: theme.typography.fontFamily,
},
h1: {
fontWeight: theme.typography.fontWeightBold,
},
}}
/>
);
}
Использование темы позволяет динамически менять глобальные стили при переключении светлой и тёмной темы, делая приложение более гибким.
GlobalStyles поддерживает работу с псевдоклассами и
медиазапросами так же, как обычные стили CSS-in-JS:
<GlobalStyles
styles={{
button: {
cursor: 'pointer',
'&:hover': {
backgroundColor: '#1976d2',
color: '#fff',
},
},
'@media (max-width:600px)': {
body: {
fontSize: '14px',
},
},
}}
/>
В этом примере:
&:hover применяется к кнопкам при
наведении.С помощью GlobalStyles можно изменять базовые стили
компонентов MUI, которые определяются через их классы. Это полезно,
когда требуется единообразие без необходимости создавать кастомные
компоненты:
<GlobalStyles
styles={{
'.MuiButton-root': {
borderRadius: '12px',
textTransform: 'none',
},
'.MuiPaper-elevation1': {
boxShadow: '0px 4px 12px rgba(0,0,0,0.08)',
},
}}
/>
Здесь:
Paper) с elevation={1} получают
кастомную тень.GlobalStylesGlobalStyles полноценной альтернативой глобальному
CSS.GlobalStyles в корневом компоненте приложения
(например, рядом с ThemeProvider), чтобы стили применялись
ко всем дочерним элементам.body, a, h1–h6,
p, button).import { ThemeProvider, createTheme, GlobalStyles, CssBaseline } from '@mui/material';
const theme = createTheme({
palette: {
mode: 'light',
background: {
default: '#f0f2f5',
},
},
typography: {
fontFamily: '"Roboto", "Helvetica", "Arial", sans-serif',
},
});
function App() {
return (
<ThemeProvider theme={theme}>
<CssBaseline />
<GlobalStyles
styles={{
body: {
margin: 0,
padding: 0,
backgroundColor: theme.palette.background.default,
},
a: {
color: theme.palette.primary.main,
textDecoration: 'none',
},
button: {
borderRadius: 8,
'&:hover': {
backgroundColor: theme.palette.primary.dark,
},
},
}}
/>
{/* Остальная часть приложения */}
</ThemeProvider>
);
}
В этом примере GlobalStyles задаёт:
Такой подход позволяет строить единообразный, масштабируемый интерфейс с минимальным количеством повторяющегося кода.