Grid布局

作者: lyp82nkl | 来源:发表于2019-06-29 22:14 被阅读0次

前言

CSS 网格布局(Grid Layout) 是CSS中最强大的布局系统。 这是一个二维系统,这意味着它可以同时处理列和行,不像 flexbox 那样主要是一维系统。 你可以通过将CSS规则应用于父元素(成为网格容器)和该元素的子元素(网格元素),来使用网格布局。

需要将容器元素定义为一个网格

display:grid

重要术语

Grid Container

设置了 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 属性

gird-template-columns/grid-template-rows

.container {
  width: 400px;
  height: 300px;
  border: 1px solid red;
  
  display: grid;
  gird-template-columns: 40px 50px auto 50px 40px;
  grid-template-rows: 25% 100px auto;
}

还可以给网格线命名,一个网格线可以不止一个名字,如下第二个网格线有两个名字

.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"允许将轨道大小设置为自由空间,如下则是将container除去50px后的空间分为1/3:

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

grid-template-areas

通过grid-area属性来命名网格区域的名称

  • <grid-area-name> - 使用 grid-area 属性设置的网格区域的名称
  • .- 点号代表一个空网格单元
  • none - 没有定义网格区域
.container {
  width: 400px;
  height: 300px;
  border: 1px solid red;
  display: grid;
  grid-template-columns: 50px 50px auto 50px;
  grid-template-rows: auto;
  grid-template-areas: 
    "header header header header"
    "main main . aside"
    "footer footer footer footer";
}
.header {
  grid-area: header;
  background: red;
}
.main {
  grid-area: main;
  background: blue;
}
.aside {
  grid-area: aside;
  background: yellow;
}
.footer {
  grid-area: footer;
  background: grey;
}

grid-template

在单个声明中定义 grid-template-rows、grid-template-columns、grid-template-areas 的简写。

.container {
  display: grid;
  
 /*  grid-template-columns: 50px 50px auto 50px;
  grid-template-rows: 50px auto 50px;
  grid-template-areas: 
    "header header header header"
    "main main . aside"
    "footer footer footer footer"; */
  grid-template: 
    "header header header header" 50px 
    "main main . aside" auto
    "footer footer footer footer" 50px
    / 50px 50px auto 50px;
}

grid-column-gap / grid-row-gap

设置行列的缝隙

  grid-column-gap: 10px;
  grid-row-gap: 15px;

justify-items / align-items / justify-content / align-content

用法和flex布局类似,暂不介绍

grid-auto-columns / grid-auto-rows

制定自动生成的轨道的大小

grid-auto-flow

如果你存在没有显示指明放置在网格上的 grid item,则自动放置算法会自动放置这些项目

grid

是所有的简写,和grid-template相似

grid-column / grid-row

.item {
  grid-column: <start-line> / <end-line> | <start-line> / span <value>;
  grid-row: <start-line> / <end-line> | <start-line> / span <value>;
}

栗子:

.container {
  width: 400px;
  height: 300px;
  border: 1px solid red;
  display: grid; 
  grid: 50px auto 50px / 10% auto 10%;
}
.header {
  grid-column: 1/ span 3;
  grid-row: 1;
  background: red;
}
.main {
  grid-column: 2;
  grid-row: 2;
  background: blue;
}
.aside {
  grid-column: 3;
  grid-row: 2;
  background: yellow;
}
.footer {
  grid-column: 1/ 4;
  grid-row: 3;
  background: grey;
}

grid-area

给 grid item 进行命名以便于使用 grid-template-areas 属性创建模板时来进行引用

justify-self

沿着行轴对齐grid item 里的内容(与之对应的是 align-self, 即沿列轴对齐)

align-self

沿着列轴对齐grid item 里的内容(与之对应的是 justify-self, 即沿行轴对齐)
参考:若愚老师翻译CSS Grid 系列(上)CSS Grid 系列(下)

相关文章

  • Grid布局相关属性

    定义display:grid或inline-grid开启子元素的Grid布局。 不同于flex布局,grid布局是...

  • 【融职培训】Web前端学习 第2章 网页重构16 grid布局

    一、grid布局概述 grid布局与flex布局对比 grid布局可以为网页提供更强大的布局功能,它与flex布局...

  • CSS Grid 布局

    参考资料 CSS Grid 布局完全指南(图解 Grid 详细教程) CSS Grid 系列(上)-Grid布局完...

  • 2020-02-03

    六、栅格布局方式Grid 众人云,Grid布局是CSS中最强的布局方式。Grid 布局与 Flex 布局有一定的相...

  • css Grid布局

    Grid布局 css的布局方式主要有三种:float&position布局、flex布局、grid布局。 floa...

  • Grid布局参考资料

    张鑫旭-写给自己看的display: grid布局教程阮一峰-CSS Grid 网格布局教程 在Grid布局中,f...

  • grid 网格布局

    Grid网格布局 Grid布局是一个二维的布局方法,纵横两个方向总是同时存在。 作用在grid容器上作用在grid...

  • [2020-08-10]css3中的常用几种布局

    div的水平垂直居中 flex布局,使用display: flex实现水平垂直居中 grid布局 使用grid布局...

  • Grid网格布局学习

    Grid网格布局学习 引言 本文不对grid布局由来以及优劣做过多的介绍,仅介绍grid网格布局的用法及其效果显示...

  • px em rem vh vm

    后续补充:flex 布局 Grid 布局

网友评论

    本文标题:Grid布局

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