网格布局

CSS Grid现在已经被W3C纳入到CSS3的一个布局模块当中,被称为**CSS Grid Layout Module
现阶段网页布局不再是传统方式,使用float或者是position实现各种页面布局,大家也在追求新的,更加简单,更加灵活的布局方法,除去之前火的一塌糊涂的响应式框架,大家更应该关注两种新的布局写法:1、display-flex(弹性盒子)2、grid(网格)。
flex布局的话大家可以去看阮一峰写的《Flex 布局教程:语法篇》、《Flex 布局教程:实例篇》,写的非常详细,通熟易懂。

什么是CSS Grid?

CSS Grid Layout是CSS为布局新增的一个模块。网格布局特性主要是针对于Web应用程序的开发者。可以用这个模块实现许多不同的布局。网络布局可以将应用程序分割成不同的空间,或者定义他们的大小、位置以及层级。
就像表格一样,网格布局可以让Web设计师根据元素按列或行对齐排列,但他和表格不同,网格布局没有内容结构,从而使各种布局不可能与表格一样。例如,一个网格布局中的子元素都可以定位自己的位置,这样他们可以重叠和类似元素定位。

CSS Grid兼容性

caniuse查询结果

基本概念

1、网格线
网格线组成了网格,是网格的水平和垂直的分界线。一个网格线存在行或列的两侧。我们可以引用它的数目或者定义的网格线名称。

网格线

2、网格轨道
网格轨道是就是相邻两条网格线之间的空间,就好比表格中行或列。所在在网格中其分为grid column和grid row。每个网格轨道可以设置一个大小,用来控制宽度或高度。

网格轨道

3、网格单元格
网格单元格是指四条网格线之间的空间。所以它是最小的单位,就像表格中的单元格。

网格单元格

4、网格区域
网格区域是由任意四条网格线组成的空间,所以他可能包含一个或多个单元格。相当于表格中的合并单元格之后的区域。

网格区域

5、网格容器
通过使用display属性给元素显式设置了属性值grid或inline-grid,此时这个元素将自动变成网格容器。这个类似于flexbox一样,将元素设置设置为display:flex,元素将自动变成弹性盒模型。
6、网格单元格顺序
跟flex布局一样,通过order属性来对网格单父元格进行顺序重排。

定义网格

父元素设置display:grid;或者是display:inline-grid;即可

基于网格线的占位区

网格中的单元格是由网格线划分出来的,那么我们就可以灵活的使用网格线来划分出我们需要的单元格;
网格布局中,网格线有两种:一种是行线,一种是列线,对应的每个单元格都有列线起始线(grid-column-start),列线终止线(grid-column-end),行线起始线(grid-row-start),行线终止线(grid-row-end)。
代码如下:

  <div class="container">
        <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代码如下:

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

显示如下:

Paste_Image.png

这种方式可以让元素显示在任意的位置,比如让a和f对调一下位置

  .a {
        grid-column-start: 3;
        grid-column-end: 4;
        grid-row-start: 3;
        grid-row-end: 4;
    }
.f {
        grid-column-start: 1;
        grid-column-end: 2;
        grid-row-start: 1;
        grid-row-end: 2;
    }

效果如下:

Paste_Image.png

比之前我们写代码既节省时间,逻辑又十分简单。

觉得上述写法比价复杂的话,可以用简写的方式进行书写:
代码如下:

        .a {
            grid-column: 3 / 4;
            grid-row: 3 / 4;
        }
        
        .b {
            grid-column: 3 / 4;
            grid-row: 1 / 2;
        }
        
        .c {
            grid-column: 5 / 6;
            grid-row: 1 / 2;
        }
        
        .d {
            grid-column: 7 / 8;
            grid-row: 1 / 2;
        }
        
        .e {
            grid-column: 1 / 2;
            grid-row: 3 / 4;
        }
        
        .f {
            grid-column: 1 / 2;
            grid-row: 1 / 2;
        }
        
        .g {
            grid-column: 5 / 6;
            grid-row: 3 / 4;
        }
        
        .h {
            grid-column: 7 / 8;
            grid-row: 3 / 4;
        }
        
        .i {
            grid-column: 1 / 2;
            grid-row: 5 / 6;
        }
        
        .j {
            grid-column: 3 / 4;
            grid-row: 5 / 6;
        }

有没有更简单的写法呢?
有,还记得网格区域吗?一个单元格也是一个简单的网格区域,网格区域也是由四条网格线组成,顺序是row-start / column-start / row-end / column-end 。
那么上面的代码我们又可以简写成:

        .a {
            grid-area: 1 / 1 / 2 / 2;
        }
        
        .b {
            grid-area: 1 / 3 / 2 /4;
        }
        
        .c {
            grid-area: 1 / 5 / 2 / 6;
        }
        
        .d {
            grid-area: 1 / 7 / 2 / 8;
        }
        
        .e {
            grid-area: 3 / 1 / 4 / 2;
        }
        
        .f {
            grid-area: 3 / 3 / 4 / 4;
        }
        
        .g {
            grid-area: 3 / 5 / 4 / 6;
        }
        
        .h {
            grid-area: 3 / 7 / 4 / 8;
        }
        
        .i {
            grid-area: 5 / 1 / 6 / 2;
        }
        
        .j {
            grid-area: 5 / 3 / 6 / 4;
        }

合并单元格

下面是一个简单的布局页面:

Paste_Image.png

用上面的方式我们可以这样写:

         .a {
            grid-column: 1 / 6;
            grid-row: 1 / 2;
        }
        
        .b {
            grid-column: 7 / 8;
            grid-row: 1 / 10;
            background: orange;
        }
        
        .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;
        }
        
        .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;
        }
        
        .j {
            grid-column: 1 / 6;
            grid-row: 9 / 10;
        }

效果如下图:

Paste_Image.png

除了使用网格线进行合并布局之外,我们还可以使用span这个关键字来进行合并单元格,按我的想法这个span可以理解成跨越 ,并且要记得start的位置;
例如:

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

如果用span这个关键字可以写成:

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

从1开始算 跨越5个距离就是6 所以写成span 5;
另外span1 可以省略不写;
所以还可以写成:

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

注意span和数组中间要留有空格;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 简介 CSS Grid布局 (又名"网格"),是一个基于二维网格布局的系统,旨在改变我们基于网格设计的用户界面方式...
    咕咚咚bells阅读 2,481评论 0 4
  • 原文地址 注:此文是我翻译的第一篇技术文章。适合有一定CSS原生网格布局使用经验的开发者(读前需要先去了解一下原生...
    我不叫沒耐性阅读 739评论 0 2
  • 前言 温馨提示:本文较长,图片较多,本来是想写一篇 CSS 布局方式的,但是奈何 CSS 布局方式种类太多并且实现...
    sunshine小小倩阅读 3,116评论 0 59
  • 简介CSS网格布局(又称“网格”),是一种二维网格布局系统。CSS在处理网页布局方面一直做的不是很好。一开始我们用...
    _leonlee阅读 64,910评论 25 173
  • 近几年,Flexbox的出现,带来了巨大的轰动效应,它使CSS变得更加强大,给我们带来了更大的施展空间,并在几乎所...
    咕咚咚bells阅读 1,390评论 0 2