当前位置: 首页 > java >正文

【前端】CSS Grid布局介绍及示例

CSS Grid 简介

CSS Grid 是一个二维布局系统,专为处理行和列的复杂网页布局而设计。与 Flexbox(一维布局)不同,Grid 允许开发者同时控制行和列,实现更精确的布局结构。

核心概念:
  1. Grid 容器:通过 display: grid 定义。
  2. Grid 项目:容器的直接子元素。
  3. 网格线(Grid Lines):划分行列的线(从 1 开始编号)。
  4. 网格轨道(Grid Tracks):行或列的间距(如 grid-template-columns)。
  5. 网格区域(Grid Areas):合并单元格形成的矩形区域。

关键属性速查

容器属性作用
grid-template-columns定义列宽(如 1fr 200px
grid-template-rows定义行高
grid-template-areas定义命名区域(配合 grid-area
gap行列间距(替代 grid-gap
justify-items项目水平对齐(start/end/center)
align-items项目垂直对齐
项目属性作用
grid-column-start/end控制列起始/结束位置
grid-row-start/end控制行起始/结束位置
grid-area指定项目所属命名区域
justify-self单个项目水平对齐
align-self单个项目垂直对齐

何时使用 Grid?

  • 整体页面布局(Header/Footer/Sidebar 等区域)
  • 二维复杂结构(同时控制行和列)
  • 响应式网格系统(如卡片、画廊布局)

💡 Tips
Grid 与 Flexbox 可协同使用!Grid 负责宏观布局,Flexbox 处理微观组件(如导航栏内部对齐)。


示例合集(含完整代码)

示例 1:基础网格布局
<!DOCTYPE html>
<html>
<head>
<style>
.grid-container {display: grid;grid-template-columns: repeat(3, 1fr); /* 三列等宽 */grid-gap: 10px;padding: 15px;background: #f0f0f0;
}.grid-item {background: #4CAF50;color: white;padding: 30px;text-align: center;border-radius: 5px;
}
</style>
</head>
<body>
<div class="grid-container"><div class="grid-item">1</div><div class="grid-item">2</div><div class="grid-item">3</div><div class="grid-item">4</div><div class="grid-item">5</div><div class="grid-item">6</div>
</div>
</body>
</html>
示例 2:网格区域命名布局
<!DOCTYPE html>
<html>
<head>
<style>
.container {display: grid;grid-template-areas:"header header header""sidebar main main""footer footer footer";grid-gap: 10px;height: 300px;
}.header { grid-area: header; background: #FF9800;padding: 20px;
}
.sidebar { grid-area: sidebar; background: #2196F3;
}
.main { grid-area: main; background: #4CAF50;
}
.footer { grid-area: footer; background: #9C27B0;
}
</style>
</head>
<body>
<div class="container"><div class="header">Header</div><div class="sidebar">Sidebar</div><div class="main">Main Content</div><div class="footer">Footer</div>
</div>
</body>
</html>
示例 3:响应式自适应网格
<!DOCTYPE html>
<html>
<head>
<style>
.grid {display: grid;grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));gap: 15px;padding: 20px;
}.item {background: #2196F3;height: 150px;display: flex;align-items: center;justify-content: center;color: white;font-size: 1.5rem;border-radius: 8px;
}
</style>
</head>
<body>
<div class="grid"><div class="item">1</div><div class="item">2</div><div class="item">3</div><div class="item">4</div><div class="item">5</div><div class="item">6</div>
</div>
</body>
</html>
示例 4:复杂定位与对齐
<!DOCTYPE html>
<html>
<head>
<style>
.grid {display: grid;grid-template-columns: 150px 1fr 100px;grid-template-rows: 100px 1fr 100px;height: 400px;background: #eee;gap: 10px;padding: 10px;
}.item-a {grid-column: 1 / 4; /* 跨3列 */background: #FF5722;display: grid;place-items: center;
}.item-b {grid-row: 2 / 4; /* 跨2行 */background: #3F51B5;
}.item-c {grid-column: 2 / 4;display: grid;grid-template-columns: repeat(2, 1fr);gap: 10px;
}.sub-item {background: #009688;display: flex;align-items: center;justify-content: center;
}
</style>
</head>
<body>
<div class="grid"><div class="item-a">Header (跨3列)</div><div class="item-b">Sidebar (跨2行)</div><div class="item-c"><div class="sub-item">内容1</div><div class="sub-item">内容2</div><div class="sub-item">内容3</div><div class="sub-item">内容4</div></div>
</div>
</body>
</html>

关键概念解析

  1. 容器属性

    • display: grid:定义网格容器
    • grid-template-columns/rows:定义列/行尺寸
    • gap:设置网格间距
    • grid-template-areas:命名网格区域
  2. 项目属性

    • grid-column/row:控制项目位置
    • grid-area:指定区域名称
    • justify-self/align-self:单个项目对齐
  3. 响应式单位

    • fr:剩余空间分配单位
    • minmax():定义尺寸范围
    • auto-fill:自动填充列

CSS Grid 彻底改变了网页布局方式,通过组合这些特性,可以轻松实现传统布局难以完成的复杂设计。

http://www.xdnf.cn/news/16821.html

相关文章:

  • 《C++初阶之STL》【stack/queue/priority_queue容器适配器:详解 + 实现】(附加:deque容器介绍)
  • 充电桩车位占用识别准确率↑32%:陌讯动态特征融合算法实战解析
  • 测试分类:详解各类测试方式与方法
  • Java-88 深入浅出 MySQL InnoDB 存储结构全解析:表空间、段、区、页与行格式
  • 第一个大语言模型的微调
  • Redis哨兵模式搭建
  • 打破数据质量瓶颈:用n8n实现30秒专业数据质量报告自动化
  • 远程仓库地址发生变化
  • Nuitka:将源码编译为 `.pyd`
  • 对于前端工程化的理解
  • Product Hunt 每日热榜 | 2025-07-31
  • PyQt GUI开发初学者:固定尺寸还是全屏自适应?
  • Table-Render:基于 JSON Schema 的高性能 React 动态表格渲染器
  • ros2--参数指令--rqt
  • 动手学习深度学习-深度学习知识大纲
  • VuePress 使用详解
  • 转码刷 LeetCode 笔记[1]:3.无重复字符的最长子串(python)
  • (1-7-6)Mysql 常用的基本函数
  • JVM问题分析处理手册
  • LeetCode 面试经典 150_数组/字符串_买卖股票的最佳时机(7_121_C++_简单)(贪心)
  • 【javascript】new.target 学习笔记
  • 【2025/07/31】GitHub 今日热门项目
  • DAY16-结构体
  • linux如何将两份hdmi edid合并
  • system.conf linux用于启动和管理系统进程的初始化系统和服务管理器的配置文件
  • WEditor:高效的移动端UI自动化脚本可视化编辑器
  • 【云故事探索】NO.16:阿里云弹性计算加速精准学 AI 教育普惠落地
  • 力扣 Pandas 挑战(6)---数据合并
  • 基于SpringBoot和SpringAI框架实践
  • Google政策大更新:影响金融,Ai应用,社交,新闻等所有类别App