尽我所能,我无法理解这里给出的描述。
Box 组件用作大多数 CSS 实用程序需求的包装器组件。
什么是 CSS 实用程序需求?
这个组件的用例是什么?它解决什么问题?你如何使用它?
我发现 MUI 文档非常有限且难以理解。我用谷歌搜索过,但通常只能找到关于如何使用 Material UI 的相当轻量级的博客文章。除了帮助理解这个组件之外,我真的很感激任何好的资源(比如他们自己文档的更好版本,如果存在的话)。
(背景,我大体了解React、JS、CSS、HTML等,后两者实力较弱)。
尽我所能,我无法理解这里给出的描述。
Box 组件用作大多数 CSS 实用程序需求的包装器组件。
什么是 CSS 实用程序需求?
这个组件的用例是什么?它解决什么问题?你如何使用它?
我发现 MUI 文档非常有限且难以理解。我用谷歌搜索过,但通常只能找到关于如何使用 Material UI 的相当轻量级的博客文章。除了帮助理解这个组件之外,我真的很感激任何好的资源(比如他们自己文档的更好版本,如果存在的话)。
(背景,我大体了解React、JS、CSS、HTML等,后两者实力较弱)。
编辑:这是在 MUI v4 时代写的。在 MUI v5 中,所有 MUI 组件都允许您通过sxprop定义 CSS 样式,而不仅仅是Box; 但Box也接受顶层和sx.
其他答案并没有真正解释使用Box.
Box呈现一个<div>可以应用CSS样式直接通过阵营props,为方便起见,因为像单独的CSS文件的替代品,CSS-在-JS,或者内嵌样式可以输入更多的文字和轻松使用。
例如,考虑这个使用 JSS 的组件:
import * as React from 'react'
import { makeStyles } from '@material-ui/styles'
const useStyles = makeStyles(theme => ({
root: {
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
padding: theme.spacing(1),
}
}))
const Example = ({children, ...props}) => {
const classes = useStyles(props);
return (
<div className={classes.root}>
{children}
</div>
)
}
Box通过传递你想要的props来做到这一点要短得多:
import * as React from 'react'
import Box from '@material-ui/core/Box'
const Example = ({children}) => (
<Box display="flex" flexDirection="column" alignItems="stretch" padding={1}>
{children}
</Box>
)
还要注意如何padding={1}是 的简写theme.spacing(1)。 Box为使用此类 Material-UI 主题提供各种便利。
在较大的文件中,与样式就在元素上相比,在渲染元素和样式之间来回跳转可能会更麻烦。
情况下,你不会想使用Box(MUI V4):
classes(makeStyles启用此功能。 <Example classNames={{ root: 'alert' }} />在makeStyles示例中有效,但在Box示例中无效。)$root > li > a, $root .third-party-class-name)ABox就是这样,一个盒子。它是一个包裹在其内容周围的元素,它本身不包含样式规则,对视觉输出也没有任何默认效果。但它是根据需要放置样式规则的地方。它不提供任何真正的功能,只是一个用于控制分层标记结构中样式的占位符。
从结构上讲,它导致<div>.
我经常认为它在语义上类似于 JSX 空元素:
<>
Some elements here
</>
因为它用于对事物进行分组。但它会导致<div>并且可以包含一些 Material UI 功能:
<Box className={classes.someStyling}>
Some elements here
</Box>
Material UI 中的 Box 组件它有很多有用的东西
最重要的是 box 元素默认内置了 material-ui/system 功能,这意味着如果您将其用作包装器,您可以将系统功能应用于您需要的内容
像这个例子:
<Box bgcolor="primary.main" color="primary.contrastText" p={2}>
primary.main
</Box>
对于核心,您可以根据需要向其添加 css 类
它提供的另一个有用的东西可以在其他组件中扭曲,并且非常有助于将系统功能应用于它
像这个例子:
<Typography component="div" variant="body1">
<Box color="primary.main">primary.main</Box>
</Typography>
上面的两个示例都是我从文档中获取的,您可以在此链接中找到它们:here
你可以找到我所说的材料 ui 系统功能的意思:这里
注意:您可以将任何材料 ui 系统功能添加到任何组件,例如此处的文档,但我建议您使用 box 组件扭曲您需要的内容,它使生活更轻松
ABox基本上是div类固醇上的*。Box允许您div像内联样式一样非常快速地将动态样式应用于其他正常的样式(但它不是内联样式)。除此之外,它还与MUI主题进行了一流的集成:
<Box
sx={{
bgcolor: 'primary.main',
color: 'text.secondary',
border: 4,
borderRadius: 2,
px: 2,
fontWeight: 'fontWeightBold',
zIndex: 'tooltip',
boxShadow: 8,
}}
>
Box
</Box>
如果您需要使用 normal 执行上述操作div,则必须theme使用useThemehook获取对象并创建内联样式,如果到处滥用,这不是一个好习惯:
<div
style={{
backgroundColor: theme.palette.primary.main,
color: theme.palette.text.secondary,
border: '4px solid black',
borderRadius: theme.shape.borderRadius * 2,
padding: `0 ${theme.spacing(2)}`,
fontWeight: theme.typography.fontWeightBold,
zIndex: theme.zIndex.tooltip,
boxShadow: theme.shadows[8],
}}
>
div
</div>
Box在其他组件中,例如Typography或Stack还支持系统属性,允许您将样式值传递给顶级props,从而导致代码更短。在内部,系统属性被收集并与sxprops合并,因此它们是相同的(有关更多详细信息,请参阅此答案)
<Box
bgcolor="primary.main"
color="text.secondary"
border={4}
borderRadius={2}
px={2}
fontWeight="fontWeightBold"
zIndex="tooltip"
boxShadow={8}
>
Box
</Box>
因为Box利用了sxprops,您还可以使用sx添加响应值等功能:
<Box
display={{
xs: 'none',
sm: 'block',
}}
width={{
sm: 30,
md: 50,
lg: 100,
}}
>
或创建嵌套样式:
<Box
display='flex'
sx={{
'& > :not(:last-child)': {
mr: 2 // maginRight: theme.spacing(2)
},
':hover': {
bgcolor: 'green'
}
}}
>
Box?div快速创建样式原型时。sx语法非常紧凑的事实。sx属性都是开箱即用的主题感知属性。Box?div那就用普通的吧。sxprop 的性能最慢(比第二慢的方法慢 2 倍)sx支持,因此Box如果您只想设置其他 MUI 组件的样式,则无需将其用作包装器或根组件。*:默认情况下 aBox是 a div,但您可以覆盖它的根组件。例如:<Box component='span'>