【问题标题】:CSS grid and specifying multiple areasCSS网格并指定多个区域
【发布时间】:2019-05-21 13:01:56
【问题描述】:

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

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

示例问题:

document.querySelector("input").focus();
#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);
}
<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

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

【问题讨论】:

    标签: css css-grid


    【解决方案1】:

    您需要指定 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 */
    

    document.querySelector("input").focus();
    #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);
    }
    <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 / d / d / e" value="d / d / d / e">
    </div>
    
    Type your own area

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

    grid-row-start: d;
    grid-column-start: e;
    grid-row-end: d;
    grid-column-end: e; 
    

    所以这基本上会将元素定位在有d的行和有e的列的交叉点(只有一个单元格是e)。

    grid-area: a / i 会将您置于c 区域。

    来自 the specification:

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

    然后

    &lt;custom-ident&gt;

    第一次尝试将网格区域的边缘与命名网格区域匹配:如果存在名称为 &lt;custom-ident&gt;-start(对于 grid-*-start)/&lt;custom-ident&gt;-end(对于 grid-*-end)的命名线,则贡献第一个这样的行到网格项目的位置。

    【讨论】:

      猜你喜欢
      • 2021-09-02
      • 2021-11-12
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      • 2019-05-14
      • 1970-01-01
      • 2019-01-13
      相关资源
      最近更新 更多