html - 由 css 网格提供支持的 "complex"矩阵样式网格是否可能?

标签 html css material-ui css-grid

我目前正在尝试使用 css 网格在 Material-UI 中实现以下网格结构:

Desired complex layout

我已经使用 Material-UI 创建了一个 css 网格,如下所示:

Current layout

这是属于它的代码:

import React from "react";
import clsx from "clsx";
import { makeStyles } from "@material-ui/core/styles";
import { Container } from "@material-ui/core";

const useStyles = makeStyles(theme => ({
    container: {
        marginTop: theme.spacing(8),
        display: "grid",
        gridTemplateColumns: "repeat(6, 56px)",
        gridAutoRows: "56px",
        gridGap: theme.spacing(0.5),
    },
    purple: {
        background: "#e502f9",
        color: "#ffffff",
        height: "100%",
    },
    orange: {
        background: "#f98202",
        color: "#ffffff",
        height: "100%",
        gridColumnStart: "2",
    },
    lightGrey: {
        background: "#d8d8d8",
        height: "100%",
    },
    topLabel: {
        gridColumnStart: "3",
        gridColumnEnd: "span 4",
    },
    sideLabel: {
        gridRowStart: "3",
        gridRowEnd: "span 4",
        writingMode: "vertical-rl",
        transform: "rotate(180deg)",
    },
    align: {
        alignItems: "center",
        display: "flex",
        justifyContent: "center",
        textAlign: "center",
    },
}));

function ExamplePage() {
    const classes = useStyles();

    return (
        <Container component="main" maxWidth="xs">
            <div className={classes.container}>
                <div />
                <div className={clsx(classes.topLabel, classes.align)}>
                    Text x-axis
                </div>
                <div className={clsx(classes.sideLabel, classes.align)}>
                    Text y-axis
                </div>

                <div />
                <div />
                <div className={clsx(classes.purple, classes.align)}>1</div>
                <div className={clsx(classes.purple, classes.align)}>2</div>
                <div className={clsx(classes.purple, classes.align)}>3</div>
                <div className={clsx(classes.purple, classes.align)}>4</div>

                <div className={clsx(classes.orange, classes.align)}>A</div>
                <div className={clsx(classes.lightGrey, classes.align)}>4</div>
                <div className={clsx(classes.lightGrey, classes.align)}>4</div>
                <div className={clsx(classes.lightGrey, classes.align)}>4</div>
                <div className={clsx(classes.lightGrey, classes.align)}>4</div>

                <div className={clsx(classes.orange, classes.align)}>B</div>
                <div className={clsx(classes.lightGrey, classes.align)}>3</div>
                <div className={clsx(classes.lightGrey, classes.align)}>3</div>
                <div className={clsx(classes.lightGrey, classes.align)}>3</div>
                <div className={clsx(classes.lightGrey, classes.align)}>3</div>

                <div className={clsx(classes.orange, classes.align)}>C</div>
                <div className={clsx(classes.lightGrey, classes.align)}>2</div>
                <div className={clsx(classes.lightGrey, classes.align)}>2</div>
                <div className={clsx(classes.lightGrey, classes.align)}>2</div>
                <div className={clsx(classes.lightGrey, classes.align)}>2</div>

                <div className={clsx(classes.orange, classes.align)}>D</div>
                <div className={clsx(classes.lightGrey, classes.align)}>1</div>
                <div className={clsx(classes.lightGrey, classes.align)}>1</div>
                <div className={clsx(classes.lightGrey, classes.align)}>1</div>
                <div className={clsx(classes.lightGrey, classes.align)}>1</div>
            </div>
        </Container>
    );
}

export default ExamplePage;

还有人知道如何以编程方式在网格中的某处设置蓝点吗?我不确定这在 CSS 网格中是否可行?

最佳答案

正如@Michael_B 所述,网格区域必须是矩形的。因此,不可能创建更复杂的布局。

关于html - 由 css 网格提供支持的 "complex"矩阵样式网格是否可能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56768035/

相关文章:

javascript - 如何将 Material-UI 网格项目显示为不显示为卡片?

html - 是否可以组成 HTML 标签?

javascript - <audio>的 "preload"属性是否影响window.onload事件时间?

javascript - 如果用户在我的 X 元素内单击,则不显示我的测试消息

css - @Html.DisplayFor - 根据显示中的数据更改背景颜色

reactjs - "Cannot read property ' offsetWidth ' of null"使用 Material UI 对话框时

javascript - 如何选择非空值输入并隐藏输入并显示另一个输入?

css - Windows 上的 CSS 更少

javascript - HTML "Range"输入问题

css - Material UI - 删除所有样式