美文网首页
Grid布局

Grid布局

作者: 遠_ | 来源:发表于2018-07-14 18:07 被阅读0次

    重要术语

    在深入了解网格的概念之前,理解术语是很重要的。 由于这里所涉及的术语在概念上都是相似的,如果不先记住它们在网格规范中定义的含义,则很容易将它们彼此混淆。 但是不用太担心,这些术语并不多。

    Grid Containe

    设置了 display: gird 的元素。 这是所有 grid item 的直接父项。 在下面的例子中,.container 就是是 grid container。

    <div class="container">
      <div class="item item-1"></div>
      <div class="item item-2"></div>
      <div class="item item-3"></div>
    </div>
    
    Grid Item

    Grid 容器的孩子(直接子元素)。下面的 .item 元素就是 grid item,但 .sub-item不是。

    <div class="container">
      <div class="item"></div> 
      <div class="item">
        <p class="sub-item"></p>
      </div>
      <div class="item"></div>
    </div>
    
    Grid Line

    这个分界线组成网格结构。 它们既可以是垂直的(“column grid lines”),也可以是水平的(“row grid lines”),并位于行或列的任一侧。 下面例中的黄线就是一个列网格线。


    Grid Track

    两个相邻网格线之间的空间。 你可以把它们想象成网格的列或行。 下面是第二行和第三行网格线之间的网格轨道。


    Grid Cell

    两个相邻的行和两个相邻的列网格线之间的空间。它是网格的一个“单元”。 下面是行网格线1和2之间以及列网格线2和3的网格单元。


    Grid Area

    四个网格线包围的总空间。 网格区域可以由任意数量的网格单元组成。 下面是行网格线1和3以及列网格线1和3之间的网格区域。



    Grid 属性列表

    Grid Container 的全部属性

    • display
    • grid-template-columns
    • grid-template-rows
    • grid-template-areas
    • grid-template
    • grid-column-gap
    • grid-row-gap
    • grid-gap
    • justify-items
    • align-items
    • justify-content
    • align-content
    • grid-auto-columns
    • grid-auto-rows
    • grid-auto-flow
    • grid

    Grid Items 的全部属性

    • grid-column-start
    • grid-column-end
    • grid-row-start
    • grid-row-end
    • grid-column
    • grid-row
    • grid-area
    • justify-self
    • align-self

    父容器(Grid Container)的属性

    display

    将元素定义为 grid contaienr,并为其内容建立新的网格格式化上下文(grid formatting context)。
    值:

    • grid - 生成一个块级(block-level)网格
    • inline-grid - 生成一个行级(inline-level)网格
    • subgrid - 如果你的 grid container 本身就是一个 grid item(即,嵌套网格),你可以使用这个属性来表示你想从它的父节点获取它的行/列的大小,而不是指定它自己的大小。
    .container {
      display: grid | inline-grid | subgrid;
    }
    

    注意:column, float, clear, 以及 vertical-align 对一个 grid container 没有影响

    grid-template-columns / grid-template-rows

    使用以空格分隔的多个值来定义网格的列和行。这些值表示轨道大小(track size),它们之间的空格代表表格线(grid line)。

    .container {
      grid-template-columns: <track-size> ... | <line-name> <track-size> ...;
      grid-template-rows: <track-size> ... | <line-name> <track-size> ...;
    }
    

    例子:

    (如果未显示的给网格线命名),轨道值之间仅仅有空格时,网格线会被自动分配数字名称:

    .container {
      grid-template-columns: 40px 50px auto 50px 40px;
      grid-template-rows: 25% 100px auto;
    }
    

    但你可以给网格线指定确切的命名。 注意中括号里的网格线命名语法:

    .container {
      grid-template-columns: [first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];
      grid-template-rows: [row1-start] 25% [row1-end] 100px [third-line] auto [last-line];
    }
    

    需要注意的是,一个网格线可以有不止一个名字。例如,这里第2条网格线有两个名字:row1-end 和 row2-start:

    .container {
      grid-template-rows: [row1-start] 25% [row1-end row2-start] 25% [row2-end];
    }
    

    如果你的定义中包含重复的部分,则可以使用repeat() 符号来简化写法:

    .container {
      grid-template-columns: repeat(3, 20px [col-start]) 5%;
    }
    

    上面的写法和下面等价:

    .container {
      grid-template-columns: 20px [col-start] 20px [col-start] 20px [col-start] 5%;
    }
    

    “fr”单位允许您将轨道大小设置为网格容器自由空间的一部分。 例如,下面的代码会将每个 grid item 为 grid container 宽度的三分之一:

    .container {
      grid-template-columns: 1fr 1fr 1fr;
    }
    

    自由空间是在排除所有不可伸缩的 grid item 之后计算得到的。 在下面的示例中,fr单位可用的自由空间总量不包括50px:

    .container {
      grid-template-columns: 1fr 50px 1fr 1fr;
    }
    

    参考链接-饥人谷Grid布局使用详解

    相关文章

      网友评论

          本文标题:Grid布局

          本文链接:https://www.haomeiwen.com/subject/jjvypftx.html