CSS Grid布局:构建现代网页的强大网格系统

目录

一、Grid布局基础概念

1.1 网格容器与网格项

1.2 创建基本网格 

二、核心属性详解

2.1 定义网格轨道

2.2 网格间距控制

2.3 网格项对齐方式

三、实战布局技巧

3.1 创建经典布局

3.2 网格项定位技巧

3.3 响应式网格设计

四、Grid布局 vs Flexbox布局

五、高级技巧与最佳实践

5.1 隐式网格与显式网格

 5.2 使用minmax()函数

5.3 层叠与z-index控制

5.4 子网格(subgrid)支持

六、浏览器支持与渐进增强

结语:拥抱Grid布局新时代


一、Grid布局基础概念

1.1 网格容器与网格项

/* 创建网格容器 */
.container {display: grid; /* 或 inline-grid */
}
  • 网格容器:应用display: grid的元素

  • 网格项:网格容器的直接子元素

  • 网格线:构成网格结构的水平线和垂直线

  • 网格轨道:相邻网格线之间的空间(行或列)

  • 网格单元格:相邻行列网格线交叉形成的空间

  • 网格区域:任意矩形区域,由四条网格线界定

1.2 创建基本网格 

.container {display: grid;grid-template-columns: 100px 200px auto; /* 三列:固定100px, 固定200px, 自适应 */grid-template-rows: 100px 300px; /* 两行:固定高度 */gap: 15px; /* 行列间距 */
}

二、核心属性详解

2.1 定义网格轨道

.container {/* 使用像素单位 */grid-template-columns: 200px 200px 200px;/* 使用fr单位(比例单位) */grid-template-columns: 1fr 2fr 1fr; /* 中间列是两侧的两倍宽 *//* 使用repeat()函数 */grid-template-columns: repeat(4, 1fr); /* 创建四等分列 *//* 混合使用 */grid-template-columns: 200px repeat(2, 1fr) 300px;/* 自动行高 */grid-auto-rows: minmax(100px, auto);
}

2.2 网格间距控制

.container {gap: 20px; /* 行列间距相同 *//* 或分别设置 */row-gap: 15px;column-gap: 30px;
}

2.3 网格项对齐方式

/* 容器内对齐 */
.container {justify-items: center; /* 水平对齐 */align-items: end;     /* 垂直对齐 */place-items: center end; /* 简写形式 */
}/* 整个网格在容器中对齐 */
.container {justify-content: space-around;align-content: center;
}

三、实战布局技巧

3.1 创建经典布局

.container {display: grid;grid-template-columns: 200px 1fr;grid-template-rows: 80px 1fr 100px;grid-template-areas:"header header""sidebar content""footer footer";height: 100vh;gap: 10px;
}.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.content { grid-area: content; }
.footer { grid-area: footer; }

3.2 网格项定位技巧

.item {/* 使用行线和列线定位 */grid-column-start: 1;grid-column-end: 3;grid-row-start: 2;grid-row-end: 4;/* 简写形式 */grid-column: 1 / 3;grid-row: 2 / 4;/* 使用span关键字 */grid-column: span 2; /* 跨越两列 *//* 区域命名定位 */grid-area: content;
}

3.3 响应式网格设计

.container {display: grid;grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));gap: 20px;
}@media (max-width: 768px) {.container {grid-template-columns: 1fr;}.sidebar {grid-row: 2; /* 移动侧边栏位置 */}
}

四、Grid布局 vs Flexbox布局

特性Grid布局Flexbox布局
维度二维布局(行+列)一维布局(行或列)
方向控制同时控制行和列一次控制一个方向
内容流更适合整体页面布局更适合组件内部布局
重叠控制轻松实现元素重叠需要额外定位技巧
对齐方式更强大的对齐控制对齐功能强大但较单一

最佳实践:Grid用于宏观布局,Flexbox用于微观组件布局,两者可完美结合使用!

五、高级技巧与最佳实践

5.1 隐式网格与显式网格

.container {display: grid;grid-template-columns: repeat(3, 1fr); /* 显式网格 */grid-auto-rows: 100px; /* 隐式行高度 */grid-auto-columns: 200px; /* 隐式列宽度 */grid-auto-flow: dense; /* 自动填充空白区域 */
}

 5.2 使用minmax()函数

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

5.3 层叠与z-index控制

.item {grid-column: 1;grid-row: 1;z-index: 2; /* 网格项可以层叠 */
}

5.4 子网格(subgrid)支持

.container {display: grid;grid-template-columns: 1fr 1fr;
}.item {display: grid;grid-template-columns: subgrid; /* 继承父网格列轨道 */grid-column: span 2; /* 跨越两列 */
}

六、浏览器支持与渐进增强

Grid布局已得到所有现代浏览器的良好支持(包括IE10/11的部分支持)。对于旧版浏览器,可以采用渐进增强策略:

.container {display: flex; /* 回退方案 */flex-wrap: wrap;
}@supports (display: grid) {.container {display: grid;grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));}
}

结语:拥抱Grid布局新时代

CSS Grid布局是网页设计领域的革命性进步,它为我们提供了前所未有的布局能力。通过掌握Grid布局,你可以:

  1. 轻松创建复杂的响应式布局

  2. 减少不必要的HTML嵌套

  3. 提高代码可维护性和可读性

  4. 实现更灵活的设计方案

  5. 提升开发效率,减少布局时间

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/91496.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch / MongoDB / Redis / MySQL 区别

1、一句话简介名称核心用途Elasticsearch强大的全文检索与日志分析引擎MongoDB灵活的文档数据库,适合半结构化/结构化数据Redis高性能的内存键值缓存数据库,用于实时高并发处理MySQL经典关系型数据库,强事务支持,结构化数据持久存…

网络通信之基础知识

一、什么是计算机网络?计算机网络是指由若干主机、通信链路和网络设备(如路由器、交换机等)组成的系统,借助通信协议,实现信息共享和资源互联。其本质是:多台设备之间通过协议进行数据交换。二、网络协议与…

Java 设计模式及应用场景

Java 设计模式是解决软件开发中常见问题的通用方案,通过合理的设计模式可以提高代码的可维护性、可扩展性和复用性。下面将介绍 Java 中常见的设计模式及其原理。一、设计模式的分类设计模式主要分为三大类,共 23 种经典模式:创建型模式&…

GitHub Jekyll博客本地Win开发环境搭建

GitHub Jekyll博客本地Win开发环境搭建 标签 后端 blog jekyll 全文链接 GitHub Jekyll博客本地Win开发环境搭建 概述 本文详细介绍了在Windows系统上搭建Jekyll博客本地开发环境的完整步骤,为GitHub Pages博客开发提供本地预览和调试能力。 环境依赖 Ruby环…

浏览器防录屏是怎样提高视频安全性?

文章目录前言一、什么是浏览器防录屏二、浏览器防录屏的原理是什么?(javascript)三、如何实现浏览器防录屏总结前言 在数字内容版权保护面临严峻挑战的今天,浏览器防录屏技术作为视频安全体系的关键一环,其重要性日益…

uni-app项目配置通用链接拉起ios应用android应用

uniapp开发ios&android可拉起app的辛酸历程IOS配置指南1、登录[apple Developer](https://developer.apple.com/account/resources/identifiers/list)账户找到自己开发的对应的项目2、确保对应项目的Associated Domains是打开状态3、本地创建一个 apple-app-site-associati…

deep learning(李宏毅)--(六)--loss

一,关于分类问题及其损失函数的一些讨论。 在构建分类模型是,我们的最后一层往往是softmax函数(起到归一化的作用),如果是二分类问题也可以用sigmoid函数。 在loss函数的选择上,一般采用交叉熵损失函数(…

Python绑定及其在Mujoco仿真器中的作用

好的,这是一个非常核心且重要的问题。我来分两部分为你详细解释:首先是“什么是Python绑定”,然后是“它在MuJoCo中具体的作用”。第一部分:什么是Python绑定 (Python Binding)? 简单来说,Python绑定是一座…

数学建模从入门到国奖——备赛规划优秀论文学习方法

数学建模从入门到国奖——备赛规划 数学建模国一:我的逆袭经验分享在大二,我们团队初次参加妈妈杯,遗憾未获奖,后来经过5个月的时间,在大三上学期的9月,我们团队以C题数据挖掘机器学习创新斩获国赛一等奖&a…

大型语言模型的白日梦循环

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【Gaussian Haircut论文】在Deepseek和Chatgpt的帮助下慢速了解核心方法

3.Method 一、 1.核心目标 输入:多张从不同角度拍摄的头发照片。输出:3D发型模型,且模型由发丝构成(即每根头发被建模为独立的曲线/线段,而非体积/网络)。 2.数据预处理 在正式重建前,需要从输入…

众趣SDK重磅升级:空间物联IOT新视界,赋能实景三维场景深度应用

近日,空间数字孪生云服务行业领导者—众趣科技宣布旗下核心产品云服务平台Qverse SDK迎来里程碑式升级!本次升级聚焦行业前沿需求,重磅推出IoT设备监控系统、iframe跨平台页面无缝集成、BI数据智能三大解决方案,旨在将三维空间计算…

021_自然语言处理应用

自然语言处理应用 目录 NLP应用概述文本理解技术文本生成应用语言分析工具多语言处理专业领域应用实践案例 NLP应用概述 核心能力范围 文本理解 语义理解:深度理解文本含义和上下文实体识别:识别人名、地名、机构名等命名实体关系提取:…

小程序中状态管理Redux

Redux 是一个 集中式 状态管理框架,所有状态存储在一个 全局 Store 中,并通过 Action 触发 Reducer 进行数据更新。。1.安装npm install redux miniprogram-computed2.创建// store.js import { createStore } from "redux";// 定义初始状态 c…

c++:类型转换函数

简介 在C++中,类型转换运算符(也称为类型转换函数或转换函数)是一种特殊的成员函数,它允许将一个类类型的对象转换为其他类型。转换运算符的声明形式如下: operator type() const; 关键点 ​​声明​​:在类内部声明,没有返回类型(因为type已经表示了返回类型),没…

Java 8 jdk1.8下载及安装教程和环境变量配置

1. 概述 本文介绍如何在 Windows 10 系统下下载并安装 Java 开发工具包(JDK 1.8),适合 Java 初学者或需要搭建开发环境的用户。 2. 安装包下载 2.1 安装包获取 由于 Oracle 官网下载需注册登录,可选择以下替代方式获取 JDK 安装…

git@github.com: Permission denied (publickey).

摘要:记录新电脑需要clone和push代码到GitHub error: Cloning into FPGA_common… gitgithub.com: Permission denied (publickey). fatal: Could not read from remote repository. 遇到的这个错误信息: gitgithub.com: Permission denied…

【Linux基础知识系列】第五十四篇 - 网络协议基础:TCP/IP

在网络通信中,TCP/IP 协议是实现设备之间数据传输的基础。TCP/IP 协议栈定义了数据在网络中传输的方式,从应用层到网络层,再到物理层,每一层都有其特定的功能和协议。理解 TCP/IP 协议的基本概念和工作原理,对于网络管…

《python语言程序设计》2018版第8章8题编写函数实现二进制转十进制(字符串变整数)!!整数没法进行下标

二进制转十进制前言第1章幻想的草稿第2章如何把这些幻想的数字带到现实的算式中第3章看来是我想多了第4章 空值不一定是最好的选择第5章 成功了前言 将字符串变成整数,但是整数没法像字符串一样做下标 反复尝试最好的手段,是多多打印 第1章幻想的草稿 …