Hulk's Blog

文章
笔记

强大的grid网格布局方案

1/4/2020 • ☕️ 3 min read

概述

grid网格布局擅长将页面分为不同区域(网格),控制各部分之间在大小,位置和层的不同方面的联系,可以做出各种各样的布局。

Grid布局与Flex布局 ?

Grid 布局与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但是,它们也存在重大区别。 Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。Grid 布局远比 Flex 布局强大。 -阮一峰老师博客

注意:设置网格布局后容器子元素的 float display:inline-block | table-cell vertical-align column将失效

  • display : grid | inline-grid

默认容器为块级元素 可设置为行内元素

  • grid-template-columns: 100px 100px 100px

列宽

  • grid-template-rows: 10% 10% 10%

行高

  • grid-template-areas : "a a a" " b b b" "c c c"

以上三个属性可简写为grid-template
grid是 grid-template-rows、grid-template-columns、grid-template-areas、 grid-auto-rows、grid-auto-columns、grid-auto-flow的简写

  • grid-template-columns: repeat(3,100px)

repeat()函数可以简化重复的值,第一个参数是重复的次数,第二个参数为重复的值 也可重复某种模式: repeat(3,100px 100px)

  • auto-fill: grid-template-columns: repeat(auto-fill,100px)

当单元格的大小是固定的,容器的大小不固定时,使用auto-fill关键字自动填充

  • fr: grid-template-columns: 100px 2fr 1fr

fraction的缩写,意为片段 , 2fr 1fr 表示前者是后者的二倍

  • grid-template-columns: minmax(100px, 1fr)

表示一个长度范围

  • grid-template-columns: 100px auto 100px

长度由浏览器决定

  • 网格线名称: grid-template-columns: [c1] 100px [fifth c2] 100px

可以指定网格线名称,方便以后引用,一个网格线可以有多个名字

  • grid-row-gap: 20px | grid-column-gap: 20px

(根据新的标准改写为:row-gap column-gap gap)
单元格之间的空隙,可以合并为 grid-gap: 20px 20px

  • grid-auto-flow: row | column

单元格填充顺序 默认为row:先行后列, row dense尽量填满空格

  • justify-items: start | end | center | stretch

单元格内容的水平位置

  • align-items: start | end | center | stretch

单元格内容的垂直位置

  • place-items: start end

justify-items 和 align-items 的合并方式

  • justify-content: start | end | center | stretch | space-around | space-between | space-evenly

单元格内容区域在容器里的水平位置

  • align-content: start | end | center | stretch | space-around | space-between | space-evenly

单元格内容区域在容器里的垂直位置

  • place-content: start end

justify-content 和 align-content 的合并方式

  • grid-auto-rows | grid-auto-columns

自动产生的单元格的大小

  • grid-column-start:2 | grid-column-end | grid-row-start | grid-row-end

项目的位置是可以指定的(也可指定网格线的名字)

  • grid-column属性是grid-column-start和grid-column-end的合并简写形式,grid-row属性是grid-row-start属性和grid-row-end的合并简写形式
  • grid-area:
    指定项目放在哪一个区域
  • grid-area属性还可用作grid-row-start、 grid-column-start、grid-row-end、grid-column-end的合并简写形式,直接指定项目的位置
  • justify-self | align-self | place-self
    单个项目的位置