В библиотеке MUI (Material-UI) компонент Box представляет собой фундаментальный строительный блок интерфейсов. Его можно рассматривать как “швейцарский нож” для верстки, так как он объединяет возможности контейнера, стилизованного элемента и обертки для других компонентов. Основная идея Box — предоставлять единый интерфейс для управления стилями, отступами, размерами и позиционированием, используя sx-проп и другие встроенные свойства.
Box позволяет управлять:
m,
mt, mb, mx, my,
p, pt, pb и т.д.display, flex, grid,
alignItems, justifyContent.bgcolor,
color.border,
borderRadius, boxShadow.sx.Пример базового использования:
import Box from '@mui/material/Box';
<Box
sx={{
width: 300,
height: 200,
bgcolor: 'primary.main',
color: 'white',
p: 2,
borderRadius: 2,
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
}}
>
Контент в центре
</Box>
Box идеально подходит для построения flex-контейнеров:
<Box
sx={{
display: 'flex',
gap: 2,
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'center'
}}
>
<Box sx={{ bgcolor: 'secondary.main', p: 1 }}>Элемент 1</Box>
<Box sx={{ bgcolor: 'secondary.main', p: 1 }}>Элемент 2</Box>
<Box sx={{ bgcolor: 'secondary.main', p: 1 }}>Элемент 3</Box>
</Box>
Для grid-сеток:
<Box
sx={{
display: 'grid',
gridTemplateColumns: 'repeat(3, 1fr)',
gap: 2
}}
>
<Box sx={{ bgcolor: 'warning.main', p: 2 }}>A</Box>
<Box sx={{ bgcolor: 'warning.main', p: 2 }}>B</Box>
<Box sx={{ bgcolor: 'warning.main', p: 2 }}>C</Box>
</Box>
Свойство gap работает одинаково для flex и grid, упрощая
создание расстояний между элементами.
sx для динамических стилейsx — это основной инструмент
Box для стилизации. Он позволяет писать объекты стилей
в стиле JavaScript с поддержкой темизации MUI:
<Box
sx={{
p: 3,
bgcolor: theme => theme.palette.mode === 'dark' ? 'grey.900' : 'grey.100',
borderRadius: 1,
'&:hover': {
bgcolor: 'primary.light'
}
}}
>
Динамический стиль
</Box>
sx:<Box
sx={{
width: {
xs: 100, // до 600px
sm: 200, // 600–900px
md: 300 // от 900px
},
bgcolor: 'success.main'
}}
>
Адаптивный Box
</Box>
Box часто используется как оболочка для других компонентов MUI, чтобы добавить отступы, тень, фон или размеры без изменения исходного компонента:
<Box sx={{ p: 2, boxShadow: 3, borderRadius: 2 }}>
<Button variant="contained">Кнопка</Button>
</Box>
Это позволяет централизованно управлять стилями и избегать избыточного CSS.
Box полностью интегрирован с system props, что позволяет:
fontSize,
fontWeight, lineHeight.position, top, left,
right, bottom.border,
borderColor, boxShadow.Пример сложного Box:
<Box
sx={{
p: 4,
m: 2,
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
bgcolor: 'background.paper',
border: 1,
borderColor: 'grey.300',
borderRadius: 2,
boxShadow: 5,
typography: 'h6'
}}
>
Сложная обертка
</Box>
div, section, контейнеры flex и grid.sx.Box становится центральным инструментом при построении интерфейсов в MUI, обеспечивая гибкость и единообразие кода, одновременно сокращая количество компонентов и сложность верстки.