Breakpoints в MUI отвечают за адаптивность
интерфейсов. Они позволяют задавать различные стили в зависимости от
ширины экрана, что критично для построения отзывчивых веб-приложений. По
умолчанию MUI предоставляет стандартный набор точек останова:
xs, sm, md, lg,
xl, однако часто возникает необходимость определить
собственные, кастомные breakpoints под конкретный дизайн.
Для изменения стандартных breakpoints необходимо модифицировать тему
через объект createTheme. Пример кастомизации:
import { createTheme } from '@mui/material/styles';
const theme = createTheme({
breakpoints: {
values: {
xs: 0, // мобильные устройства
sm: 480, // маленькие планшеты
md: 768, // средние планшеты
lg: 1024, // десктоп
xl: 1440, // широкие экраны
xxl: 1920 // сверхширокие экраны
},
},
});
В этом примере добавлен новый breakpoint xxl. Все
стандартные компоненты MUI, использующие breakpoints, автоматически
начнут поддерживать новую точку.
MUI предоставляет удобные методы для работы с breakpoints через
объект theme.breakpoints. Основные методы:
Пример использования с кастомным breakpoint xxl:
import { styled } from '@mui/material/styles';
import Box from '@mui/material/Box';
const ResponsiveBox = styled(Box)(({ theme }) => ({
backgroundColor: 'lightblue',
[theme.breakpoints.up('xxl')]: {
backgroundColor: 'darkblue',
},
[theme.breakpoints.between('lg', 'xl')]: {
backgroundColor: 'green',
},
[theme.breakpoints.down('sm')]: {
backgroundColor: 'pink',
},
}));
В этом примере цвет фона меняется в зависимости от ширины экрана. С
помощью кастомного breakpoint xxl можно управлять стилями
на сверхшироких дисплеях.
Система Grid MUI напрямую использует breakpoints для определения ширины колонок:
import Grid from '@mui/material/Grid';
<Grid container spacing={2}>
<Grid item xs={12} md={6} lg={4} xxl={3}>
<Box>Контент</Box>
</Grid>
</Grid>
Здесь новый breakpoint xxl задаёт ширину колонки в 3/12
сетки для сверхшироких экранов. Аналогично кастомные breakpoints могут
использоваться в компоненте Stack для управления
направлением:
import Stack from '@mui/material/Stack';
<Stack
direction={{
xs: 'column',
md: 'row',
xxl: 'row-reverse'
}}
spacing={2}
>
<Box>Элемент 1</Box>
<Box>Элемент 2</Box>
</Stack>
Можно создавать динамичные стили через функцию
theme => ({}) внутри sx пропса:
<Box
sx={(theme) => ({
fontSize: 14,
[theme.breakpoints.up('md')]: {
fontSize: 18,
},
[theme.breakpoints.up('xxl')]: {
fontSize: 24,
},
})}
>
Текст с адаптивным размером
</Box>
Такой подход позволяет управлять любыми CSS-свойствами, используя кастомные точки останова, без создания отдельного styled-компонента.
xs < sm < md < lg < xl < xxl.sx и styled, так как не все сторонние
компоненты MUI могут автоматически учитывать новые точки.Кастомные breakpoints обеспечивают полный контроль над адаптивностью, позволяют расширять возможности стандартной темы MUI и создавать интерфейсы, оптимизированные под уникальные устройства и макеты.