css 材料UI卡文本覆盖

cwxwcias  于 2023-05-23  发布在  其他
关注(0)|答案(2)|浏览(113)

我在应用程序中使用Material UI CardCardMedia组件,但不知道如何将文本覆盖在图像上。这是我正在尝试的一个简化示例:

<Card>
   <CardMedia image={this.props.preview} style={styles.media}/>
   <div style={styles.overlay}>
      this text should overlay the image
   </div>
</Card>

const styles = {
   media: {
      height: 0,
      paddingTop: '56.25%' // 16:9
   },
   overlay: {
      position: 'relative',
      top: '20px',
      left: '20px',
      color: 'black',
      backgroundColor: 'white'
   }
}

我试过将文本div放置在CardMedia的上方、下方、内部、完全在Card的外部,并使用不同的位置值,但根本无法解决这个问题。MUI的beta版本在CardMedia上包含了一个overlay属性,但是v1库似乎没有类似的东西。
有谁知道如何正确地做到这一点?提前感谢任何帮助!

kkbh8khc

kkbh8khc1#

你的CSS是关闭的,你需要绝对定位styles.overlay,并确保Card是位置relative
试试这样的东西:

<Card style={styles.card}>
   <CardMedia image={this.props.preview} style={styles.media}/>
   <div style={styles.overlay}>
      this text should overlay the image
   </div>
</Card>

const styles = {
   media: {
      height: 0,
      paddingTop: '56.25%' // 16:9
   },
   card: {
      position: 'relative',
   },
   overlay: {
      position: 'absolute',
      top: '20px',
      left: '20px',
      color: 'black',
      backgroundColor: 'white'
   }
}
d4so4syb

d4so4syb2#

如果你想有一个像0版中的Card一样的覆盖,请使用下面的代码。请记住将容器的位置设置为relative,以便覆盖的absolute位置可以生效:

<Card sx={{ maxWidth: 345 }}>
  <Box sx={{ position: 'relative' }}>
    <CardMedia
      component="img"
      height="200"
      image="https://mui.com/static/images/cards/contemplative-reptile.jpg"
    />
    <Box
      sx={{
        position: 'absolute',
        bottom: 0,
        left: 0,
        width: '100%',
        bgcolor: 'rgba(0, 0, 0, 0.54)',
        color: 'white',
        padding: '10px',
      }}
    >
      <Typography variant="h5">Lizard</Typography>
      <Typography variant="body2">Subtitle</Typography>
    </Box>
  </Box>
  {...}
</Card>

相关问题