reactjs 如何使所有卡的高度是相同的多?

hgqdbh6s  于 2023-04-05  发布在  React
关注(0)|答案(2)|浏览(163)

如何使这张卡的高度是相同的mui?我不喜欢设置一个固定的高度.这将动态需要改变.所有卡的高度需要设置什么是在网站的最高高度.按钮和内容之间,我们可以添加空间为that.how做到这一点?
您似乎面临的问题是,您希望使用Material-UI库创建具有可变内容高度的卡片,但您希望所有卡片具有相同的高度而不设置固定高度。您还希望在按钮和内容之间添加空间。

CODE SAND BOX

function ItemRow({ page_block }) {
    return page_block.map((page_block_item, index) => (
        <Grid
            justifyContent="space-between"
            alignItems="center"
            align="center"
            xs={12}
            sm={6}
            md={4}
            lg={4}
        >
            <Grid
                justifyContent="center"
                // alignItems="center"
                xs={10.5}
                sm={12}
                md={11}
                lg={12}
            >
                <Card page_block_item={page_block_item} key={index} />
            </Grid>
        </Grid>
    ));
}

const Card = ({ page_block_item: block_detail }) => {
    const [open, setOpen] = useState(false);
    const router = useRouter();
    const [cart, setCart] = useAtom(cartAtom);

    return (
        <Grid
            key={block_detail.id}
            justifyContent="center"
            display={'flex'}
            flexGrow={1}
            alignItems="stretch"
        >
            <Box
                sx={{
                    position: 'relative',
                    display: 'flex',
                    flexDirection: 'column',
                    height: '100%',
                    boxShadow: '0px 6px 12px -6px rgba(24, 39, 75, 0.12)',
                }}
                justifyContent="space-between"
                border="1px solid #E3E3E3"
                borderRadius="8px"
                overflow="hidden"
                margin={2}
                flexGrow={1}
                alignItems="stretch"
            >
                <Grid sx={{ position: 'relative' }}>
                    <Grid
                        item
                        position="relative"
                        sx={{ aspectRatio: '3/2', height: '100%' }}
                    >
                        <NextImage
                            className="image-cover"
                            media={block_detail.media}
                        />
                    </Grid>
                    <Box
                        sx={{
                            position: 'absolute',
                            right: 0,
                            bottom: 20,
                        }}
                    >
                        <ShareIcon
                            sx={{
                                background: '#FC916A',
                                marginRight: '15px',
                                padding: '5px',
                                height: '30px',
                                width: '30px',
                                borderRadius: '50%',
                                color: '#FFFFFF',
                                cursor: 'pointer',
                                '&:hover': {
                                    background: '#FFFFFF',
                                    color: '#FC916A',
                                },
                            }}
                        />
                        <BookmarkBorderIcon
                            sx={{
                                background: '#FC916A',
                                marginRight: '15px',
                                padding: '5px',
                                height: '30px',
                                width: '30px',
                                borderRadius: '50%',
                                color: '#FFFFFF',
                                cursor: 'pointer',
                                '&:hover': {
                                    background: '#FFFFFF',
                                    color: '#FC916A',
                                },
                            }}
                        />
                    </Box>
                </Grid>

                <Box
                    sx={{
                        flexGrow: 1,
                        display: 'flex',
                        flexDirection: 'column',
                        height: '100%',
                        maxHeight: 'fix-content',
                    }}
                    padding={2}
                >
                    <Grid item sx={{ textAlign: 'left' }}>
                        <StyledText
                            my={1}
                            variant="H_Regular_Tagline"
                            color="primary.main"
                            content={block_detail.info_title}
                        />
                    </Grid>
                    <Grid item sx={{ textAlign: 'left' }}>
                        <StyledText
                            my={1}
                            variant="H_Regular_Body"
                            color="secondary.dark"
                            content={block_detail.info_description}
                        />
                    </Grid>
                </Box>

                <Grid item sx={{ position: 'relative' }}>

                        <Link
                            href={`/${router.query.centerName}/post/donation/${block_detail?.slug}`}
                        >
                            <StyledButton
                                variant="H_Regular_H4"
                                sx={{ width: '90%' }}
                            >
                                {block_detail.info_action_button?.text}
                            </StyledButton>
                        </Link>
                </Grid>
            </Box>
        </Grid>
    );
};
kzipqqlq

kzipqqlq1#

默认情况下,每个网格项都有相同的最大高度。您可以将网格项下组件的高度设置为100%
下面是一个例子。https://stackblitz.com/edit/react-8qnvck?file=demo.tsx,MediaControlCard.tsx
在本例中,MediaControlCard组件使用Cardsx prop(设置高度为100%)。
如果删除sx属性,您将看到与您的案例类似的属性。
而且我认为你不需要在Box组件中使用display:flex。因为如果你使用display:flex,你就不会对height:100%生效。

nr7wwzry

nr7wwzry2#

你必须添加以下属性到.MuiCard-root

.MuiCard-root{
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    height: 100%;
}

其他方法为:

.MuiCard-root{
     display: flex;
     flex-direction: column;
}
.MuiCardActions-root{
     margin-top: auto;
}

How to make Material-UI CardActions always stick to the bottom of parent
Same Height Cards in Material UI
从这些链接中得到了答案。希望,它可能会有所帮助。

相关问题