Mobile-first подход предполагает разработку интерфейсов с приоритетом мобильных устройств. Это означает, что стили и компоненты проектируются сначала для небольших экранов, а затем адаптируются для больших. В MUI эта концепция реализуется через систему breakpoints и responsive design utilities.
MUI предоставляет предопределённые точки останова:
xs — экраны <600pxsm — ≥600pxmd — ≥900pxlg — ≥1200pxxl — ≥1536pxЭти значения можно использовать для создания адаптивного интерфейса.
Mobile-first стратегия подразумевает определение стилей для
xs по умолчанию, с последующим переопределением
для больших экранов.
Пример:
import { Box } from '@mui/material';
<Box
sx={{
width: { xs: '100%', sm: '80%', md: '60%' },
padding: { xs: 2, sm: 3, md: 4 },
}}
>
Контент
</Box>
Здесь width и padding задаются сначала для
маленьких экранов (xs), а затем масштабируются для
sm и md.
MUI предлагает Grid, Stack и Box для построения адаптивных интерфейсов:
<Grid container spacing={2}>
<Grid item xs={12} sm={6} md={4}>
Элемент 1
</Grid>
<Grid item xs={12} sm={6} md={4}>
Элемент 2
</Grid>
</Grid>
<Stack
direction={{ xs: 'column', sm: 'row' }}
spacing={{ xs: 1, sm: 2, md: 3 }}
>
<Button>Кнопка 1</Button>
<Button>Кнопка 2</Button>
</Stack>
sx поддерживает медиазапросы напрямую через
breakpoints.MUI позволяет задавать адаптивные темы, что особенно
полезно для mobile-first подхода. Используются функции
createTheme и responsiveFontSizes:
import { createTheme, responsiveFontSizes } from '@mui/material/styles';
let theme = createTheme({
typography: {
h1: { fontSize: '2rem' },
body1: { fontSize: '1rem' },
},
breakpoints: {
values: {
xs: 0,
sm: 600,
md: 900,
lg: 1200,
xl: 1536,
},
},
});
theme = responsiveFontSizes(theme);
responsiveFontSizes автоматически масштабирует шрифты
для разных экранов, что улучшает читаемость на мобильных
устройствах.
MUI предлагает множество компонентов с встроенной адаптивностью:
Пример адаптивного Drawer:
import { Drawer, useTheme, useMediaQuery } from '@mui/material';
const theme = useTheme();
const isMobile = useMediaQuery(theme.breakpoints.down('sm'));
<Drawer variant={isMobile ? 'temporary' : 'permanent'}>
Меню
</Drawer>
xs) и
расширять стили для sm, md и выше.Grid и Stack для построения
адаптивной структуры без дублирования стилей.sx для быстрого тестирования responsive
стилей.responsiveFontSizes для улучшения читаемости.Для оптимизации mobile-first интерфейсов важно подбирать изображения
разных размеров и использовать компонент ImageList или
img с srcSet:
<img
srcSet="small.jpg 600w, medium.jpg 900w, large.jpg 1200w"
sizes="(max-width:600px) 100vw, (max-width:900px) 50vw, 33vw"
src="medium.jpg"
alt="Пример изображения"
/>
Это позволяет подгружать изображение подходящего размера в зависимости от устройства, уменьшая трафик и ускоряя загрузку.
Mobile-first в MUI строится на следующих механизмах:
sx для адаптивных стилей.Drawer, AppBar,
Typography).Этот подход обеспечивает оптимальную производительность, улучшает читаемость и пользовательский опыт на мобильных устройствах, сохраняя при этом гибкость для десктопной версии.