图文结合-带你轻松掌握 CSS Grid布局!

grid布局是非常好用的网格布局方式!

话不多说,我们直接看实例来学习!

一.Grid 基础语法

注意,用份额 (fr)单位,子项不必设置固定的宽高,否则单位无效

.container {
  display: grid;
}

然后定义行与列:

.container {
  grid-template-columns: 100px 1fr 2fr;
  grid-template-rows: 100px 1fr 2fr;
}

这将创建一个 3 列、3行的网格结构:

  • 100px:固定宽度

  • 1fr:分配 1 份剩余空间

  • auto:根据内容自动调整大小

添加间距:

grid-gap: 10px;

 

 

 二.属性与属性值详解

(一)容器级属性

 1.display

  • grid: 创建块级网格容器

  • inline-grid: 行内网格容器

定义每一列/行的尺寸

grid-template-columns: 200px 1fr 2fr;
grid-template-rows: repeat(2, minmax(100px, auto));
  • pxem%: 固定单位

  • fr: 剩余空间份额

  • auto: 根据内容调整

  • minmax(min, max): 限制范围

  • repeat(n, value): 简化重复

🔹 不使用 repeat

grid-template-columns: 1fr 1fr 1fr 1fr;

🔹 使用 repeat

grid-template-columns: repeat(4, 1fr);

两个是等价的,但后者更简洁、易读,尤其在重复很多列的时候效果更明显。

 

2.grid-gap, row-gap, column-gap

设置格子之间的间距:

grid-gap: 20px;

3. grid-auto-flow:

作用:当你没有用 grid-rowgrid-column 手动指定子项位置时,浏览器会自动把这些项目放入网格中,grid-auto-flow 就是用来控制这种自动放置的方式

属性值含义
row(默认)按“行优先”方向自动排列(从左往右 → 然后换行 ↓)
column按“列优先”方向自动排列(从上往下 ↓ 然后换列 →)
dense启用“紧凑模式”,尽量把空格填满

示例:

.container {
  display: grid;
   grid-template-columns: repeat(6, 100px);
   grid-auto-flow: row dense;
   grid-gap: 10px; 
}

这代表项目会一行接一行排列,但如果中间有空间,就会尽量向前填补空隙(“压缩布局”)。

这里我没有设置行的高度,但他却尽量填补所有空间

 4.grid-auto-rows / grid-auto-columns 

作用 设置自动新增行/列的大小

有时候,你只定义了网格的列数,但项目太多,网格会自动生成新行或新列来容纳它们。

这个时候,自动新增的行或列的尺寸,就由这两个属性控制:

属性名控制内容
grid-auto-rows自动新增的“行”高
grid-auto-columns自动新增的“列”宽

示例

.container {
  display: grid;
  grid-template-columns: repeat(2, 100px); /* 只定义2列 */
    grid-template-rows: 200px;//只定义了一行

  grid-auto-rows: 150px;                   /* 每行150px高 */
}

 即:如果你的内容多于2行,Grid 会自动生成第 2行、第 3行……这些行的高度就全是 150px

 (二)子项级属性

1.grid-column, grid-row:控制项目位置及跨行列

.item {
  grid-column:2 / 4;
  grid-row: 1 / 3 ;
}

grid-column: 2 / 4;

  • 表示:从第2列开始,到第4列前结束

  • 👉 也就是跨越第2列和第3列,共跨 2 列

(⚠️ 注意:结束值是“结束前的位置”,不包含 4)


🔹 grid-row: 1 / 3;

  • 表示:从第1行开始,到第3行前结束

  • 👉 也就是跨越第1行和第2行,共跨 2 行

 

 注意:想要实现这种效果,最好给合并的格子单独加一个类名,比如,我单独加了kk这个类名,不然会导致所有的都合并

简写方式:

2.grid-area: row-start / column-start / row-end / column-end;

grid-area: 1 / 2 / 3 / 4; /* 行1列2 到 行3列4 */

这是一种定位用法,相当于以下四个属性的合并简写:

grid-row-start: 1;
grid-column-start: 2;
grid-row-end: 3;
grid-column-end: 4;

3.justify-self / align-self:用来控制(某个格子里的内容)在自己所在单元格里的对齐方式

🔹 justify-self: 控制水平方向(横向)在格子里的位置

🔹 align-self: 控制垂直方向(纵向)在格子里的位置

 

三.对齐属性(容器整体)

justify-items / align-items:控制所有子项的对齐方式

justify-items: start;
align-items: center;

justify-content / align-content:控制整个网格内容块在容器中的对齐方式:

justify-content: space-between;
align-content: center;

是不是有点懵,分不清楚两者的区别?是的,这两组属性虽然看起来很像,但作用对象控制范围完全不同

属性名控制对象控制方向作用范围
justify-items所有子项水平方向控制每个格子内部的内容如何对齐
align-items所有子项垂直方向控制每个格子内部的内容如何对齐
justify-content网格整体水平方向控制整个网格区域在容器中如何对齐
align-content网格整体垂直方向控制整个网格区域在容器中如何对齐

 它们啥时候生效??

通常这里子项会设置固定宽度或高度,不然子项宽高==单元格宽高,使这两个属性无法生效

属性名控制对象何时生效
justify-items所有子项子项宽度 < 单元格宽度
align-items所有子项子项高度 < 单元格高度
justify-content网格整体网格宽度 < 容器宽度,且列数 > 1
align-content网格整体网格高度 < 容器高度,且行数 > 1

 是不是有点不理解子项宽高与单元格宽高?

1.什么是“单元格”?

grid-template-columns: 100px 1fr 1fr;
grid-template-rows: 100px 200px;

你就创建了一个 3列 × 2行 的网格,总共 6个单元格(cells)。

而子项,就是你自己放在 Grid 容器(使用 display: grid 的元素)内部的直接子元素,也叫 Grid Items。通常情况下,使用fr等可以自适应的单位,单元格==子项

小编不易,点个赞吧!!!!!!!!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值