如何使 MUI 中的组件居中并使其响应?
How to center a component in MUI and make it responsive?
我不太了解 React Material-UI 网格系统。如果我想使用表单组件进行登录,在所有设备(移动和桌面)上将其置于屏幕中心最简单的方法是什么?
您只需将内容包装在 Grid Container 标签中,指定间距,然后将实际内容包装在 Grid Item 标签中。
<Grid container spacing={24}>
<Grid item xs={8}>
<leftHeaderContent/>
</Grid>
<Grid item xs={3}>
<rightHeaderContent/>
</Grid>
</Grid>
此外,我在 material 网格方面遇到了很多问题,我建议您检查自动内置于 CSS 中的 flexbox,并且您不需要任何附加包即可使用。它非常容易学习。
另一种选择是:
<Grid container justify = "center">
<Your centered component/>
</Grid>
因为您要在登录页面上使用它。
这是我在使用 Material-UI
的登录页面中使用的代码
MUIv5
<Grid
container
spacing={0}
direction="column"
alignItems="center"
justifyContent="center"
style={{ minHeight: '100vh' }}
>
<Grid item xs={3}>
<LoginForm />
</Grid>
</Grid>
MUIv4及以下
<Grid
container
spacing={0}
direction="column"
alignItems="center"
justify="center"
style={{ minHeight: '100vh' }}
>
<Grid item xs={3}>
<LoginForm />
</Grid>
</Grid>
这将使此登录表单位于屏幕中央。
但是,IE 仍然不支持 Material-UI 网格,您会在 IE 中看到一些错位的内容。
正如@max 所指出的,另一种选择是,
<Grid container justifyContent="center">
<Your centered component/>
</Grid>
请注意,MUIv4 及以下版本应改用 justify="center"。
但是,使用不带网格项的网格容器是一种未记录的行为。
希望对您有所帮助。
@Nadun 的版本对我不起作用,大小不合适。删除了 direction="column"
或将其更改为 row
,有助于构建具有响应式大小的垂直登录表单。
<Grid
container
spacing={0}
alignItems="center"
justify="center"
style={{ minHeight: "100vh" }}
>
<Grid item xs={6}></Grid>
</Grid>;
这是另一个没有网格的选项:
<div
style={{
position: 'absolute',
left: '50%',
top: '50%',
transform: 'translate(-50%, -50%)'
}}
>
<YourComponent/>
</div>
您可以使用 Box 组件执行此操作:
import Box from "@material-ui/core/Box";
...
<Box
display="flex"
justifyContent="center"
alignItems="center"
minHeight="100vh"
>
<YourComponent/>
</Box>
在使用了其他答案的情况下,xs='auto' 帮了我一个忙。
<Grid container
alignItems='center'
justify='center'
style={{ minHeight: "100vh" }}>
<Grid item xs='auto'>
<GoogleLogin
clientId={process.env.REACT_APP_GOOGLE_CLIENT_ID}
buttonText="Log in with Google"
onSuccess={this.handleLogin}
onFailure={this.handleLogin}
cookiePolicy={'single_host_origin'}
/>
</Grid>
</Grid>
小更新 07-09-2021 'justify' 现在是 'justifyContent="center"'
就这样style={{display:'flex';justifyContent:'center';alignItems:'center'}}
如果您只需要在 MUI v5 的行或列中居中放置几个项目,您可以使用 Stack
而不是 Grid
:
<Stack alignItems="center">
<Item>Item 1</Item>
<Item>Item 2</Item>
<Item>Item 3</Item>
</Stack>
行方向的另一个例子:
<Stack direction="row" justifyContent="center">
<Item>Item 1</Item>
<Item>Item 2</Item>
<Item>Item 3</Item>
</Stack>
现场演示
对我来说最通用的解决方案是结合使用 container 和 item 道具。
container 和 item 道具是两个独立的布尔值;它们可以结合起来,使 Grid 组件既是弹性容器又是子容器。
网格 MUI 文档 - https://mui.com/material-ui/react-grid/#responsive-values
<Grid container alignContent={'center'} xs={12}>
<Grid container item xs={6} justifyContent={'start'}>
<span> content one </span>
</Grid>
<Grid container item xs={6} justifyContent={'center'}>
<span> content two </span>
</Grid>
</Grid>
我不太了解 React Material-UI 网格系统。如果我想使用表单组件进行登录,在所有设备(移动和桌面)上将其置于屏幕中心最简单的方法是什么?
您只需将内容包装在 Grid Container 标签中,指定间距,然后将实际内容包装在 Grid Item 标签中。
<Grid container spacing={24}>
<Grid item xs={8}>
<leftHeaderContent/>
</Grid>
<Grid item xs={3}>
<rightHeaderContent/>
</Grid>
</Grid>
此外,我在 material 网格方面遇到了很多问题,我建议您检查自动内置于 CSS 中的 flexbox,并且您不需要任何附加包即可使用。它非常容易学习。
另一种选择是:
<Grid container justify = "center">
<Your centered component/>
</Grid>
因为您要在登录页面上使用它。 这是我在使用 Material-UI
的登录页面中使用的代码MUIv5
<Grid
container
spacing={0}
direction="column"
alignItems="center"
justifyContent="center"
style={{ minHeight: '100vh' }}
>
<Grid item xs={3}>
<LoginForm />
</Grid>
</Grid>
MUIv4及以下
<Grid
container
spacing={0}
direction="column"
alignItems="center"
justify="center"
style={{ minHeight: '100vh' }}
>
<Grid item xs={3}>
<LoginForm />
</Grid>
</Grid>
这将使此登录表单位于屏幕中央。
但是,IE 仍然不支持 Material-UI 网格,您会在 IE 中看到一些错位的内容。
正如@max 所指出的,另一种选择是,
<Grid container justifyContent="center">
<Your centered component/>
</Grid>
请注意,MUIv4 及以下版本应改用 justify="center"。
但是,使用不带网格项的网格容器是一种未记录的行为。
希望对您有所帮助。
@Nadun 的版本对我不起作用,大小不合适。删除了 direction="column"
或将其更改为 row
,有助于构建具有响应式大小的垂直登录表单。
<Grid
container
spacing={0}
alignItems="center"
justify="center"
style={{ minHeight: "100vh" }}
>
<Grid item xs={6}></Grid>
</Grid>;
这是另一个没有网格的选项:
<div
style={{
position: 'absolute',
left: '50%',
top: '50%',
transform: 'translate(-50%, -50%)'
}}
>
<YourComponent/>
</div>
您可以使用 Box 组件执行此操作:
import Box from "@material-ui/core/Box";
...
<Box
display="flex"
justifyContent="center"
alignItems="center"
minHeight="100vh"
>
<YourComponent/>
</Box>
在使用了其他答案的情况下,xs='auto' 帮了我一个忙。
<Grid container
alignItems='center'
justify='center'
style={{ minHeight: "100vh" }}>
<Grid item xs='auto'>
<GoogleLogin
clientId={process.env.REACT_APP_GOOGLE_CLIENT_ID}
buttonText="Log in with Google"
onSuccess={this.handleLogin}
onFailure={this.handleLogin}
cookiePolicy={'single_host_origin'}
/>
</Grid>
</Grid>
小更新 07-09-2021 'justify' 现在是 'justifyContent="center"'
就这样style={{display:'flex';justifyContent:'center';alignItems:'center'}}
如果您只需要在 MUI v5 的行或列中居中放置几个项目,您可以使用 Stack
而不是 Grid
:
<Stack alignItems="center">
<Item>Item 1</Item>
<Item>Item 2</Item>
<Item>Item 3</Item>
</Stack>
行方向的另一个例子:
<Stack direction="row" justifyContent="center">
<Item>Item 1</Item>
<Item>Item 2</Item>
<Item>Item 3</Item>
</Stack>
现场演示
对我来说最通用的解决方案是结合使用 container 和 item 道具。
container 和 item 道具是两个独立的布尔值;它们可以结合起来,使 Grid 组件既是弹性容器又是子容器。
网格 MUI 文档 - https://mui.com/material-ui/react-grid/#responsive-values
<Grid container alignContent={'center'} xs={12}>
<Grid container item xs={6} justifyContent={'start'}>
<span> content one </span>
</Grid>
<Grid container item xs={6} justifyContent={'center'}>
<span> content two </span>
</Grid>
</Grid>