Grid-地表最强布局

358 阅读4分钟

Grid布局和使用

1. 常规flex布局痛点

在一些特定的布局下,比如卡片布局,在我使用flex布局后,添加justify-content: space-between flex-wrap: wrap属性来处理页面布局,在宽度不足,自动换行且最后一行不足三个时,那么最后一行会出现间距比较大的情况。

2. Grid布局是什么

Grid 布局(网格布局)是 CSS 中一种强大的二维布局系统,用于创建复杂的网页布局结构。它通过将页面划分为行和列的网格容器,能够同时处理元素在水平和垂直方向上的排列,相比 Flexbox(一维布局)更适合构建整体页面布局。

3. 兼容性

目前除了低版本的IE浏览器,都是可以支持的,可以放心使用

另外可以在网站查询 caniuse.com/ 支持情况

4. 基本使用

在 Grid 布局中,display 属性的取值决定了网格容器是块级网格容器还是行级网格容器,两者的核心区别在于容器本身在页面流中的排列方式,以及对父容器空间的占用规则

特性块级网格容器(display: grid行级网格容器(display: inline-grid
页面流排列独占一行与其他行级元素同行排列
默认宽度铺满父容器宽度由网格内容(轨道总宽)决定
与相邻元素关系上下排列左右排列

在实际使用中,根据不同的布局场景选择不同的方式 需要独立区块时用 grid,需要嵌入行内时用 inline-grid

5. Grid中的行和列

使用 grid-template-columns 规则可划分列数,使用 grid-template-rows 划分行数

实现三行三列

   .container {
            margin: 50px auto;
            display: grid;
            width: 600px;
            height: 300px;
            border: 5px solid #3333;
            grid-template-columns: 200px 200px 200px;
            grid-template-rows: 100px 100px 100px;
        }

        .container div {
            width: 200px;
            height: 100px;
            background-color: yellowgreen;
            border: 1px solid #d2d0d0;
        }

也可以使用百分比

    display: grid; 
    grid-template-columns: 33.33% 33.33% 33.33%; // 三列 
    grid-template-rows: 50% 50%; // 三行

6. 重复设置

细心的同学可能发现,我设置三行需要grid-template-columnsgrid-template-rows属性指定三次值,那我设置很多行,岂不是需要一个个的指定?答案肯定不是,可以通过repeat统一设置属性值,第一个参数为重复的数量,第二个参数为重复值

grid-template-rows: repeat(3, 100px); 
grid-template-columns: repeat(3, 200px);

7. 比例划分

  • 固定单位px(像素)、emrem 等,如 100px 表示固定高度 / 宽度。
  • 比例单位 fr:分配剩余空间的比例(fraction 的缩写)。
    例:grid-template-columns: 1fr 2fr 表示两列,第二列宽度是第一列的 2 倍。
  • 自适应 auto:由内容或父容器自动决定尺寸。
    例:grid-template-rows: auto 表示行高由内容撑开。
  • 最小 / 最大限制minmax(min, max) 定义尺寸范围。
    例:grid-template-columns: minmax(100px, 1fr) 表示列宽最小 100px,最大占满剩余空间。

8. 间距定义

column-gap 属性设置列间距

column-gap: 20px;

row-gap 属性设置列间距

row-gap: 20px;

gap 属性统一设置行和列间距

gap: 20px;

9.网格对齐

属性说明说明
justify-content所有栅格在容器中的水平对齐方式,容器有额外空间时栅格容器
align-content所有栅格在容器中的垂直对齐方式,容器有额外空间时栅格容器
align-items栅格内所有元素的垂直排列方式栅格容器
justify-items栅格内所有元素的横向排列方式栅格内所有元素的横向排列方式栅格容器
align-self元素在栅格中垂直对齐方式栅格元素
justify-self元素在栅格中水平对齐方式栅格容器

整体使用类似于Flex布局

10. 结尾

以上是在实际场景中高频使用的 Grid 布局属性,掌握这些足以应对大多数布局需求。当然,Grid 的强大远不止于此 —— 像用grid-template-areas通过命名区域搭建直观的页面框架,用grid-auto-flow控制元素的自动排列逻辑,或是借助justify-content/align-content调整整体网格在容器中的位置等,都能让布局设计更灵活、更贴合场景。

网格布局的魅力在于它对二维空间的精准掌控,从简单的卡片排列到复杂的响应式页面架构,都能游刃有余。如果想进一步探索,可以尝试组合不同属性实现个性化布局,或是结合媒体查询打造适配多设备的弹性界面。布局的本质是服务于内容与交互,多实践、多调试,就能逐渐体会到 Grid 布局带来的高效与优雅。