В библиотеке MUI (Material-UI) система стилей sx
предоставляет мощный инструмент для управления визуальным представлением
компонентов с учётом адаптивности. Адаптивные значения
позволяют задавать разные стили в зависимости от размеров экрана, что
делает интерфейсы гибкими и удобными для устройств с различными
разрешениями.
Адаптивные значения в sx реализуются через объект,
ключами которого являются breakpoints, а значениями —
соответствующие CSS-свойства. Базовая структура выглядит так:
<Box
sx={{
width: {
xs: '100%', // экран <600px
sm: '50%', // экран ≥600px
md: '33%', // экран ≥900px
lg: '25%', // экран ≥1200px
xl: '20%' // экран ≥1536px
}
}}
/>
Здесь xs, sm, md,
lg и xl — стандартные точки останова MUI,
задаваемые по умолчанию. Значения этих ключей автоматически применяются
при переходе через соответствующую ширину экрана.
MUI создает медиазапросы для каждого указанного breakpoint. Например,
для свойства width:
xs — базовое значение для всех экранов;sm — применяется, когда ширина экрана ≥ 600px;md — применяется, когда ширина экрана ≥ 900px;Если для конкретного breakpoint значение не указано, применяется значение ближайшего меньшего breakpoint.
Адаптивные значения можно задавать через массив, где порядок элементов соответствует последовательности breakpoints:
<Box
sx={{
padding: [1, 2, 3, 4, 5] // xs, sm, md, lg, xl
}}
/>
1 — для xs;2 — для sm;3 — для md;4 — для lg;5 — для xl.Массивы удобны для коротких адаптивных настроек, когда значения следуют по порядку breakpoints.
Можно смешивать объектный и массивный синтаксис, например:
<Box
sx={{
fontSize: {
xs: '0.8rem',
sm: '1rem',
md: '1.2rem'
},
margin: [0.5, 1, 1.5] // xs, sm, md
}}
/>
Это позволяет гибко управлять различными стилевыми параметрами одновременно.
Sx поддерживает функции, что позволяет вычислять
значения на лету в зависимости от темы или пропсов:
<Box
sx={(theme) => ({
color: theme.palette.primary.main,
fontSize: {
xs: theme.typography.pxToRem(12),
sm: theme.typography.pxToRem(14),
md: theme.typography.pxToRem(16)
}
})}
/>
Использование функции дает доступ к объекту theme, что
особенно полезно для единообразного масштабирования и соблюдения
дизайн-системы.
Можно применять медиазапросы не только к числовым свойствам
(width, padding), но и к другим
CSS-свойствам:
displayflexDirectionalignItemsjustifyContentfontSizemargin / paddingcolor и другиеПример изменения структуры layout:
<Box
sx={{
display: 'flex',
flexDirection: {
xs: 'column',
md: 'row'
},
gap: 2
}}
/>
На маленьких экранах элементы будут располагаться вертикально, на больших — горизонтально.
md перекроет sm, если оба
указаны.sx работают независимо от классов CSS, но их можно
комбинировать для более сложной стилизации.theme) можно динамически подбирать значения, что
повышает консистентность UI.Адаптивные значения крайне полезны при разработке:
Использование sx с адаптивными значениями значительно
сокращает код и делает стили более читаемыми, устраняя необходимость
писать длинные CSS-медиа-запросы вручную.