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

【CSS】Grid 布局基础知识及实例展示

CSS Grid 布局(Grid Layout)是一种二维网格布局系统,专为满足现代网页设计需求而创建。与 Flexbox(一维布局模型)不同,Grid 能够同时处理行和列,使你可以更高效地设计复杂的网页布局。下面我将从基础到高级详细讲解 Grid 布局,并提供相应示例。

基础概念

1. 容器与项目
  • 网格容器(Grid Container):通过 display: grid 或 display: inline-grid 定义的元素,是所有网格项目的父元素。
  • 网格项目(Grid Item):网格容器的直接子元素。
2. 网格线(Grid Lines)

分隔网格轨道的分界线,可以是垂直的(列线)或水平的(行线)。网格线从 1 开始编号。

3. 网格轨道(Grid Tracks)

网格中的行或列,由 grid-template-rows 和 grid-template-columns 定义。

4. 网格单元格(Grid Cell)

两个相邻行线和两个相邻列线之间的空间,是网格的最小单位。

5. 网格区域(Grid Area)

由一个或多个网格单元格组成的矩形区域,通过 grid-template-areas 定义。

如下图:

基本用法

创建网格容器

使用 display: grid 或 display: inline-grid 将元素转换为网格容器:

css

.container {display: grid; /* 块级网格 *//* display: inline-grid; 行内级网格 */
}

定义网格轨道

使用 grid-template-rows 和 grid-template-columns 定义行和列的大小(如下图):

css

.container {grid-template-columns: 100px 200px 150px; /* 三列,宽度分别为 100px、200px、150px */grid-template-rows: 50px 100px; /* 两行,高度分别为 50px、100px */
}

重复轨道模式

使用 repeat() 函数简化重复的轨道定义(如下图):

css

.container {grid-template-columns: repeat(3, 100px); /* 等同于 100px 100px 100px */grid-template-rows: repeat(2, 50px); /* 等同于 50px 50px */
}

灵活的尺寸单位:fr

fr 单位表示网格容器剩余空间的比例(如下图):

css

.container {grid-template-columns: 1fr 2fr 1fr; /* 三列,中间列宽度是两边的两倍 */
}

网格间距

使用 gap 属性设置网格轨道之间的间距:

css

.container {gap: 10px; /* 行和列间距均为 10px *//* 等价于:row-gap: 10px;column-gap: 10px;*/
}

网格项目定位

基于网格线定位

使用 grid-column-startgrid-column-endgrid-row-start 和 grid-row-end 指定项目的位置:

css

.item {grid-column-start: 1;grid-column-end: 3; /* 从第1列线开始,到第3列线结束 */grid-row-start: 1;grid-row-end: 2; /* 从第1行线开始,到第2行线结束 */
}

简写形式:

css

.item {grid-column: 1 / 3; /* 列开始 / 列结束 */grid-row: 1 / 2; /* 行开始 / 行结束 */
}

使用 span 关键字跨越网格线:

css

.item {grid-column: 1 / span 2; /* 从第1列线开始,跨越2个轨道 */grid-row: 1 / span 1; /* 从第1行线开始,跨越1个轨道 */
}
网格区域定位

使用 grid-template-areas 定义区域名称,并通过 grid-area 将项目放入特定区域:

css

.container {grid-template-areas:"header header header""sidebar main main""footer footer footer";grid-template-columns: 1fr 2fr 1fr;grid-template-rows: 50px 200px 50px;
}.header {grid-area: header;
}.sidebar {grid-area: sidebar;
}.main {grid-area: main;
}.footer {grid-area: footer;
}

高级特性

隐式与显式网格
  • 显式网格:通过 grid-template-rows 和 grid-template-columns 定义的轨道。
  • 隐式网格:当项目超出显式网格范围时,自动创建的轨道。

使用 grid-auto-rows 和 grid-auto-columns 控制隐式网格轨道的大小:

css

.container {grid-template-columns: repeat(3, 1fr);grid-auto-rows: 100px; /* 隐式创建的行高为 100px */
}

自动放置算法

使用 grid-auto-flow 控制自动放置项目的方式:

css

.container {grid-auto-flow: column; /* 项目按列排列,默认是 row */
}

对齐与分布
  • 内容对齐:控制整个网格在容器中的位置

    css

    .container {justify-content: center; /* 水平居中 */align-content: center; /* 垂直居中 */
    }
    
  • 项目对齐:控制单个项目在其单元格中的位置

    css

    .item {justify-self: center; /* 水平居中 */align-self: center; /* 垂直居中 */
    }
    
  • 轨道分布:控制剩余空间在轨道间的分布

    css

    .container {grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); /* 自动填充,每列最小 100px,最大 1fr */
    }
    

实际示例

下面是一个使用 CSS Grid 实现的响应式网页布局示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS Grid Example</title><style>.container {display: grid;grid-template-areas:"header header header""sidebar main main""footer footer footer";grid-template-columns: 200px 1fr 1fr;grid-template-rows: auto 1fr auto;min-height: 100vh;gap: 10px;padding: 10px;}.header {grid-area: header;background-color: #3498db;color: white;padding: 10px;}.sidebar {grid-area: sidebar;background-color: #2ecc71;padding: 10px;}.main {grid-area: main;background-color: #f1c40f;padding: 10px;}.footer {grid-area: footer;background-color: #9b59b6;color: white;padding: 10px;}/* 响应式布局 */@media (max-width: 600px) {.container {grid-template-areas:"header""sidebar""main""footer";grid-template-columns: 1fr;grid-template-rows: auto auto 1fr auto;}}</style>
</head>
<body><div class="container"><header class="header">Header</header><aside class="sidebar">Sidebar</aside><main class="main">Main Content</main><footer class="footer">Footer</footer></div>
</body>
</html>

这个示例展示了一个常见的三栏布局,在小屏幕上自动转换为单列布局。通过 CSS Grid,我们可以轻松实现复杂的响应式设计,而不需要依赖浮动或定位。

CSS Grid 是一个功能强大的布局工具,掌握它可以让你更高效地创建现代、灵活的网页设计。建议通过实际练习来加深理解,尝试不同的属性组合,探索 Grid 布局的无限可能。

http://www.lqws.cn/news/586531.html

相关文章:

  • 内网ubuntu系统安装mysql
  • 《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
  • 算法题练习
  • 前端Vue面试八股常考题(一)
  • 【STM32HAL-第1讲 基础篇-单片机简介】
  • Redis Lua 调试器(LDB)完全指南
  • 具身智能的仿真技术(具身智能入门三)
  • 用Python采集CBC新闻:如何借助青果网络海外代理IP构建稳定采集方案
  • datax-web报错:连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境)
  • NAT 类型及 P2P 穿透
  • 信创项目oracle数据库迁移到达梦数据库需要会有哪些问题?如何解决?
  • Linux云计算基础篇(2)
  • 2025年6月个人工作生活总结
  • 【Springai】项目实战进度和规划
  • SpringCloud系列(42)--搭建SpringCloud Config分布式配置总控中心(服务端)
  • 个人博客开发问题记录:ThreadLocal获取用户数据失败
  • 《用奥卡姆剃刀原理,为前端开发“减负增效”》
  • CentOS 7 8 安装 madam
  • LLaMA-Factory框架之参数详解
  • (LangChain)RAG系统链路之嵌入模型Embedding(三)
  • spring-ai 工作流
  • 深入理解CSS定位:掌握网页布局的核心技术
  • SpringBoot 启动入口深度解析:main方法执行全流程
  • 【Python使用】嘿马云课堂web完整实战项目第2篇:CMS页面管理需求,后端工程搭建【附代码文档】
  • C++ 安装使用教程
  • Git命令使用心得
  • LeetCode 594. 最长和谐子序列
  • if __name__ == ‘__main__‘:
  • 【嵌入式ARM汇编基础】-ELF文件格式内部结构详解(三)
  • IDEA相关配置记录