Система breakpoints в MUI (Material-UI) обеспечивает адаптивное поведение компонентов в зависимости от размеров экрана. Она является ядром построения responsive-дизайна и позволяет управлять отображением элементов на различных устройствах без необходимости писать сложные медиазапросы вручную.
В MUI используются пять стандартных точек останова:
xs — экраны меньше 600pxsm — экраны от 600px до 900pxmd — экраны от 900px до 1200pxlg — экраны от 1200px до 1536pxxl — экраны больше 1536pxКаждый breakpoint соответствует минимальной ширине, при которой
применяются определенные стили. Например, sm применяет
стили на экранах шириной от 600px и выше.
Компонент Box в MUI поддерживает props для задания
адаптивных значений. Например:
import Box from '@mui/material/Box';
<Box
sx={{
width: {
xs: '100%', // на маленьких экранах
sm: '50%', // на экранах sm и выше
md: '33%', // на экранах md и выше
},
bgcolor: {
xs: 'primary.main',
sm: 'secondary.main',
},
}}
/>
В этом примере width и bgcolor будут
изменяться в зависимости от ширины экрана. Значения автоматически
наследуются от меньших breakpoint’ов к большим, если не указано
иное.
useTheme и
медиазапросыДля более гибкой адаптивности можно использовать хук
useTheme вместе с breakpoints.up,
breakpoints.down, breakpoints.between и
breakpoints.only:
import { useTheme } from '@mui/material/styles';
import useMediaQuery from '@mui/material/useMediaQuery';
const theme = useTheme();
const isSmallUp = useMediaQuery(theme.breakpoints.up('sm'));
const isMediumDown = useMediaQuery(theme.breakpoints.down('md'));
const isBetween = useMediaQuery(theme.breakpoints.between('sm', 'lg'));
up('sm') — применяет стили для sm и всех
больших экрановdown('md') — применяет стили для md и всех
меньших экрановbetween('sm', 'lg') — стили применяются только между
sm и lgСистема Grid напрямую интегрирована с
breakpoint’ами:
import Grid from '@mui/material/Grid';
<Grid container spacing={2}>
<Grid item xs={12} sm={6} md={4}>
Контент
</Grid>
<Grid item xs={12} sm={6} md={4}>
Контент
</Grid>
</Grid>
xs={12} — элемент занимает всю ширину на мобильных
устройствахsm={6} — половину ширины на экранах sm и
вышеmd={4} — треть ширины на экранах md и
вышеТаким образом, можно управлять раскладкой сетки в зависимости от размера экрана без написания медиазапросов вручную.
MUI позволяет переопределять стандартные значения:
import { createTheme, ThemeProvider } from '@mui/material/styles';
const theme = createTheme({
breakpoints: {
values: {
xs: 0,
sm: 480,
md: 768,
lg: 1024,
xl: 1440,
},
},
});
<ThemeProvider theme={theme}>
{/* компоненты */}
</ThemeProvider>
Изменяя значения breakpoints.values, можно адаптировать
дизайн под любые нестандартные размеры экранов.
В MUI в объекте sx можно использовать медиазапросы для
комплексного контроля:
<Box
sx={{
fontSize: '1rem',
[theme.breakpoints.up('sm')]: {
fontSize: '1.2rem',
},
[theme.breakpoints.up('md')]: {
fontSize: '1.5rem',
},
}}
>
Адаптивный текст
</Box>
Это позволяет писать привычные медиазапросы через JavaScript и интегрировать их с системой темы.
sx для простых адаптивных стилей и
useMediaQuery для логики компонентов.Grid с responsive props вместо
ручных медиазапросов.Система breakpoints MUI обеспечивает единообразный и гибкий способ создания адаптивного интерфейса, минимизируя дублирование кода и упрощая поддержку дизайна на всех устройствах.