CSS 网格并指定多个区域

use*_*993 4 css css-grid

我需要一些元素重叠,我还想通过区域名称而不是行/列来指定内容,因为这样可以更好地阅读。

我一生都无法理解如何按照 MDN 示例指定多个网格区域。或者,如果它甚至可能,文章根据语法示例建议它可能,但它实际上是如何工作的?一点线索都没有。

示例问题:

document.querySelector("input").focus();
Run Code Online (Sandbox Code Playgroud)
#my_grid {
  display:grid;
  grid-gap:5px;
  grid-template-rows: 50px 50px 50px;
  grid-template-columns: 50px 50px 50px;
  grid-template-areas:  "a b c"
                        "d e f"
                        "g h i";

}

#my_grid > div {
  text-align:center;
  line-height:50px;
  border:1px solid rgba(0,0,0,0.3);
  background-color:rgba(0,0,0,0.1);
}
Run Code Online (Sandbox Code Playgroud)
<div id="my_grid">
  <div style="grid-area:a">a</div>
  <div style="grid-area:b">b</div>
  <div style="grid-area:c">c</div>
  <div style="grid-area:d">d</div>
  <div style="grid-area:e">e</div>
  <div style="grid-area:f">f</div>
  <div style="grid-area:g">g</div>
  <div style="grid-area:h">h</div>
  <div style="grid-area:i">i</div>
  <input type="text" onKeyUp="this.style.gridArea = this.value" style="grid-area:d / e" value="d / e">
</div>

Type your own area
Run Code Online (Sandbox Code Playgroud)

我希望我的输入同时涵盖区域 d 和 e,指定 d / e 只是将其放在 e 中。

Tem*_*fif 10

您需要指定 4 个值,例如grid-area: d / d / d / e

grid-row-start: d;
grid-column-start: d; /* Start at d */
grid-row-end: d;
grid-column-end: e; /* End at e */
Run Code Online (Sandbox Code Playgroud)

grid-row-start: d;
grid-column-start: d; /* Start at d */
grid-row-end: d;
grid-column-end: e; /* End at e */
Run Code Online (Sandbox Code Playgroud)
document.querySelector("input").focus();
Run Code Online (Sandbox Code Playgroud)
#my_grid {
  display:grid;
  grid-gap:5px;
  grid-template-rows: 50px 50px 50px;
  grid-template-columns: 50px 50px 50px;
  grid-template-areas:  "a b c"
                        "d e f"
                        "g h i";

}

#my_grid > div {
  text-align:center;
  line-height:50px;
  border:1px solid rgba(0,0,0,0.3);
  background-color:rgba(0,0,0,0.1);
}
Run Code Online (Sandbox Code Playgroud)

grid-area: d / e您只有两个值:

grid-row-start: d;
grid-column-start: e;
grid-row-end: d;
grid-column-end: e; 
Run Code Online (Sandbox Code Playgroud)

因此,这基本上会将元素定位在存在的行d和存在的列的交叉处e(只有一个单元格是e)。

grid-area: a / ic例如,会让你进入该区域。

多网格区域

规范

grid-template-areas 属性从模板中的命名网格区域生成隐式分配的线名。对于每个命名的网格区域foo,会创建四个隐式分配的行名称:两个 named foo-start,命名命名网格区域的行开始和列开始行,以及两个 named foo-end,命名网格区域的行结束和列结束行命名网格区域。

然后

<custom-ident>

首先尝试将网格区域的边缘与命名的网格区域匹配:如果存在名称为<custom-ident>-start(for grid-*-start) / <custom-ident>-end(for grid-*-end)的命名线,则将第一条这样的线贡献到网格项的位置。