【发布时间】:2020-10-15 03:10:09
【问题描述】:
当我看到一个使用 Material UI 实现的设计时,部分标题、表单标签、输入字段等之间总是有一些垂直空间。似乎有几种方法可以实现这一点:
- 将每个
<Typography />、<Checkbox />等包裹在<Box paddingBottom={2} />中。 - 为每个带有间距的元素创建一个类,例如
const useStyles = makeStyles(theme => ({ subHeader: { marginBottom: theme.spacing(2) } }));
...
const classes = useStyles();
...
<Typography className={classes.subHeader} />
- 使用内联样式,例如
const theme = useTheme();
<Typography style={{ marginBottom: theme.spacing(2) }} />
这些方法在我看来都不合适。
第一个在你的 HTML 代码中添加了很多额外的divs,并保证相邻的概念元素永远不会相邻;它们总是嵌套的。
<div class="MuiBox-root">
<span class="MuiTypography-root" />
</div>
<div class="MuiBox-root">
<span class="MuiTypography-root" />
</div>
使用第二个,您最终会创建许多相当无意义的类,以适应每个元素下方需要不同的间距,纯粹出于设计/美学原因,而不是语义原因,例如带有marginBottom: 2 的类和带有marginBottom: 3 的类。
第三个选项似乎很有意义,因为将间距逻辑提取到可重用代码中似乎有点过头了,但内联样式通常不受欢迎,并且必须在每个组件中调用 const theme = useTheme() 似乎并不正确。
TLDR; 在 Material UI 中垂直间隔组件的推荐方式是什么?
【问题讨论】:
-
您不满意纯粹出于审美原因创建类,也不满意使用内联样式,但实际上只有这两种方法可以做到。无需担心出于美学原因创建类,您将永远无法从语义上证明每一个设计和间距细节的合理性。
-
也就是说,想要避免创建一堆都做
marginBottom: 2的类是完全合理的。为此,您可以在组件之间共享makeStyles钩子
标签: reactjs material-ui