CSS Grid Layout Module

CSS Grid Layout Module

什么是Grid

  • 定义:根据元素按列或行对齐排列,但是和table不同的是,格网里面的内容可以定位自己的位置
  • flexbox是一维布局,他只能在一条直线上放置你的内容区块;而grid是一个二维布局。我没有仔细了解过flexbox,所以这个是参考网上的文章记录的。以后学习了,在写自己的想法吧。
  • 组成
    • 网格线 Grid Lines
    • 网格轨道 Grid Track 在网格中分为grid column和grid row
    • 网格单元 Grid Cell
    • 网格区域 Grid Area
    • 网格单元格顺序 order
  • 由于网格容器不是块容器,所以有部分属性在网格布局中将会失效:
    多列布局模块中的所有column-*属性运用在网格容器上将失效
    float和clear使用在网格项目(网格单元格Grid Cell)上将失效
    vertical-align使用在网格单元格上将失效
    ::first-line和::first-letter这样的伪元素不能应用在网格容器上

开启浏览器Grid

网格单元布局

定义一个网格

HTML 简单点说就是一个三行三列的网格,并且列(宽为100px)与列之间,行(高度为auto)与行之间的间距都是10px。

    <div class="wrapper">
        <div class="box a">A</div>
        <div class="box b">B</div>
        <div class="box c">C</div>
        <div class="box d">D</div>
        <div class="box e">E</div>
        <div class="box f">F</div>
        <div class="box g">G</div>
        <div class="box h">H</div>
        <div class="box i">I</div>
        <div class="box j">J</div>
    </div>

CSS

    body {
        padding: 50px;
    }
    .wrapper {
        display: grid;
        grid-template-columns: 100px 10px 100px 10px 100px;
        grid-template-rows: auto 10px auto;
    }
    .box {
        background-color: #444;
        color: #fff;
        font-size: 150%;
        padding: 20px;
    }
    .b,.d,.g,.i {
        background-color:red;
    }

对应的子元素.a、.c、.e、.f、.h和.j列宽度为100px(也就是黑色区域),而.b、.d、.g和.i是列与列的间距10px(也就是红色区域)。而且当子元素在一行填不下时,就会自动换行,如.f~.j自动换到第二行显示。

基于网格线的占位区

CSS

    body{
        padding:50px;
    }
    .wrapper{
        display:grid;
        grid-template-columns:100px 10px 100px 10px 100px 10px 100px;
        grid-template-rows:auto 10px auto 10px auto;
    }
    .box{
        color:#fff;
        font-size: 150%;
        padding: 20px;
        text-align: center;
    }
    .a{
        grid-column-start:1;
        grid-column-end:2;
        grid-row-start:1;
        grid-row-end:2;
        background-color:red;
    }
    .b{
        grid-column-start:3;
        grid-column-end:4;
        grid-row-start:1;
        grid-row-end:2;
        background-color:yellow
    }
    .c{
        grid-column-start:5;
        grid-column-end:6;
        grid-row-start:1;
        grid-row-end:2;
        background-color:green;
    }
    .d{
        grid-column-start:7;
        grid-column-end:8;
        grid-row-start:1;
        grid-row-end:2;
        background-color:blue;
    }
    .e{
        grid-column-start:1;
        grid-column-end:2;
        grid-row-start:3;
        grid-row-end:4;
        background-color:orange;
    }
    .f{
        grid-column-start:3;
        grid-column-end:4;
        grid-row-start:3;
        grid-row-end:4;
        background-color:pink;
    }
    .g{
        grid-column-start:5;
        grid-column-end:6;
        grid-row-start:3;
        grid-row-end:4;
        background-color:gray;
    }
    .h{
        grid-column-start:7;
        grid-column-end:8;
        grid-row-start:3;
        grid-row-end:4;
        background-color:black;
    }
    .i{
        grid-column-start:1;
        grid-column-end:2;
        grid-row-start:5;
        grid-row-end:6;
        background-color:lightgreen;
    }
    .j{
        grid-column-start:3;
        grid-column-end:4;
        grid-row-start:5;
        grid-row-end:6;
        background-color:purple;
    }

数字表示所占网格的起始以及结束的行线和列线,这样的定位便于交换位置
网格线的简写方式,就是grid-column和grid-row的start与end值合并在一起,两者之间用/来分隔

    .a{
        grid-column: 1 / 2; 
        grid-row: 1 / 2;
    }

网格区域实现元素占位区

组成网格区域的网格线顺序是row-start/column-start/row-end/column-end。每个网格线之间也是使用/来分隔。

 .a{
        grid-area: 1 / 1 / 2 / 2;
    }

合并单元格布局

CSS

    body{
            padding:50px;
        }
        .wrapper{
            display: grid;
            grid-template-columns: 100px 10px 100px 10px 100px 10px 100px;
            grid-template-rows:auto 10px auto 10px auto 10px auto 10px auto;
        }
        .box{
            background-color: #444;
            color:#fff;
            font-size: 150%;
            padding: 20px;
            text-align: center;
        }
        .a{
            grid-column:1/6;
            grid-row:1/2;
            background-color:#564577;
        }
        .b{
            grid-column:7/8;
            grid-row:1/10;
            background-color: #995457;
        }
        .c{
            grid-column:1/2;
            grid-row:3/4;
        }
        .d{
            grid-column:3/4;
            grid-row:3/4;
        }
        .e{
            grid-column:5/6;
            grid-row:3/4;
        }
        .f{
            grid-column:1/4;
            grid-row:5/6;
            background-color: #778821;
        }
        .g{
            grid-column:5/6;
            grid-row:5/6;
        }
        .h{
            grid-column:1/2;
            grid-row:7/8;
        }
        .i{
            grid-column:3/6;
            grid-row:7/8;
            background-color: #434526;
        }
        .j{
            grid-column:1/6;
            grid-row:9/10;
            background-color: #678342;
        }

在资料上写的.b类没有实现跨行,可能是现在的浏览器纠正了吧,不用span也可以实现跨行了。使用span就是1/6 是指3格 所以从第一条线开始还需要span 5条线

自定义网格线名称

    .wrapper {
        display: grid;
        grid-template-columns: (col1-start) 100px (col1-end) 10px (col2-start) 100px (col2-end) 10px (col3-start) 100px (col3-end) 10px (col4-start) 100px (col4-end);
        grid-template-rows: (row1-start) auto (row1-end) 10px (row2-start) auto (row2-end) 10px (row3-start) auto (row3-end) 10px (row4-start) auto (row4-end) 10px (row5-start) auto (row5-end);
    }

自定义网格线配合关键词span合并单元格

在实际使用中,可以在网格内容轨道前的网格线都定义为col,而在列间距轨道前的网格线都定义为gutter。在调用时,可以使用col 来指定开始的网格线,配合关键词span 来指写网格的跨度。

    .wrapper {
        display: grid;
        grid-template-columns: (col) 100px (gutter) 10px (col) 100px (gutter) 10px (col) 100px (gutter) 10px (col) 100px (gutter) 10px (col) 100px (gutter) 10px (col) 100px (gutter); 
        grid-template-rows: (row) auto (gutter) 10px (row) auto (gutter) 10px (row) auto (gutter) 10px (row) auto;
    }

    .a{
        grid-column: col / span gutter 2; 
        grid-row: row;
    }
    .b {
        grid-column: col 3 / span gutter 2; 
        grid-row: row;
    }

我自己测试了一下,没有成功,而且我觉得好像更麻烦,所以,我也是不懂咯~~

repeat关键词

    .wrapper {
        display: grid;
        grid-template-columns:repeat(6, (col) 100px (gutter) 10px); 
        grid-template-rows: repeat(4, (row) auto (gutter) 10px );
    }

6个col,和6个gutter;6个row,和6个gutter

网格区域合并单元格

    .b{
        grid-area:1/7/10/8;
        /*grid-column:7/span 1;
        grid-row:1/10;*/
        background-color: #995457;
    }

参考资料上说,合并行无法直接实现,我现在测试以后是可以实现的。(●’◡’●)

虽然大致了解了grid的原理,但是还是不是很清楚怎么去实际运用,比如和媒体查询结合,而且好像浏览器支持也不太好,所以,还需要阅读更多的更深入的文章继续学习。

PS:csdn的markdown编辑器里是好好的,可是展示出来为什么就什么都不好了呢!!!!丑死了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值