CSS Grid 布局:属性及使用详解

CSS Grid 布局:属性及使用详解

  • 一、CSS Grid 布局的基础概念
  • 二、主要的 CSS Grid 属性
    • 1、`display: grid` / `display: inline-grid`声明 Grid 容器
    • 2、`grid-template-columns` / `grid-template-rows`Grid 容器中列和行的尺寸
    • 3、 `grid-template-areas`命名布局区域
    • 4、`gap`/ `grid-gap` 设置网格项之间的间距
    • 5、`grid-column` / `grid-row`:控制元素在 Grid 中的定位
    • 6、 `justify-items` / `align-items`:控制Grid项的对齐
    • 7、`justify-content` / `align-content`控制整个 Grid 容器的对齐
  • 三、常见的 Grid 布局设计
    • 1、简单的 2 列布局
    • 2、 定制化的页面布局
  • 四、总结

CSS Grid 布局是一个强大的二维布局系统,它使得网页开发中的布局工作更加简洁和高效。Grid 布局可以同时处理水平和垂直方向的排列,允许开发者轻松地设计复杂的网页布局。

一、CSS Grid 布局的基础概念

Grid 布局由两部分组成:

  1. Grid 容器(Grid Container):通过给元素设置 display: griddisplay: inline-grid 来创建一个 Grid 容器。所有直接子元素将成为 Grid 项目。
  2. Grid 项目(Grid Items):Grid 容器内的直接子元素。

二、主要的 CSS Grid 属性

1、display: grid / display: inline-grid声明 Grid 容器

  • 作用:用于声明一个元素为 Grid 容器,display: grid 会让元素成为块级 Grid 容器,display: inline-grid 会让元素成为内联 Grid 容器。
  • 使用方法
.container {display: grid;
}

2、grid-template-columns / grid-template-rowsGrid 容器中列和行的尺寸

  • 作用:定义 Grid 容器中列和行的尺寸。
    • grid-template-columns 设置列的宽度。
    • grid-template-rows 设置行的高度。
  • 语法:你可以指定多个尺寸,使用空格分开,或者使用 repeat() 函数来简化代码。
    示例:
.container {display: grid;grid-template-columns: 200px 1fr 100px;/* 200px:第一列宽度为 200px,1fr:第二列的宽度占剩余空间,100px:第三列宽度为 100px。 */grid-template-rows: 50px auto;/* 50px:第一行高度为 50px,auto:第二行的高度由内容决定。 */
}

效果:
在这里插入图片描述

3、 grid-template-areas命名布局区域

  • 作用:使用名称化的布局,将 Grid 项目放置在命名的区域内。
    • 通过命名区域来控制 Grid 项目的位置。
    • 每个区域可以由多个行或列组成,但必须由名称指定。
    • 这种方法可以让布局更直观、易于维护,也能让 HTML 和 CSS 之间的关系更加明确。
  • 语法grid-template-areas 是一个由多个字符串组成的属性,每个字符串代表 一行。而在每个字符串中,空格分隔的每个部分代表 一列,这些部分的顺序决定了每个区域在 Grid 容器中的位置。
    • 结构: 区域名称可以是你自定义的字符串,它们将用于对应的 grid-area 属性来定位元素。
      grid-template-areas: "区域1 区域2 区域3""区域4 区域5 区域6""区域7 区域8 区域9";
      
    • 在子元素样式中添加grid-area 属性来定位元素

示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Grid Layout Example</title><link rel="stylesheet" href="styles.css">
</head>
<body><div class="container"><header>Header</header><main>Main Content</main><aside>Sidebar</aside><footer>Footer</footer></div>
</body>
</html>
/* 创建 Grid 容器 */
.container {display: grid;grid-template-columns: 1fr 3fr; /* 两列布局,第一列占 1fr,第二列占 3fr */grid-template-rows: auto 1fr auto; /* 三行布局,第一行和第三行自适应高度,第二行占满剩余空间 */grid-template-areas: "header header"      /* header 跨越两列 */"sidebar main"       /* sidebar 在第一列,main 在第二列 */"footer footer";     /* footer 跨越两列 */gap: 20px; /* 设置行间距和列间距 */
}/* 分配每个区域的元素 */
header {grid-area: header;background-color: #f8f8f8;padding: 20px;text-align: center;
}main {grid-area: main;background-color: #e0e0e0;padding: 20px;
}aside {grid-area: sidebar;background-color: #d0d0d0;padding: 20px;
}footer {grid-area: footer;background-color: #b0b0b0;padding: 20px;text-align: center;
}

效果:
在这里插入图片描述

4、gap/ grid-gap 设置网格项之间的间距

gap(现在的标准)和grid-gap(在较老的浏览器中使用)属性用于设置网格(Grid)项之间的间距。它们可以单独设置行间距(行与行之间的距离)和列间距(列与列之间的距离),也可以同时设置行间距和列间距。

  • 作用:定义 Grid 项目之间的间距,可以同时设置行间距和列间距,或者单独设置。
  • 语法
    gap: <row-gap> <column-gap>;
    
    • <row-gap>:设置行间距(行与行之间的间距)。
    • <column-gap>:设置列间距(列与列之间的间距)。
    • 如果只设置一个值,则 row-gapcolumn-gap 都使用该值。

注意事项:

  • gap 属性适用于 Grid 布局 和 Flex 布局,所以它不仅能控制 Grid 容器项之间的间距,也适用于 Flex 容器中的项。
  • 在较老的浏览器中,gap 可能不被支持(例如 Internet Explorer),但现代浏览器都已经广泛支持该属性。

5、grid-column / grid-row:控制元素在 Grid 中的定位

  • 作用:控制 Grid 项目在行和列上的位置和跨度。
    • grid-column 用于定义一个元素在 水平(列) 方向上的起始和结束位置。它指定了元素从哪个列开始,跨越多少列。它是一个简写属性,将 grid-column-startgrid-column-end 结合在一起
    • grid-row 用于定义一个元素在 垂直(行) 方向上的起始和结束位置。它指定了元素从哪一行开始,跨越多少行。同样是一个简写属性,它将 grid-row-startgrid-row-end 结合在一起
  • 语法
    grid-column: <start-line> / <end-line>;
    grid-row: <start-line> / <end-line>;
    

实例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Grid Layout Example</title><style>.container {display: grid;grid-template-columns: 100px 100px 100px;grid-template-rows: 50px 50px 50px;gap: 10px;}.item1 {grid-column: 1 / 2;  /* 从第1列开始,到第2列结束 */grid-row: 1 / 2;     /* 从第1行开始,到第2行结束 */background-color: lightblue;}.item2 {grid-column: 2 / 4;  /* 从第2列开始,到第4列结束 */grid-row: 1 / 3;     /* 从第1行开始,到第3行结束 */background-color: lightcoral;}.item3 {grid-column: 1 / 2;  /* 从第1列开始,到第2列结束 */grid-row: 3 / 4;     /* 从第3行开始,到第4行结束 */background-color: lightgreen;}</style>
</head>
<body><div class="container"><div class="item1">Item 1</div><div class="item2">Item 2</div><div class="item3">Item 3</div>
</div>
</body>
</html>

效果:
在这里插入图片描述

6、 justify-items / align-items:控制Grid项的对齐

在 CSS Grid 布局中,justify-itemsalign-items 是两个重要的对齐属性,用于控制网格项在主轴和交叉轴上的对齐方式。

  • 作用:控制 Grid 项目在 Grid 单元格中的对齐方式。

    • justify-items:控制项目在水平轴上的对齐,它影响的是每个网格项相对于其所在单元格的对齐方式,而不是整个Grid 容器本身的对齐方式。
    • align-items:控制项目在垂直轴上的对齐,同样,它影响的是每个网格项相对于其所在单元格的对齐方式。
  • 语法

    justify-items: <alignment>;/* start:网格项对齐到网格单元格的开始边缘 end:网格项对齐到网格单元格的结束边缘center 网格项在网格单元格中居中对齐stretch 网格项拉伸填满整个网格单元格(这是默认值)*/
    align-items: <alignment>;
    /* start:网格项对齐到网格单元格的顶部边缘 end:网格项对齐到网格单元格的底部边缘center 网格项在网格单元格中垂直居中对齐stretch 网格项拉伸填满整个网格单元格(这是默认值)*/
    

示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Grid Layout Example</title><style>.container {display: grid;grid-template-columns: 100px 100px 100px;grid-template-rows: 100px 100px 100px;justify-items: center;  /* 水平居中对齐每个网格项 */align-items: center;    /* 垂直居中对齐每个网格项 */gap: 10px;              /* 网格项之间的间距 */}.item {background-color: lightgreen;padding: 20px;}</style>
</head>
<body><div class="container"><div class="item">Item 1</div><div class="item">Item 2</div><div class="item">Item 3</div><div class="item">Item 4</div><div class="item">Item 5</div><div class="item">Item 6</div>
</div></body>
</html>

效果:
在这里插入图片描述
注意事项:与 justify-contentalign-content 的区别
justify-itemsalign-items 是用于对齐网格项在各自单元格中的位置。而 justify-contentalign-content 是用于对齐整个 Grid 容器中的内容。

7、justify-content / align-content控制整个 Grid 容器的对齐

  • 作用:控制整个 Grid 容器内的项目如何在容器中对齐。

    • justify-content:控制整个 Grid 容器中网格项在水平方向(主轴)上的对齐方式。这个属性影响的是整个容器的网格内容,而不是单个网格项。
    • align-content:控制整个 Grid 容器中网格项在垂直方向(交叉轴)上的对齐方式。同样也只影响整个容器的网格内容。
  • 语法

    justify-items: <alignment>;/* start:将网格内容对齐到容器的起始边缘end:将网格内容对齐到容器的结束边缘center 将网格内容水平居中对齐stretch 将网格内容拉伸以填充整个容器(默认值)space-between 在网格项之间平均分配空白,首尾项紧贴容器边缘space-around 在网格项之间平均分配空白,网格项两侧都有相等的空间space-evenly 在网格项之间平均分配空白,每个网格项之间的间距都相等*/
    align-items: <alignment>;/* start:将网格内容对齐到容器的顶部end:将网格内容对齐到容器的底部center 将网格内容垂直居中对齐stretch 将网格内容拉伸以填充整个容器(默认值)space-between 在网格项之间平均分配垂直空白,首尾项紧贴容器的顶部和底部space-around 在网格项之间平均分配垂直空白,网格项的上下都有相等的空间space-evenly 在网格项之间平均分配垂直空白,每个网格项之间的间距都相等*/
    
  • 使用场景

    • 当网格项的总宽度或高度小于容器的宽度或高度时,justify-contentalign-content 可以用来控制整个网格内容在容器中的对齐位置。
    • 在有间距的情况下,它们可以用于控制网格项之间的空隙分配和对齐。

示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Grid Layout Example</title><style>.container {display: grid;grid-template-columns: 100px 100px 100px;grid-template-rows: 100px 100px 100px;justify-content: center;  /* 水平居中对齐整个网格 */align-content: center;    /* 垂直居中对齐整个网格 */gap: 10px;                /* 网格项之间的间距 */height: 500px;            /* 设置容器高度 */}.item {background-color: lightcoral;padding: 10px;}</style>
</head>
<body><div class="container"><div class="item">Item 1</div><div class="item">Item 2</div><div class="item">Item 3</div><div class="item">Item 4</div><div class="item">Item 5</div><div class="item">Item 6</div>
</div></body>
</html>

效果:
在这里插入图片描述

三、常见的 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>Grid Layout Example</title><style>.container {display: grid;grid-template-columns: 3fr 1fr;grid-gap: 20px;height: 500px;}.main {background-color: aqua}.sidebar {background-color: blueviolet}</style>
</head><body><div class="container"><div class="main">Main content</div><div class="sidebar">Sidebar</div></div></body>
</html>

效果:
在这里插入图片描述

2、 定制化的页面布局

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Grid Layout Example</title><style>.container {display: grid;height: 300px;grid-template-columns: 1fr 3fr;grid-template-rows: auto 1fr auto;grid-template-areas:"header header""sidebar main""footer footer";}header {grid-area: header;background-color: aqua}main {grid-area: main;background-color: cornflowerblue}aside {grid-area: sidebar;background-color: chocolate}footer {grid-area: footer;background-color: darkkhaki}</style>
</head><body><div class="container"><header>Header</header><main>Main Content</main><aside>Sidebar</aside><footer>Footer</footer></div></body>
</html>

效果:
在这里插入图片描述

四、总结

CSS Grid 布局是现代网页设计中的重要工具,它允许开发者创建复杂的布局结构,且不需要借助浮动或复杂的定位技巧。Grid 布局的核心在于将页面区域分成“行”和“列”,并通过指定项的跨度与位置来控制布局。理解 CSS Grid 的基础概念和属性是掌握这一布局方法的第一步。

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

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

相关文章

【数学建模】利用Matlab绘图(2)

一、Matlab中plot函数的基本用法 在matlab中&#xff0c;函数的基本用法主要包括以下几种 第一类&#xff1a; plot(X,Y,LineSpec) 第二类&#xff1a; plot(tbl,xvar,yvar) 1.1 第一类 1.1.1x-y坐标 x和y的选择取决于绘图所需的数据类型以及图像的类型。下表列出了几种…

编写工具模块

文章目录 1.新建模块1.新建模块sun-common-tool2.sun-dependencies指定依赖3.sun-common统一管理sun-common-tool子模块4.sun-common-tool的pom.xml5.清除掉创建模块时默认sun-frame对sun-common-tool进行管理 2.常用工具类1.DateUtils.java2.EncodeUtils.java3.IpUtils.java4.…

构建一个rust生产应用读书笔记四(实战3)

从这一节开始&#xff0c;我们将继续完善邮件订阅生产级应用&#xff0c;根据作者的选型sqlx作为数据库操作的类库&#xff0c;它有如下优点&#xff1a; 它旨在提供高效、安全且易于使用的数据库交互体验。sqlx 支持多种数据库&#xff0c;包括 PostgreSQL、MySQL 和 SQLite&…

视频直播点播平台EasyDSS推拉流技术结合无人机推流在道路交通巡检场景中的应用

随着城市化进程的加速&#xff0c;交通网络日益复杂&#xff0c;交通巡检工作面临着前所未有的挑战。传统的巡检方式往往依赖于人工巡查或地面监控设备&#xff0c;但这些方法存在巡检范围有限、效率低下等缺点。 无人机凭借其高空视野、灵活机动、实时监控等优势&#xff0c;…

VBA技术资料MF238:ADO提取多文件区域指定数据到工作表

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Mapper代理开发

引入 Mybatis入门方式中&#xff0c;以下代码仍存在硬编码问题 Mapper 代理开发&#xff1a; 目的&#xff1a; 解决原生方式中的硬编码 简化后期执行sql ------下图中&#xff0c;第一段代码是原生硬编码代码块&#xff0c;第二个是引入了Mapper代理开发的代码块。 Mapper代…

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程

本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…

使用C语言连接MySQL

库的准备 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的connect库&#xff0c;可以去官网下载&#xff0c;由于我们要下载到 Linux 操作系统中&#xff0c;也可以使用如下指令进行安装库 sudo apt-get install libmysqlclient-dev MySQL连接C/C的库通常会安装在/us…

【Android学习】RxJava

文章目录 资料连接1. Merge & Zip操作符: 合并数据源2. Map & FlapMap & ConcatMap & Buffer: 变换操作符3. retry & retryUntil & retryWhen : 错误处理操作符4. Transformer & Compose 转换操作符5. 网络请求嵌套回调 FlatMap6. 网络请求出错重连…

Mac配置 Node镜像源的时候报错解决办法

在Mac电脑中配置国内镜像源的时候报错,提示权限问题,无法写入配置文件。本文提供解决方法,青测有效。 一、原因分析 遇到的错误是由于 .npm 目录下的文件被 root 用户所拥有,导致当前用户无法写入相关配置文件。 二、解决办法 在终端输入以下命令,输入管理员密码即可。 su…

PyTorch基础入门

目录 前言一、[张量的广播&基本运算](https://www.bilibili.com/video/BV1Gg411u7Lr/?spm_id_from333.999.0.0)1. 张量的广播特性2. 逐点&规约&比较运算 二、张量的线性代数运算1. BLAS & LAPACK2. 矩阵形变及特殊矩阵构造3. 矩阵基本运算4. 矩阵的线性代数运…

【VSCode】常用插件汇总

1 Path Autocomplete&#xff08;路径提示的插件&#xff09; 步骤一&#xff1a;在vscode的扩展搜索中直接搜索Path Autocomplete&#xff0c;直接安装 步骤二&#xff1a;配置 配置 VS Code settings.json "path-autocomplete.pathMappings": {"": &q…

IOS通过WDA自动化中遇到的问题

IOS自动化遇到的问题 搭建WDA环境中遇到的问题1、XCode unsupport iphone xxx.2、创建Bundle Identifier出现问题&#xff1a;Communication with Apple failed3、创建Bundle Identifier出现问题&#xff1a;Automatic signing failed \Signing certificate is invalid4、创建B…

(六)- DRM驱动开发(qcom)

一&#xff0c;Linux Android Display 1&#xff0c;Linux Android Display Software Subsystem 密 2&#xff0c;Linux Android Display Architecture 密 二&#xff0c;DRM/KMS Adreno DPU 1&#xff0c;硬件框图 密 1.1 Qualcomm Adreno DPU 8-Series Overview 密 …

游戏AI实现-寻路算法(GBFS)

贪婪最佳优先算法是宽度优先遍历和贪婪算法结合的产物&#xff0c;使用启发式函数选择当前最低代价的节点&#xff0c;改善了宽度优先遍历需要遍历地图的大量节点来找寻结果的缺点。 算法过程&#xff1a; 1.首先设置开始节点的启发函数值&#xff08;h&#xff09;为0&#…

[Unity]Unity跨平台开发之Android简介

Android要求和兼容 图形接口支持 注意&#xff1a; 新的 Unity 项目默认不支持 OpenGL ES 2.0。 由于硬件和图形 API 的限制&#xff0c;并非所有渲染管道都与 Android 兼容。 图片压缩 Android标准压缩格式是ETC和ASTC。Unity默认压缩格式是ASTC。如果Android设备不支持您选…

监控易在汽车制造行业信息化运维中的应用案例

引言 随着汽车制造行业的数字化转型不断深入&#xff0c;信息化类IT软硬件设备的运行状态监控、故障告警、报表报告以及网络运行状态监控等成为了企业运维管理的关键环节。监控易作为一款全面、高效的信息化运维管理工具&#xff0c;在汽车制造行业中发挥着重要作用。本文将结合…

Trimble天宝三维激光扫描仪在建筑工程竣工测量中的应用【沪敖3D】

竣工测量是建筑项目竣工阶段的一个至关重要的环节&#xff0c;它为建筑工程的质量验收和成果核查提供了核心的参考依据。传统的竣工测量方法&#xff0c;如全站仪测量&#xff0c;主要依赖于现场人工操作&#xff0c;存在一些明显的局限性&#xff0c;例如作业时间长、工作量大…

健康养生:拥抱生活的艺术

健康养生&#xff1a;拥抱生活的艺术 在快节奏的现代生活中&#xff0c;健康已成为我们最宝贵的财富。健康养生&#xff0c;不仅仅是一种生活方式的选择&#xff0c;更是一种对待生活的态度&#xff0c;它关乎于如何在日常中寻找到平衡&#xff0c;让身心得以滋养&#xff0c;…

【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】

目录&#x1f60b; <第1关&#xff1a;print 函数操作> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <第2关&#xff1a;转义字符使用> 任务描述 相关知识 编程要求 测试说明 我的通关代码: 测试结果&#xff1a; <…