Glittering's blog Glittering's blog
Home
  • 学习手册

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • CSS
  • 技术文档
  • 算法
  • 工作总结
  • 实用技巧
  • collect
About
  • Classification
  • Label
GitHub (opens new window)

Glitz Ma

前端开发工程师
Home
  • 学习手册

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • CSS
  • 技术文档
  • 算法
  • 工作总结
  • 实用技巧
  • collect
About
  • Classification
  • Label
GitHub (opens new window)
  • CSS

    • CSS教程和技巧收藏
    • css块元素和行内元素
    • 盒子模型
    • BFC和IFC
    • 字体font-weight相关知识
    • CSS-function汇总
    • CSS3之has函数的使用
    • CSS3之transition过渡
    • CSS3之animation动画
    • css动画性能优化
    • flex布局语法
    • flex布局案例
    • Grid布局语法
    • flex布局和grid布局的区别
      • Flex布局和Grid布局的区别
        • 1. 定义和基本应用
        • 2. 适用场景的区别
        • 3. 语法差异和使用
        • Flexbox 常用属性:
        • 示例:
        • Grid 常用属性:
        • 示例:
        • 4. Flexbox 和 Grid 的优缺点
        • Flexbox 优势:
        • Flexbox 缺点:
        • Grid 优势:
        • Grid 缺点:
        • 5. 总结
    • 「布局技巧」图片未加载前自动撑开元素高度
    • 文字在一行或多行时超出显示省略号
    • 水平垂直居中的几种方式-案例
    • 如何根据系统主题自动响应CSS深色模式
    • 工作中遇到的css问题记录
    • 今天总结一下用到的css吧
  • 页面
  • CSS
mamingjuan
2015-12-25
目录

flex布局和grid布局的区别

# Flex布局和Grid布局的区别

Flexbox 和 Grid 都是 CSS 布局模块,用来解决常见的页面布局问题,但它们的设计思想和适用场景不同。


# 1. 定义和基本应用

  • Flexbox(弹性盒布局):

    • 主要用于 一维布局,即在水平或垂直一个方向上排列元素。
    • 比如:导航栏、工具条、卡片布局等。
    • 适用于 线性布局,可以很方便地在父容器内调整子元素的排列、对齐和分配空间。
  • Grid(网格布局):

    • 主要用于 二维布局,即同时在 水平 和 垂直 两个方向上排列元素。
    • 适用于更复杂的布局,比如:页面整体布局、图像网格、表格布局等。
    • 它允许你创建一个 行和列的网格,并通过 grid-template-rows、grid-template-columns 来精确控制每个区域的大小和位置。

# 2. 适用场景的区别

特性 Flexbox Grid
布局维度 一维(水平或垂直) 二维(水平 + 垂直)
适用场景 布局中仅涉及一个方向(如水平导航栏、卡片布局等) 复杂的整体布局(如网页结构、表格布局、复杂的组件布局)
控制方式 按照主轴(主轴和交叉轴)布局 按照网格的行和列进行布局
灵活性 灵活的响应式调整 精确的区域划分和大小控制
父容器要求 不需要明确行列定义 需要定义网格的行和列

# 3. 语法差异和使用

# Flexbox 常用属性:

  • display: flex;
  • flex-direction: row | column; — 控制子项的排列方向(水平或垂直)
  • justify-content — 水平对齐
  • align-items — 垂直对齐
  • flex-wrap — 控制是否换行
# 示例:
.container {
  display: flex;
  justify-content: space-between; /* 水平分布 */
}

.item {
  flex: 1; /* 使子项均分空间 */
}
1
2
3
4
5
6
7
8

# Grid 常用属性:

  • display: grid;
  • grid-template-columns — 定义列宽
  • grid-template-rows — 定义行高
  • grid-template-areas — 通过区域命名布局
  • grid-gap — 定义行和列之间的间隔
# 示例:
.container {
  display: grid;
  grid-template-columns: 1fr 2fr 1fr; /* 定义三列布局 */
  grid-template-rows: auto; /* 行高自动 */
  grid-gap: 20px;
}

.item {
  grid-column: 2 / 3; /* 控制元素跨列 */
}
1
2
3
4
5
6
7
8
9
10

# 4. Flexbox 和 Grid 的优缺点

# Flexbox 优势:

  • 简单易用,适合处理一维布局。
  • 自动根据容器的尺寸调整子项大小,适合用在动态内容上。
  • 支持 flex-grow 和 flex-shrink,可以灵活分配空间。

# Flexbox 缺点:

  • 只适合一维布局,不能直接处理复杂的 二维布局。
  • 对于 网格化 排列和 复杂排版,控制不如 Grid 精确。

# Grid 优势:

  • 适合复杂的二维布局,通过行列划分网格。
  • 可以精确控制元素在网格中的位置,支持更复杂的 布局设计。
  • 强大的区域命名功能,可以方便地对每个元素进行区域化管理。

# Grid 缺点:

  • 浏览器支持:虽然现代浏览器都已支持,但 IE 的兼容性较差。
  • 语法相对复杂,适合用在复杂布局,简单场景下可能显得有点冗余。

# 5. 总结

如果面试官问你 “Flex 和 Grid 的区别”,你可以这样回答:

Flexbox 主要是用来处理一维布局,比如水平或垂直排列的内容,特别适合简单的排版任务(如导航条、卡片布局等)。 它的优势在于简易使用和灵活性,但只支持单一方向的布局,不能处理复杂的二维结构。

Grid 则是二维布局的利器,适合复杂的页面布局,能够精确控制行和列的位置,像网页整体布局、表格布局、复杂组件等都可以通过 Grid 来高效处理。 它的精确控制和灵活性使得设计变得非常强大,但语法相对较复杂,且在低版本浏览器中可能不完全支持。


上次更新: 2025/11/25, 03:24:47
Grid布局语法
「布局技巧」图片未加载前自动撑开元素高度

← Grid布局语法 「布局技巧」图片未加载前自动撑开元素高度→

Copyright © 2015-2025 Glitz Ma
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式