CSS Grid网格布局

一、前言

二、Grid布局

1、基本介绍

2、核心概念

(1)网格容器

(2)网格元素

(3)网格列

(4)网格行

(5)网格间距

(6)网格线

三、Grid布局常用属性

1、网格容器常用属性

(1)属性说明

【 grid-template-columns属性 】

【 grid-template-rows属性 】

【 grid-column-gap属性 】

【 grid-row-gap属性 】

【 grid-gap属性 】

(2)使用实例

2、网格元素常用属性

(1)属性说明

【grid-column-start属性】

【grid-column-end属性】

【grid-column属性】

【grid-row-start属性】

【grid-row-end属性】

【grid-row属性】

(2)使用实例

3、fr单位

4、grid布局优势

三、Grid布局示例

1、布局效果

2、完整代码

四、实现过程

1、添加元素

2、划分网格行列

3、找出网格线

4、定位网格元素

四、总结


一、前言

下面这些布局效果应该用什么方式实现呢?

布局1

布局2

 

 布局3

布局4

 

类似这样的页面效果可能会有多种实现的方法,但更推荐使用Grid网格布局实现;

二、Grid布局

1、基本介绍

  • 网格是一组相交的水平线和垂直线,形成了它的行和列;
  • CSS基于网格,提供了一套带有行和列的网格布局系统;
  • 无需使用浮动和定位也能完成一个整齐漂亮的网页布局;
  • Grid布局由一个父元素,及一个或多个子元素组成;

2、核心概念

(1)网格容器

将元素的display属性设置为grid或者inline-grid,变成了一个网格容器;

类似于表格,在网格容器内,有多行多列网格元素;

(2)网格元素

网格容器的所有直系子元素——下图中的9个绿色盒子; 

(3)网格列

网格元素的垂直线方向称为列(Column);

(4)网格行

网格元素的水平线方向称为行(Row)。

(5)网格间距

两个网格单元之间的网格横向间距(Row Gap)或网格纵向间距(Column Gap)。

(6)网格线

列与列,行与行之间的交接处就是网格线(Line)。

三、Grid布局常用属性

1、网格容器常用属性

序号属性描述
1grid-template-columns指定网格布局中列的大小,以及列的数量;
2grid-template-rows指定网格布局中行的大小,以及行的数量;
3grid-column-gap指定网格元素的列间距;
4grid-row-gap指定网格元素的行间距;
5

grid-gap

grid-row-gap,grid-column-gap的缩写形式;

(1)属性说明

【 grid-template-columns属性 

该属性用来定义网格中的列,指定列的数量和列的宽度;

.grid-container{grid-template-columns : value1,value2, ...;
}
  • value的取值可以使用任何长度单位进行定义;
  • value的个数决定列的个数;
  • value的大小决定列的宽度;
【 grid-template-rows属性 】

该属性用来定义网格中的行,指定行的数量和行的高度;

.grid-container{grid-template-rows : value1,value2, ...;
}
  • value的取值可以使用任何长度单位进行定义;
  • value的个数决定行的个数;
  • value的大小决定行的高度;
【 grid-column-gap属性 】

该属性用来指定网格元素的列间距;

.grid-container{grid-column-gap : value;
}
  • value的取值可以使用任何长度单位进行定义;
  • value的大小决定列间距的大小;
【 grid-row-gap属性 】

该属性用来指定网格元素的行间距;

.grid-container{grid-row-gap : value;
}
  • value的取值可以使用任何长度单位进行定义;
  • value的大小决定行间距的大小;
【 grid-gap属性 】

该属性为grid-row-gap属性与grid-column-gap属性的缩写形式,可以同时定义网格元素的行间距与列间距;

.grid-container{grid-gap : value1 [, value2];
}
  • value的取值可以使用任何长度单位进行定义;
  • 只有一个value时,表示列间距与行间距都使用该值;
  • 有两个value时,第一个表示行间距,第二个表示列间距;

(2)使用实例

...
<style>.grid-container {/* 添加网格容器:将该元素设置为网格容器 */display: grid;/* 定义网格列:三个相等宽度的列 */grid-template-columns: 1fr 1fr 1fr; /* 定义网格行:第一行高度为100px 第二行高度为160px*/grid-template-rows: 100px 160px;/* 定义网格间距:行间距和列间距均为20px */grid-gap: 20px;width: 600px;border: 1px solid #ccc;border-radius: 6px;margin: 100px auto;padding: 20px;}.grid-item {background-color: yellowgreen;}
</style>
...<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>
...

2、网格元素常用属性

注意:以下属性值中value的取值均为数值型,代表的是网格线的行或列数;

序号属性描述
1grid-column-start指定网格元素列的开始位置;
2grid-column-end指定网格元素列的结束位置;
3

grid-column 

grid-column-start 和 grid-column-end 的缩写形式;
4grid-row-start指定网格元素行的开始位置;
5grid-row-end指定网格元素行的结束位置;
6grid-rowgrid-row-start 和  grid-row-end 的缩写形式;

(1)属性说明

【grid-column-start属性】

该属性用来指定某一网格元素列的开始位置

.grid-item{grid-column-start : value;
}
  • 表示该网格元素【.grid-item】在第value列开始;
【grid-column-end属性】

该属性用来指定某一网格元素列的结束位置

.grid-item{grid-column-end : value;
}
  • 表示该网格元素【.grid-item】在第value列结束;
【grid-column属性】

该属性用来指定某一网格元素列的开始位置和结束位置

.grid-item{grid-column : value1 / value2;
}
  • 表示该网格元素【.grid-item】在第value1列开始,value2列结束;
  • value2的取值可以是  span x,表示跨x列合并;
【grid-row-start属性】

该属性用来指定某一网格元素行的开始位置

.grid-item{grid-row-start : 1;
}
  • 表示该网格元素【.grid-item】在第1行开始;
【grid-row-end属性】

该属性用来指定某一网格元素行的结束位置

.grid-item{grid-row-end : 3;
}
  • 表示该网格元素【.grid-item】在第3行结束;
【grid-row属性】

该属性用来指定某一网格元素行的开始位置和结束位置

.grid-item{grid-row : value1 / value2;
}
  • 表示该网格元素【.grid-item】在第value1行开始,value2行结束;
  • value2的取值可以是  span x,表示跨x行合并;

(2)使用实例

...
<style>.grid-container {/* 添加网格容器:将该元素设置为网格容器 */display: grid;/* 定义网格列:三个相等宽度的列 */grid-template-columns: 1fr 1fr 1fr; /* 定义网格行:两行 高度均为160px */grid-template-rows: 160px 160px;/* 定义网格间距:行间距和列间距均为20px */grid-gap: 20px;width: 600px;border: 1px solid #ccc;border-radius: 6px;margin: 100px auto;padding: 20px;}.grid-item {background-color: yellowgreen;}.item1{/* 设置第一个网格元素 从第1行开始,跨2行合并 */grid-row: 1 / span 2;}.item4{/* 设置第四个网格元素 从第2列开始,到第4列结束 */grid-column: 2 / 4;}
</style>
...<body><div class="grid-container"><div class="grid-item item1">1</div><div class="grid-item">2</div><div class="grid-item">3</div><div class="grid-item item4">4</div></div>
</body>

3、fr单位

  • 网格行、列可以使用任何长度单位进行定义;
  • 网格布局中引入了新的fr单位,可以更灵活的创建网格行或列;
  • 使用以下代码可以创建三个等宽的网格列;
.grid-container {display: grid;grid-template-columns: 1fr 1fr 1fr;width:600px;
}

4、grid布局优势

  • 高效率:使用Grid布局的页面元素更加简单有序,使得开发和维护工作更便捷,更高效;
  • 灵活性:使用Grid布局可以定制不同的网页布局,灵活性高;
  • 响应式:使用Grid布局的页面支持响应式,能够自适应不同设备和屏幕尺寸;
  • 语义化:Grid布局中都是语义化属性,容易理解和维护;
  • 多支持:大多数主流浏览器都支持Grid布局,包括Chrome、Firefox、Safari 和 Edge;

三、Grid布局示例

1、布局效果

2、完整代码

<!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>.grid-container {/* 添加网格容器:将该元素设置为网格容器 */display: grid;/* 定义网格列:三列等宽 */grid-template-columns: 1fr 1fr 1fr;/* 定义网格行:三行高度均为160px */grid-template-rows: 160px 160px 160px;/* 定义网格间距:行间距和列间距均为10px */grid-gap: 10px;width: 600px;/* height: 400px; */border: 1px solid #ccc;border-radius: 6px;margin: 80px auto;padding: 10px;}.grid-item {background-color: yellowgreen;}.item6{/* 设置该元素从第2列开始,到第4列结束 */grid-column: 2 / 4;/* 设置该元素从第2行开始,合并两行 */grid-row: 2 / span 2;}</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 item6">6</div></div>
</body></html>

四、实现过程

1、添加元素

先准备一个盒子,作为grid布局的网格容器,并在其中添加6个网格元素,如下图所示,

  • 给.grid-container元素添加属性【 display : grid 】,使其成为网格容器;
  • 并在其中添加6个.grid-item元素,即为网格元素;

<!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>.grid-container{/* 添加网格容器:将该元素设置为网格容器 */display: grid;width: 600px;height: 400px;border: 1px solid #ccc;border-radius: 6px;margin: 20px auto;padding: 10px;}</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、划分网格行列

根据布局的效果图,知道该布局由【三行三列】组成的,只不过最后一个元素独占两行两列;

先将其划分成三行三列;

...
grid-template-columns: 1fr 1fr 1fr ;
grid-template-rows: 160px 160px 160px ;
grid-gap: 10px;
...
  • grid-template-columns:该属性用来定义网格中的三列;
  • grid-template-rows:该属性用来定义网格中的三行;
  • grid-gap:该属性用来定义网格单元的间距;

3、找出网格线

该网格布局中有三行三列网格区域,所以纵向有四条网格线,横向也有四条网格线,依次进行编号,如下图所示:

  

4、定位网格元素

给需要单独定位的网格元素添加样式:

  • 第6个网格元素是从第2列开始,到第4列结束;第2行开始,到第4行结束;
...
.item6{/* 设置该元素从第2列开始,到第4列结束 */grid-column: 2 / 4;/* 设置该元素从第2行开始,合并两行 */grid-row: 2 / span 2;
}
...

四、总结

个人觉得,使用Grid网格布局时,一般可以采用以下四个步骤:

  • 1. 添加:添加网格容器和网格元素;
  • 2. 划分:确定好效果图的行和列,进行网格单元划分;
  • 3. 找线:找出所有的网格线,进行编号;
  • 4. 定位:根据所找的网格线编号,对需要特殊处理的网格单元重新定位即可;

======================================================================

每天进步一点点,快来试试这个有趣的布局吧!

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

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

相关文章

基于PHP的酒店管理系统(改进版)

有需要请加文章底部Q哦 可远程调试 基于PHP的酒店管理系统(改进版) 一 介绍 此酒店管理系统(改进版)基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端jquery插件美化。系统角色分为用户和管理员。系统在原有基础上增加了注册登录注销功能&#xff0c;增加预订房间图片…

Claude走向开放

Claude的愿景一直是创建能够与人们协同工作并显著提升他们工作流程的人工智能系统。朝着这一方向迈进&#xff0c;Claude.ai的专业版和团队版用户现在可以将他们的聊天组织到项目中&#xff0c;将精选的知识和聊天活动整合到一个地方&#xff0c;并且可以让团队成员查看他们与C…

什么是期货基金?

期货基金&#xff0c;是指广大投资者将资金集中起来&#xff0c;委托给专业的期货投资机构&#xff0c;并通过商品交易顾问进行期货投资交易&#xff0c;投资者承担投资风险并享有投资利润的一种集合投资方式。期货基金的投资对象主要有两大类商品&#xff1a;期货与金融期货。…

django学习入门系列之第三点《案例 商品推荐部分》

文章目录 划分区域搭建骨架完整代码小结往期回顾 划分区域 搭建骨架 /*商品图片&#xff0c;父级设置*/ .slider .sd-img{display: block;width: 1226px;height: 460px; }<!-- 商品推荐部分 --> <!--搭建出一个骨架--> <div class"slider"><di…

提高开发效率之——工具介绍

一 . SerialDebug 串口调试工具 SerialDebug 是一个串口调试工具&#xff0c;它主要用于帮助电子工程师和软件开发者进行串口通信的调试工作。以下是 SerialDebug 工具的一些主要作用和特点: 基础串口通信功能&#xff1a;提供打开、关闭、接收、发送数据的基础串口操作。 数…

.NET C# 使用OpenCV实现人脸识别

.NET C# 使用OpenCV实现模型训练、人脸识别 码图~~~ 1 引入依赖 OpenCvSHarp4 - 4.10.0.20240616 OpenCvSHarp4.runtime.win - 4.10.0.20240616 2 人脸数据存储结构 runtime directory | face | {id}_{name} | *.jpg id - 不可重复 name - 人名 *.jpg - 人脸照片3 Demo 3.…

前置章节-熟悉Python、Numpy、SciPy和matplotlib

目录 一、编程环境-使用jupyter notebook 1.下载homebrew包管理工具 2.安装Python环境 3.安装jupyter 4.下载Anaconda使用conda 5.使用conda设置虚拟环境 二、学习Python基础 1.快排的Python实现 (1)列表推导-一种创建列表的简洁方式 (2)列表相加 2.基本数据类型及运…

FastGPT 调用Qwen 测试Hello world

Ubuntu 安装Qwen/FastGPT_fastgpt message: core.chat.chat api is error or u-CSDN博客 参考上面文档 安装FastGPT后 登录&#xff0c; 点击右上角的 新建 点击 这里&#xff0c;配置AI使用本地 ollama跑的qwen模型 问题&#xff1a;树上有3只鸟&#xff0c;开了一枪&#…

使用CDN方式创建Vue3.0应用程序

CDN 的全称是 content delivery network&#xff0c;即内容分发网络。它是构建在现在的互联网基础之上的一层智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发和调度等功能模块&#xff0c;使用户就近获取所需内容&#xff0c…

matlab量子纠缠态以及量子门操作下的量子态

前言 今天我们来聊聊题外话&#xff0c;量子纠缠&#xff0c;在目前物理分支中&#xff0c;要说最深&#xff0c;最能改变人类对宇宙影响的莫过于量子力学了&#xff0c;假如我们可以人为的对两个粒子施加纠缠态&#xff0c;那么我们将可以足不出户的完成对外界的操控 简介 …

《TopFormer: Token Pyramid Transformer for Mobile Semantic Segmentation》

期刊&#xff1a;CVPR 年份&#xff1a;2022 代码&#xff1a;https://github.com/hustvl/TopFormer 摘要 尽管视觉Transformer(ViTs)在计算机视觉领域取得了巨大的成功&#xff0c;但沉重的计算成本阻碍了它们在密集预测任务中的应用&#xff0c;如移动设备上的语义分割。…

Superagent:一个开源的AI助手框架与API

在人工智能日益普及的今天,如何将AI助手无缝集成到应用中成为了开发者们关注的焦点。今天,我们要介绍的Superagent正是一个为这一需求量身打造的开源框架与API。它结合了LLM、检索增强生成(RAG)和生成式AI技术,为开发者们提供了一个强大而灵活的解决方案。 一、Superagen…

电阻屏和电容屏

目录 一、电阻屏 1.欧姆定律 2.电阻屏原理 &#xff08;1&#xff09;测量 X 坐标 &#xff08;2&#xff09;测量 Y 坐标 3.电阻屏数据 二、电阻屏 1.原理 2.电容屏数据 &#xff08;1&#xff09;Type A &#xff08;2&#xff09;Type B 3.电容屏的实验数据 一、…

实战案例:如何用ChatGPT生成适合不同领域的高质量文章

随着人工智能技术的飞速发展&#xff0c;生成高质量文章已经不再是难题。特别是OpenAI开发的ChatGPT&#xff0c;更是为写作工作带来了极大的便利。那么&#xff0c;如何用ChatGPT生成适合不同领域的高质量文章呢&#xff1f;本文将通过实战案例&#xff0c;为大家详细讲解这一…

ARM 240625

练习&#xff1a; 汇编实现1-100累加&#xff0c;结果保存在r0 .text 声明下面内容都属于文本段内容 .globl _start 声明 _start 是一个全局启用的标签_start: 封装 _start 标签&#xff0c;汇编的标签和C中函数类似mov r0,#0 mov 把0 搬运到 r0 寄存器mov r1,#1 mov 把1 …

DWC USB2.0协议学习2--架构介绍

目录 1 系统级架构 1.1 DWC_otg PMU模块 1.2 DWC_otg层次结构框图 1.3 DWC_otg功能模块框图 1.4 USB Host体系结构 1.4.1 发送FIFO 1.4.2 接收FIFO 1.5 USB Device体系结构 1.5.1专用发送FIFO 1.5.2 单个接收FIFO 2 DWC_otg_core架构 2.1 AHB总线接口单元(BIU) 2.2…

SAP揭秘者-在QM标准功能增加取消UD的功能第二季

文章摘要&#xff1a; 上篇文章我已经给大家介绍怎么开发两个程序来取消UD&#xff0c;但是上篇文章中有提到这个时候去直接执行ZQEVAC40程序去取消物料凭证 则会报错&#xff0c;那么为了解决这个报错&#xff0c;我们需要更改后台配置。 接下来我给大家讲后台配置该怎么配置&…

浅谈Tomcat

文章目录 一、什么是Tomcat&#xff1f;二、Tomcat的下载安装三、使用tomcat访问资源 一、什么是Tomcat&#xff1f; Tomcat 就是一个 HTTP 服务器。 前面我们聊了HTTP服务器&#xff0c;像我们在网页输入URL&#xff0c;其实就是在给人家的HTTP服务器发送请求&#xff0c;既…

华为MDC开发者调试工具以及配置使用介绍

MDC的开发过程的三大工具&#xff1a;MMC、MDS、Mind Studio&#xff0c;这三个工具完成了开发过程中的配置文件编写、代码编写以及AI模型的开发三个任务。除了开发&#xff0c;MDC还准备了两个调试工具&#xff0c;用于使用过程中数据的查看等。这一些调试工具分别对映射MDC中…

802.11漫游流程简单解析与笔记_Part2_02_wpa_supplicant、cfg80211、nl80211内核与驱动的关系

wpa、cfg80211、nl80211内核与驱动的关系示意图如下&#xff1a; nl80211和cfg80211都是内核定义的标准接口&#xff0c;目的是规范驱动和应用的统一调用&#xff0c;wpa中常出现nl80211就是通过内核的nl80211接口调用对应cfg80211的部分&#xff0c;进而控制驱动收发数据或切换…