Библиотека MUI (Material-UI) предоставляет мощный
инструмент для стилизации компонентов через объект
sx, который позволяет задавать
CSS-свойства непосредственно в компоненте без необходимости создавать
отдельные классы или использовать внешние файлы стилей. Объект
sx поддерживает синтаксис JavaScript, что
делает его интеграцию с динамическими данными и условной логикой простой
и удобной.
sxОбъект sx представляет собой обычный JavaScript-объект,
где ключами являются CSS-свойства в camelCase, а
значениями — строки, числа или функции. Пример базового
использования:
<Box sx={{
width: 300,
height: 100,
backgroundColor: 'primary.main',
padding: 2
}} />
Ключевые моменты:
width, height — числовые значения
интерпретируются как пиксели.backgroundColor — может ссылаться на тему MUI
(theme.palette).padding: 2 — использует единицы
spacing, определенные в теме
(theme.spacing(2)).sxОбъект sx тесно интегрирован с темой
MUI, что позволяет ссылаться на палитру цветов, типографику,
отступы и другие параметры темы:
<Box sx={{
color: 'secondary.main',
fontSize: 'h6.fontSize',
m: 3, // margin через spacing
borderRadius: 1
}} />
color: 'secondary.main' — автоматически подтягивает
цвет из theme.palette.secondary.main.fontSize: 'h6.fontSize' — обращение к предустановленным
размерам заголовков.m: 3 — сокращение для margin, применяет
theme.spacing(3).borderRadius — тоже может использовать значения темы,
например, theme.shape.borderRadius.Объект sx поддерживает breakpoints для
адаптивного дизайна:
<Box sx={{
width: {
xs: '100%', // мобильные устройства
sm: '50%', // планшеты
md: '25%' // десктоп
},
padding: {
xs: 1,
md: 3
}
}} />
xs, sm, md,
lg, xl соответствуют стандартным брейкпоинтам
темы.px, %).Объект sx позволяет работать с
CSS-псевдоклассами и вложенными селекторами:
<Button sx={{
backgroundColor: 'primary.main',
'&:hover': {
backgroundColor: 'primary.dark'
},
'& .MuiButton-startIcon': {
marginRight: 1
}
}} />
&:hover — стили при наведении.& .MuiButton-startIcon — вложенный селектор для
дочернего элемента.Значение в sx может быть функцией, принимающей
тему как аргумент. Это позволяет строить динамические
зависимости от темы или состояния:
<Box sx={(theme) => ({
color: theme.palette.mode === 'dark' ? 'grey.100' : 'grey.900',
bgcolor: theme.palette.background.paper,
padding: theme.spacing(2),
borderRadius: theme.shape.borderRadius
})} />
theme.palette.mode позволяет менять стили в зависимости
от светлой или темной темы.sx гибким
инструментом для сложной логики.shorthand)MUI поддерживает ряд сокращений для быстрого задания отступов, размеров и других свойств:
| Сокращение | Поле CSS | Пример |
|---|---|---|
m |
margin | m: 2 → margin: theme.spacing(2) |
mt, mr, mb,
ml |
margin-top/right/bottom/left | mt: 1 |
p |
padding | p: 3 → padding: theme.spacing(3) |
px, py |
padding-x / padding-y | px: 2 |
mx, my |
margin-x / margin-y | mx: 1 |
Эти сокращения ускоряют работу с объектом sx и делают
код компактнее.
sx поддерживает большинство
CSS-свойств, включая сложные, такие как display,
flex, grid, textOverflow,
transition и т.д.:
<Box sx={{
display: 'flex',
flexDirection: 'column',
justifyContent: 'center',
alignItems: 'center',
textOverflow: 'ellipsis',
overflow: 'hidden',
whiteSpace: 'nowrap'
}} />
sx с классами и styled-componentsМожно комбинировать объект sx с классами
CSS или компонентами styled:
<Button className="custom-btn" sx={{ bgcolor: 'success.main', color: 'white' }}>
Подтвердить
</Button>
sx всегда имеет приоритет над классами
при конфликте стилей.Объект sx объединяет возможности:
Использование sx позволяет писать чистый, модульный и
легко поддерживаемый код, минимизируя необходимость в отдельных стилевых
файлах и повышая гибкость интерфейсов.