【问题标题】:Grid-Template-Areas - Invalid Property Value [duplicate]网格模板区域 - 无效的属性值 [重复]
【发布时间】:2021-06-18 02:14:21
【问题描述】:

我尝试搜索堆栈溢出、mozilla 文档和 CSS 技巧,以找出为什么我的 grid-template-areas 总是得到无效的属性值并且无法弄清楚。有人可以指出我收到此错误消息的原因以及我做错了什么吗?

我正在尝试创建一个计算器。为此,我尝试创建网格单元以将运算符和键号输入其中。

提前致谢。

html, body {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100%;
    width: 100%;
}


#gridContainer {
    border: 1px solid black;
    display: grid;
    grid-template-columns: 4rem 4rem 4rem 4rem;
    grid-template-rows: 6rem 6rem 6rem 6rem 6rem 6rem;
    grid-template-areas: 
    "s s s s"
    "o o o o"
    "n n n o"
    "n n n o"
    "n n n o"
    "z z d c";
}
<html>
<body>
    <div id="gridContainer">
        <div id="screen"></div>
        <button id="clear" class="clear" type="button" value="clear" >AC</button>
        <button id="negativeNumber" class="negative" type="button" value="signs">+ / -</button>
        <button id="percent" class="percentage" type="button" value="percent">%</button>
        <button id="divide" class="operator" type="button" value="/">/</button>
        <button id="seven" class="number" type="button" value="7">7</button>
        <button id="eight" class="number" type="button" value="8">8</button>
        <button id="nine" class="number" type="button" value="9">9</button>
        <button id="multiply" class="operator" type="button" value="*">*</button>
        <button id="four" class="number" type="button" value="4">4</button>
        <button id="five" class="number" type="button" value="5">5</button>
        <button id="six" class="number" type="button" value="6">6</button>
        <button id="subtract" class="operator" type="button" value="-">-</button>
        <button id="one" class="number" type="button" value="1">1</button>
        <button id="two" class="number" type="button" value="2">2</button>
        <button id="three" class="number" type="button" value="3">3</button>
        <button id="addition" class="operator" type="button" value="+">+</button>
        <button id="zero" class="number" type="button" value="0">0</button>
        <button id="decimal" class="number" type="button" value=".">.</button>
        <button id="equals" class="equal" type="button" value="=">=</button>
    </div>
</body>
</html>

【问题讨论】:

    标签: css css-grid


    【解决方案1】:

    使用grid-template-areas 创建CSS Grid 布局时有一些规则。

    1. 您必须描述一个完整的网格,即必须填充网格上的每个单元格。
    2. 每个区域只能定义一次,这意味着您不能使用此属性将内容复制到网格上的两个位置。
    3. 不能创建非矩形区域,否则声明无效。

    违反这些规则将导致您的值无效,因此布局无法正常工作。

    您的grid-template-areas 声明无效的原因是它违反了规则#2。您尝试多次定义每个网格区域并将内容复制到网格上的两个位置。您在第三、第四和第五行复制了区域o。一旦你修复了属性值变得有效。如果需要,请随意更改区域名称,但在使用 grid-template-areas 时请始终牢记上述规则。

    我假设s 代表“屏幕”,o 代表“操作”,n 代表“数字”等等。如果您将第二行定义为让每个区域都为o,例如o o o o,那么您不能在下一行中使用n n n o,因为您通过多次定义网格区域并将内容复制到违反规则#2网格内的两个地方。我更新了你的代码,所以grid-template-areas 声明是有效的。

    html, body {
        margin: 0;
        padding: 0;
        box-sizing: border-box;
        display: flex;
        justify-content: center;
        align-items: center;
        height: 100%;
        width: 100%;
    }
    
    
    #gridContainer {
        border: 1px solid black;
        display: grid;
        grid-template-columns: 4rem 4rem 4rem 4rem;
        grid-template-rows: 6rem 6rem 6rem 6rem 6rem 6rem;
        grid-template-areas: 
                            "s s s s"
                            "O O O O"
                            "o n n n"
                            "o n n n"
                            "o n n n"
                            "z z d c";
    }
    <html>
    <body>
        <div id="gridContainer">
            <div id="screen"></div>
            <button id="clear" class="clear" type="button" value="clear">AC</button>
            <button id="negativeNumber" class="negative" type="button" value="signs">+ / -</button>
            <button id="percent" class="percentage" type="button" value="percent">%</button>
            <button id="divide" class="operator" type="button" value="/">/</button>
            <button id="seven" class="number" type="button" value="7">7</button>
            <button id="eight" class="number" type="button" value="8">8</button>
            <button id="nine" class="number" type="button" value="9">9</button>
            <button id="multiply" class="operator" type="button" value="*">*</button>
            <button id="four" class="number" type="button" value="4">4</button>
            <button id="five" class="number" type="button" value="5">5</button>
            <button id="six" class="number" type="button" value="6">6</button>
            <button id="subtract" class="operator" type="button" value="-">-</button>
            <button id="one" class="number" type="button" value="1">1</button>
            <button id="two" class="number" type="button" value="2">2</button>
            <button id="three" class="number" type="button" value="3">3</button>
            <button id="addition" class="operator" type="button" value="+">+</button>
            <button id="zero" class="number" type="button" value="0">0</button>
            <button id="decimal" class="number" type="button" value=".">.</button>
            <button id="equals" class="equal" type="button" value="=">=</button>
        </div>
    </body>
    </html>

    【讨论】:

    • 确实如此,非常感谢您的澄清!
    • 换句话说,尽管有诱惑,你不能有一个非矩形的网格区域。我自己也掉进了那个陷阱。我想如果你确定你可以有重叠的区域。
    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 2018-04-12
    • 2020-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-06-05
    • 2021-12-28
    • 2019-08-08
    相关资源
    最近更新 更多