[英]How to create MUI Dialog with transparent background color?
我正在尝试使用 MUI 创建加载状态指示器。 但我希望对话框的背景颜色为none
,并且还想调整高度。 但是我无法通过他们提供的样式选项来做到这一点。 任何解决方案?
代码如下所示:
<Dialog
open={true}
style={{width: '200px', marginLeft: '40%', backgroundColor: 'transparent'}}
title= 'Loading'
titleStyle={{paddingTop: '0px', paddingLeft: '45px', fontSize: '15px', lineHeight: '40px'}}
>
<RefreshIndicator
style= {{display: 'inline-block'}}
size={50}
left={50}
top={30}
loadingColor="#FF9800"
status="loading"
/>
</Dialog>
在材料 v4 或最新版本中。 您可以使用BackdropProps
,请参阅在线演示
对于最新版本( "@material-ui/core": "^1.2.3"
),以下是它的完成方式:
<Dialog
{...otherProps}
PaperProps={{
style: {
backgroundColor: 'transparent',
boxShadow: 'none',
},
}}
>
{/* ... your content ... */}
</Dialog>
记下新的PaperProps
道具。 它不在文档中,但是如果你查看源代码,他们使用PaperProps
作为你可以传递的道具之一 - 因为这不在文档中,但是这可能会随着未来的版本而改变,所以在这里要小心。
您可以在Dialog上设置overlayStyle prop以更改背景颜色,如下所示:
<Dialog
open={true}
style={{width: '200px', marginLeft: '40%', backgroundColor: 'transparent'}}
overlayStyle={{backgroundColor: 'transparent'}}
title= 'Loading'
titleStyle={{paddingTop: '0px', paddingLeft: '45px', fontSize: '15px', lineHeight: '40px'}}
>
直接你可以使用带有css属性, zIndex
和opacity
CircularProgress
,试试这个:
<CircularProgress size={2} style={Styles.mainLoader}/>
mainLoader: {
position: 'absolute',
paddingTop: '15%',
width: '100%',
height: '100%',
zIndex: 1000,
backgroundColor: '#000000',
opacity: 0.5,
textAlign: 'center',
}
它将以.5不透明度和指定背景覆盖整个屏幕。
您可以直接使用组件CircularProgress
(而不是使用Dialog
构建loding指示器: http : //www.material-ui.com/#/components/circular-progress
您可以将加载指示器放在位于页面中间的div
中:
JSX:
<div className="my-spinner">
<CircularProgress size={59.5} />
</div>
CSS:
.my-spinner {
position: absolute;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-
}
像这样使用bodyStyle道具:
<Dialog
bodyStyle={{margin:0, padding:0}}
open={true}
style={{width: '200px', marginLeft: '40%', backgroundColor: 'transparent'}}
title= 'Loading'
titleStyle={{paddingTop: '0px', paddingLeft: '45px', fontSize: '15px', lineHeight: '40px'}}
>
<RefreshIndicator
style= {{display: 'inline-block'}}
size={50}
left={50}
top={30}
loadingColor="#FF9800"
status="loading"
/>
</Dialog>
您不必使用透明的Dialog
,MUI 会公开Dialog
在幕后使用的Backdrop
组件。 Backdrop
让您可以将任何内容放在变暗的图层中,而无需处理物理容器:
<Backdrop
sx={{ color: '#fff', zIndex: (theme) => theme.zIndex.drawer + 1 }}
open={open}
onClick={handleClose}
>
<Stack gap={1} justifyContent="center" alignItems="center">
<CircularProgress color="inherit" />
<Typography>Loading...</Typography>
</Stack>
</Backdrop>
无论您是否可以使用作为Dialog<\/a>的低级组件的Modal<\/a>本身,或者您可以坚持使用 Dialog 它都适用。
<Modal BackdropProps={{ style: { backgroundColor: "green" } }} ></Modal>
另一个可能的替代方案(取决于您想要实现的目标)是避免为Dialog
容器使用Paper
组件。 例如,如果您改用Box
组件,用户将看不到它:
<Dialog
className="MyDialog"
open={!!openProp}
onClose={handleDialogClose}
maxWidth="xl"
PaperComponent={Box}
>
请注意,默认情况下它仍将包含一个“不可见”的填充(如果您使用fullWidth
,甚至会覆盖大部分屏幕),这可能会让用户感到困惑,因为在这个不可见的范围内单击时对话框不会关闭零件。
<Dialog
open={true}
style={{width: '200px', marginLeft: '40%', backgroundColor: 'transparent'}}
title= 'Loading'
titleStyle={{paddingTop: '0px', paddingLeft: '45px', fontSize: '15px', lineHeight: '40px'}}
BackdropProps={{invisible: true}}
>
<RefreshIndicator
style= {{display: 'inline-block'}}
size={50}
left={50}
top={30}
loadingColor="#FF9800"
status="loading"
/>
</Dialog>
删除 backgroundColor: 'transparent' 并添加 BackdropProps={{invisible: true}}
如果您使用的是styled-components
,
我们也可以通过.MuiDialog-paper
class来覆盖更多的CSS方式,如下:
import styled from "styled-components";
import { Dialog } from "@mui/material";
const StyledDialog = styled(Dialog)`
& .MuiDialog-paper {
background-color: transparent !important;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.