美文网首页
CSS Grid 布局

CSS Grid 布局

作者: 石木君 | 来源:发表于2019-08-02 11:10 被阅读0次

    参考资料

    CSS Grid 布局是 CSS 中最强大的布局系统。与 flexbox 的一维布局系统不同,CSS Grid 布局是一个二维布局系统,也就意味着它可以同时处理列和行。通过将 CSS 规则应用于 父元素 (成为 Grid Container 网格容器)和其 子元素(成为 Grid Items 网格项),你就可以轻松使用 Grid(网格) 布局。

    简介

    CSS Grid(网格) 布局(又称为 “Grid(网格)” ),是一个二维的基于网格的布局系统,它的目标是完全改变我们基于网格的用户界面的布局方式。CSS 一直用来布局我们的网页,但一直以来都存在这样或那样的问题。一开始我们用表格(table),然后是浮动(float),再是定位(postion)和内嵌块(inline-block),但是所有这些方法本质上都是只是 hack 而已,并且遗漏了很多重要的功能(例如垂直居中)。Flexbox 的出现很大程度上改善了我们的布局方式,但它的目的是为了解决更简单的一维布局,而不是复杂的二维布局(实际上 Flexbox 和 Grid 能协同工作,而且配合得非常好)。

    基础知识和浏览器支持

    首先,你必须使用 display: grid 将容器元素定义为一个 grid(网格) 布局,使用 grid-template-columns 和 grid-template-rows 设置 列 和 行 的尺寸大小,然后通过 grid-column 和 grid-row 将其子元素放入这个 grid(网格) 中。与 flexbox 类似,网格项(grid items)的源(HTML结构)顺序无关紧要。你的 CSS 可以以任何顺序放置它们,这使得使用 媒体查询(media queries)重新排列网格变得非常容易。定义整个页面的布局,然后完全重新排列布局以适应不同的屏幕宽度,这些都只需要几行 CSS ,想象一下就让人兴奋。Grid(网格) 布局是有史以来最强大的 CSS 模块之一。

    // 事例代码
    .container{
        display: grid;  // 生成一个块级网格
        display: inline-grid; // 生成一个内联网格
        grid-template-columns: 40px 50px auto 50px 40px;
        grid-template-rows: 25% 100px auto;
    }
    
    
    • grid-template-columns / grid-template-rows

    使用空格分隔的值列表,用来定义网格的列和行。这些值表示 网格轨道(Grid Track) 大小,它们之间的空格表示网格线。

    • <track-size>: 可以是长度值,百分比,或者等份网格容器中可用空间(使用 fr 单位)
    • <line-name>:你可以选择的任意名称
    .container {
      grid-template-columns: <track-size> ... | <line-name> <track-size> ...;
      grid-template-rows: <track-size> ... | <line-name> <track-size> ...;
    }
    

    但是你可以明确的指定网格线(Grid Line)名称,例如 <line-name> 值。请注意网格线名称的括号语法:

    .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];
    }
    

    请注意,一条网格线(Grid Line)可以有多个名称。例如,这里的第二条 行网格线(row grid lines) 将有两个名字: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]);
    }
    // 等价于
    .container {
      grid-template-columns: 20px [col-start] 20px [col-start] 20px [col-start];
    }
    

    如果多行共享相同的名称,则可以通过其网格线名称和计数来引用它们。

    .item {
      grid-column-start: col-start 2;
    }
    

    fr 单元允许你用等分网格容器剩余可用空间来设置 网格轨道(Grid Track) 的大小 。例如,下面的代码会将每个网格项设置为网格容器宽度的三分之一:

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

    剩余可用空间是除去所有非灵活网格项 之后 计算得到的。在这个例子中,可用空间总量减去 50px 后,再给 fr 单元的值 3 等分:

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

    相关文章

      网友评论

          本文标题:CSS Grid 布局

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