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

css网格布局Grid

一、网格布局适应场景

当涉及到的布局是二维布局(元素不止一行或者一列)且比较复杂的时候,可以用网格布局,看下面的一个例子:

上图上一个四行三列的网格,布局相对比较复杂。如果你用别的布局方案,例如:绝对定位,flex,float等等,实现起来都很麻烦,但是你用了网格布局,情况就好多了。文章最后会附上上面示例的代码。

二、关键属性详解

1. 容器属性

属性作用示例
display: grid启用网格布局.container { display: grid; }
grid-template-columns定义列的轨道大小(支持固定值、百分比、fr 单位、minmax() 等)grid-template-columns: 100px 1fr 2fr;
grid-template-rows定义行的轨道大小grid-template-rows: repeat(3, 100px);
gap设置行和列的间距(兼容旧版需用 grid-row-gap 和 grid-column-gap.container { gap: 10px; }
grid-template-areas通过命名区域定义布局grid-template-areas: "header header" "sidebar main";
grid-auto-flow控制自动放置算法(row/column/densegrid-auto-flow: column dense;

2. 网格项属性

属性作用示例
grid-column定义网格项的列范围(起始线/结束线或 span 跨度)grid-column: 2 / span 3;(从第2列跨越3列)
grid-row定义网格项的行范围grid-row: 1 / 3;(从第1行跨越2行)
grid-area简写属性,合并 grid-row 和 grid-column,或直接引用命名区域grid-area: header;(分配到命名区域)
justify-self控制网格项在单元格内的水平对齐方式justify-self: end;
align-self控制网格项在单元格内的垂直对齐方式align-self: center;

三、常见布局场景

1. 基础网格


.container {display: grid;grid-template-columns: repeat(3, 1fr); /* 3列等宽 */grid-template-rows: repeat(2, 100px); /* 2行,每行100px */gap: 10px;}

效果:3列×2行的网格,所有单元格大小相同。

2. 跨行/跨列

.item-span {
grid-column: 2 / 4; /* 跨越第2、3列 */
grid-row: 1 / 3; /* 跨越第1、2行 */
}

效果:一个网格项占据2行×2列的区域。

3. 命名网格区域

.container {
display: grid;
grid-template-areas:
"header header header"
"sidebar main main"
"footer footer footer";
}.header { grid-area: header; }
.sidebar { grid-area: sidebar; }

效果:通过名称直观分配布局区域。

4. 响应式网格

.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
}

效果:自动填充容器宽度,每列最小200px,剩余空间均分。


四、与 Flexbox 的对比

特性Grid LayoutFlexbox
维度二维布局(行+列)一维布局(行或列)
适用场景复杂页面结构(如仪表盘、表格)一维布局(如导航栏、卡片组)
对齐控制支持单元格内和单元格间的对齐仅支持容器内子项的对齐
嵌套复杂度减少嵌套,直接定义二维结构可能需要多层嵌套实现复杂布局

五、第一部分示例代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>*{margin: 0;padding: 0;}.container {width: 80%;height: 60vh;background-color: pink;padding: 2px;display: grid;row-gap: 2px;column-gap:5px;grid-template-columns: repeat(3, 1fr);grid-template-rows: repeat(4, 1fr)}.item {border: 1px solid #000;}.one {background-color: blue;grid-column: 2 / span 2;}.two {background-color: red;grid-column: 3;grid-row: 2 / span 2;}.three {background-color: green;grid-column: 1 / span 2;grid-row: 1 / span 2;}</style>
</head>
<body><div class="container"><div class="item three">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 two">6</div><div class="item">7</div><div class="item">8</div><!-- <div class="item">9</div> --><div class="item">10</div><div class="item one">11</div><!-- <div class="item">12</div> --></div>
</body>
</html>

相关文章:

  • 夜莺 v8.0.0-beta.10 部署
  • QT—布局管理器之BoxLayout篇
  • 解锁健康密码:养生的多维智慧
  • Python 正则表达式 re 包
  • 考研408-计算机组成原理冲刺考点(1-3章)
  • 使用 Vue3 + Webpack 和 Vue3 + Vite 实现微前端架构(基于 Qiankun)
  • BoxMOT:Yolov8+多目标跟踪方案_笔记1
  • 网络安全漏洞库科普手册
  • 实验研究 | 千眼狼高速摄像机驱动精密制造创新
  • 4G FS800DTU上传图像至巴法云
  • 发那科机器人(基本操作、坐标系、I/O通信)
  • STM32 ADC模数转换器
  • 雷池WAF的身份认证 - GitHub
  • DDoS 攻击如何防护?2025最新防御方案与实战指南
  • 利用 Google Earth Engine 探索江宁区 2010 - 2020 年 EVI 时空变化
  • 多模态大语言模型arxiv论文略读(四十六)
  • Docker网络架构深度解析与技术实践
  • 阿里语音处理工具ClearerVoice-Studio项目上手指南
  • 一种改进的YOLOv11网络,用于无人机视角下的小目标检测
  • Linux虚拟机无法重启网络
  • 首映|“凤凰传奇”曾毅:拍电影,我是认真的
  • 太好玩了!坐进大卫·霍克尼的敞篷车穿越他画笔下的四季
  • 人社部:对个人加大就业补贴支持,对企业加大扩岗支持
  • 北上广深还是小城之春?“五一”想好去哪玩了吗
  • 苏迪曼杯即将在厦门打响,国羽向创纪录的14冠进军
  • 《深化养老服务改革发展的大湾区探索》新书将于今年6月出版