如何为所有Material-UI组件添加填充和边距?

ros*_*ani 12 customization node.js reactjs material-ui

我需要为一些Material-UI组件添加填充或边距,但找不到一种简单的方法.我可以将这些属性添加到所有组件吗?这样的事情:

<Button color="default" padding={10} margin={5}>
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用纯CSS和类,但我想用Material-UI方式做.

Mig*_*dan 53

您可以通过先导入组件在 BOX 组件中使用 de "Spacing":

import Box from '@material-ui/core/Box';
Run Code Online (Sandbox Code Playgroud)

Box 组件用作要“修改”间距的组件的“包装器”。

然后您可以在组件上使用下一个属性:

space 实用程序将速记边距和填充道具转换为边距和填充 CSS 声明。道具使用格式 {property}{sides} 命名。

财产是以下之一:

m - 用于设置边距的类 p - 用于设置填充的类

其中边是以下之一:

t - 对于设置 margin-top 或 padding-top 的类

b - 对于设置 margin-bottom 或 padding-bottom 的类

l - 对于设置 margin-left 或 padding-left 的类

r - 对于设置 margin-right 或 padding-right 的类

x - 对于同时设置 *-left 和 *-right 的类

y - 对于同时设置 *-top 和 *-bottom 的类

空白 - 用于在元素的所有 4 个边上设置边距或填充的类

举个例子:

<Box m={2} pt={3}>
  <Button color="default">
    Your Text
  </Button>
</Box>
Run Code Online (Sandbox Code Playgroud)

  • 这意味着多次使用“Box”组件。这个推荐程度如何? (4认同)
  • 对于那些对 m={2} pt={3} 感到困惑的人。这些基本上与主题中设置的间距相关。例如,如果您有像 const theme = {pacing: 8, } m ={2} 将所有边距设置为 8*2 pt={3} 将填充顶部设置为 8*3 (2认同)
  • @oskrgg:文档和各种其他资源说“Box”(没有任何“component”装饰)是“div”的简写。它尝试将每个提供的 prop 映射到其“div”的相应 CSS 属性。这通常有助于将此类道具保留在“代码”空间中,而不是迫使开发人员查找和更改样式、主题等。这个特殊的答案让我觉得这是一个推荐的、适当的用途。总的来说,“Box”并不比添加一个“div”差。 (2认同)
  • @TomStambaugh 也许提问者想为“Button”添加一个真正的填充。向“Box”组件包装器添加填充就像向“Button”添加边距。 (2认同)

Nea*_*arl 14

在 Material-UI v5 中,可以使用sxprops 更改按钮样式。您可以在此处查看边距/填充系统属性及其等效的 CSS 属性。

<Button sx={{ m: 2 }} variant="contained">
  margin
</Button>
<Button sx={{ p: 2 }} variant="contained">
  padding
</Button>
<Button sx={{ pt: 2 }} variant="contained">
  padding top
</Button>
<Button sx={{ px: 2 }} variant="contained">
  padding left, right
</Button>
<Button sx={{ my: 2 }} variant="contained">
  margin top, bottom
</Button>
Run Code Online (Sandbox Code Playgroud)

如果您想快速构建组件原型,则属性简写如mp是可选的,如果您希望代码更具可读性,则可以使用普通的 CSS 属性。

下面的代码与上面的代码等效,但使用 CSS 属性:

<Button sx={{ m: 2 }} variant="contained">
  margin
</Button>
<Button sx={{ p: 2 }} variant="contained">
  padding
</Button>
<Button sx={{ pt: 2 }} variant="contained">
  padding top
</Button>
<Button sx={{ px: 2 }} variant="contained">
  padding left, right
</Button>
<Button sx={{ my: 2 }} variant="contained">
  margin top, bottom
</Button>
Run Code Online (Sandbox Code Playgroud)

现场演示

编辑52124938/如何向所有材质UI组件添加填充和边距


Sak*_*oor 7

Material-UI's styling solution uses JSS at its core. It's a high performance JS to CSS compiler which works at runtime and server-side.

import { withStyles} from '@material-ui/core/styles';

const styles = theme => ({
  buttonPadding: {    
    padding: '30px',   
  },
});

function MyButtonComponent(props) {
  const { classes } = props;

  return (      
      <Button
        variant="contained"
        color="primary"
        className={classes.buttonPadding}
      >
        My Button
      </Button>
  );
}

export default withStyles(styles)(MyButtonComponent);
Run Code Online (Sandbox Code Playgroud)

You can inject styles with withStyle HOC into your component. This is how it works and it's very much optimized.

EDITED: To apply styles across all components you need to use createMuiTheme and wrap your component with MuiThemeprovider

const theme = createMuiTheme({
  overrides: {
    MuiButton: {
      root: {
        margin: "10px",
        padding: "10px"
      }
    }
  }
});

 <MuiThemeProvider theme={theme}>
  <Button variant="contained" color="primary">
    Custom CSS
  </Button>

  <Button variant="contained" color="primary">
    MuiThemeProvider
  </Button>

  <Button variant="contained" color="primary">
    Bootstrap
  </Button>
</MuiThemeProvider>
Run Code Online (Sandbox Code Playgroud)

  • “ MuiButton”参考来自何处?这是来自某些MUI API吗?为什么不选择“按钮”? (4认同)
  • 是的,它适用于特定组件。但是,如何为所有MUI组件声明这些道具? (2认同)
  • 我不想为所有组件添加填充和边距。我需要添加这些属性来为每个组件自定义它。 (2认同)
  • “我可以将这些属性添加到所有组件吗”这是您的问题陈述 (2认同)

小智 7

import Box from '@material-ui/core/Box';

<Box m={1} p={2}>
  <Button color="default">
    Your Text
  </Button>
</Box>
Run Code Online (Sandbox Code Playgroud)

  • 请不要仅发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带解释的答案通常质量更高,更有可能吸引点赞。 (21认同)