CSS 网格布局

 网格布局是一个二维布局系统,允许开发者以行和列的形式创建灵活的网络,并将内容放置在网络的单元格中。有些元素可能只占据网络的一个单元,另一些元素则可能占据多行或多列。

网格的大小既可以精确定义,也可以根据自身内容自动计算。既可以将元素精确地放置到网络的某个位置,也可以让其在网格内自动定位。

1 网格的组成部分

将一个DOM元素设置为display:grid; 使其成为一个网格容器,它的子元素则变成网格元素。

图 网格布局示意图

网格容器:样式设置为display:grid;的元素。

网格元素:网格容器下的子元素。

网格线:构成了网格的框架,一条网格线可以水平或垂直(并且有对应编号,例如从左到右,是从编号1开始)。图中数字编号注明的框架线。

网格轨道:一个网格轨道是两条相邻网格线之间的空间。例如图中粉色和青色的部分。

网格单元:水平和垂直的网格轨道交叉重叠的部分。

网格区域:位于两条垂直网格线和两条水平网格线之间(由一个或多个网格单元组成)。

1.1 网格容器相关属性

display

display: grid; 将元素设置为网格容器。

display: inline-grid; 将元素设置为行内块级网格容器。

图 网格容器与行内块级网格容器

grid-template-*

grid-template-columns、grid-template-rows: 定义网格容器的轨道大小(列或行)。同时可以指定轨道数量。可以使用px、fr以及css函数(repeat()、minmax())来定义。

grid-template-areas: 用于定义区域名称,每个字符串(用引号括起来)代表网格的一行。

grid-auto-*

grid-auto-columns、grid-auto-rows: 定义自动生成的网格轨道(行或列)的大小。

grid-auto-flow: 自定自动布局的方式,可以是行优先(row,默认值)或列优先(column)。 还可以设置为dense,表示稍后出现较小的网格项时,尝试填充网格中较早的空缺。

grid-gap

定义行和列之间的间距。 是grid-row-gap和grid-column-gap的简写.

表 网格容器的相关属性

grid-[column|row]-[start|end]

grid-column-start、grid-row-start、grid-column-end、grid-row-end:网格项开始(结束)的网格线编号。

grid-column、grid-row: 是对应start和end的缩写,可以使用开始编号/结束编号、开始编号/span 行数(列数)来指定。

grid-area

指定网格项所占的自定义区域。(可以使用grid-template-areas 中定义的区域名称来指定。)

order

表示网格项的层叠位置,值越小,网格项越靠前。

表 网格项目的相关属性

图 网格容器与项目的示意

第2个元素从水平网格线1到水平网格线2,从垂直网格线2到垂直网格线4。

第7个元素从水平网格线1开始,跨了2行,从垂直网格线1到垂直网格线3。

第7个元素与第2个元素有重叠,因为第二个元素的order值更大,所以其在上面。

注意:图中元素的顺序与代码中的顺序不同,图中元素1的位置位于元素7和元素2的后面。

1.2 网格线与区域的命名

1.2.1 网格线命名

记录所有网格线的编号很麻烦,可以给网格线命名,并在布局时使用网格线的名称,而不是编号。

1.同一个网格线可以用多个命名:

grid-template-columns: [left-start] 1fr 1fr [left-end right-send]1fr [right-start] 1fr;

/*left-start/ left-end 的简写*/

grid-column: left;

2.可以给不同区域命名同一个名称:

grid-template-columns: [row] 1fr 1fr [row] 1fr [row];

/*表示第1个叫row的网格线到第3个叫row的网格线 */

grid-column: row 1  /  row 3; 

1.2.2 区域命名

grid-template-areas: "title title ."
                 ". . ."
                 ". . .";

grid-area: title;

不同的区域可以同样的命名,但是同名区域必须相连。title . title 这样是错误的。

1.3 显式和隐式网格

使用grid-template-*定义网络轨道时,创建的是显式网络,但是有些网格元素仍然可以放在显式轨道外面,此时会自动创建隐式轨道以扩展网络,从而包含这些元素。

grid-auto-* 属性为隐式轨道指定大小。

grid-template-columns: repeat(auto-fill,minmax(100px,1fr));

grid-template-columns: repeat(auto-fit,minmax(100px,1fr));

上面两行都是用于创建一个弹性的网格轨道。不同点在于auto-fill与auto-fit。

定义

特点

auto-fill

尽量填满容器的宽度(或高度),同时确保每个网格项的大小不小于minmax指定的最小值。

  1. 网格项目的数量会根据容器的大小变化而变化。
  2. 网格项目的大小不会因容器的大小增加而无限拉伸。
  3. 可能会出现空的网格轨道。

auto-fit

会填满容器的宽度(或高度),尽可能插入更多的网格项,但是能确保每个项目项的大小不小于minmax指定的最小值。

  1. 网格项目可能会因为容器的大小增加而拉伸,以填充额外的空间。
  2. 不会出现空的网格轨道。

表 auto-fill 与 auto-fit 的对比

图 auto-fill 与 auto-fit 效果图

当不指定网格上元素的位置时,元素会按照其布局算法自动放置。默认情况下,布局算法会按元素在按元素在标记中的顺序将其逐列逐行摆放。当一个元素无法在某一行容纳时,算法会将它移动到下一行,寻找足够大的空间容纳它。

grid-auto-flow 可以控制布局算法的行为。它的初始值时row,上面描述的就是这个值的行为。如果值为column,按元素在标记中的顺序将其逐行逐列摆放,当一个元素无法在某一列容纳,算法会将它移动到下一列。

图 布局算法row 与 column的对比

上面布局中,网格中出现了空白部分,可以在上面属性中加上一个关键字(dense),它让算法紧凑地填满网格里的空白,但是可能会改变某些网格元素的顺序。加上这个关键字,小元素就会“回填”大元帅造成的空白区域。

图 布局算法加上dense的效果

​​​​​​​1.4 对齐

justify-* 是设置水平方向的位置。align-* 是设置垂直方向的位置。

属性

作用于

对齐

常用属性值

justify-items

align-items

网格容器

网格区域内的所有元素。

stretch(默认值):网格单元会拉伸以填满整个网格轨道。

start、end、center:网格单元对齐到网格轨道起始/结束/居中的位置。

self-start、self-end:网格单元对齐到自身的起始/结束(取决于writing-mode和direction等属性)边缘

align-items 还有baseline属性值,表示网格单元对齐到它们的基线。

justify-content

align-content

网格容器

网格区域内的网格轨道。

start(默认值)、end、center网格区域从容器起始/末尾/居中边缘开始排列。

stretch: 拉伸以填满(较少用)

space-around: 网格轨道之间的空间相等,网格轨道距容器边缘的空间等于轨道之间空间的一半。

space-between: 网格轨道之间的空间相等,但网格轨道与容器边缘之间没有空间。

space-evenly: 网格轨道之间、网格轨道与容器边缘之间的空间相等。

justify-self

align-self

网格元素

网格区域内的网格元素。

会覆盖justify-items 或align-items的值。

auto: 使用*-item属性的值。

start、end、center: 网格项对齐单元格的起始/结束/居中边缘。

stretch: 默认值。

表 网格内的对齐属性

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

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

相关文章

C/C++(六)多态

本文将介绍C的另一个基于继承的重要且复杂的机制,多态。 一、多态的概念 多态,就是多种形态,通俗来说就是不同的对象去完成某个行为,会产生不同的状态。 多态严格意义上分为静态多态与动态多态,我们平常说的多态一般…

实战应用WPS WebOffice开放平台服务

概述 根据公司的业务需要,主要功能是在线编辑文档,前端的小伙伴进行的技术调研,接入的是WPS WebOffice,这里只阐述技术介入的步骤、流程和遇到的坑进行的一些总结。 实践 WPS WebOffice 开放平台进行认证 在开始之前&#xff…

【NOIP提高组】加分二叉树

【NOIP提高组】加分二叉树 💐The Begin💐点点关注,收藏不迷路💐 设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整…

Redis 持久化 总结

前言 相关系列 《Redis & 目录》(持续更新)《Redis & 持久化 & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Redis & 持久化 & 总结》(学习总结/最新最准/持续更新)《Redis & …

通信协议——UART

目录 基础概念串行&并行串行的优缺点 单工&双工 UART基本概念时序图思考:接收方如何确定01和0011 基础概念 串行&并行 串行为8车道,并行为1车道 串行的优缺点 通行速度快浪费资源布线复杂线与线之间存在干扰 单工&双工 单工&#xf…

NewStarCTF 2023 公开赛道 Web week1-week2

目录 week1 泄漏的秘密 Begin of Upload Begin of HTTP ErrorFlask ​Begin of PHP R!C!E! EasyLogin ​week2 游戏高手 include 0。0 ez_sql ​Unserialize? Upload again! R!!C!!E!! week1 泄漏的秘密 使用ctf-scan.py(https://gith…

上传Gitee仓库流程图

推荐一个流程图工具 登录 | ProcessOnProcessOn是一个在线协作绘图平台,为用户提供强大、易用的作图工具!支持在线创作流程图、思维导图、组织结构图、网络拓扑图、BPMN、UML图、UI界面原型设计、iOS界面原型设计等。同时依托于互联网实现了人与人之间的…

Qt中使用线程之QConcurrent

QConcurrent可以实现并发,好处是我们可以不用单独写一个类了,直接在类里面定义任务函数,然后使用QtConcurrent::run在单独的线程里执行一个任务 1、定义一个任务函数 2、定义1个QFutureWatcher的对象,使用QFutureWatcher来监测任…

用Python将Office文档(Word、Excel、PowerPoint)批量转换为PDF

在处理不同格式的Office文档(如Word、Excel和PowerPoint)时,将其转换为PDF格式是常见的需求。这种转换不仅确保了文件在不同设备和操作系统间的一致性显示,而且有助于保护原始内容不被轻易修改,非常适合于正式报告、提…

Redisson(三)应用场景及demo

一、基本的存储与查询 分布式环境下&#xff0c;为了方便多个进程之间的数据共享&#xff0c;可以使用RedissonClient的分布式集合类型&#xff0c;如List、Set、SortedSet等。 1、demo <parent><groupId>org.springframework.boot</groupId><artifact…

【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)

文章目录 引言I SSL/TLS Not ImplementedTomcat 服务器 SSL 证书安装部署(JKS 格式)Tomcat 服务器 SSL 证书安装部署(PFX 格式)HTTP 自动跳转 HTTPS 的安全配置(可选)修复SSL证书版本低II 主机漏洞扫描常见修复方案Apache JServ protocol serviceSlow HTTP DEnial of Ser…

多楼层智能穿梭:转运机器人助力制造业转型升级

针对当前喷砂产品人工转运存在的劳动强度大、效率低、安全隐患多等问题&#xff0c;本方案提出设计一套高效、安全、多楼层自动转运系统&#xff0c;采用潜伏式转运机器人结合电梯与升降平台技术&#xff0c;实现平面类、立柱类及小工件类喷砂产品的自动化、智能化转运。 项目需…

Docker 与 Yocto

Yocto项目为什么需要Docker Yocto 项目并不直接依赖 Docker&#xff0c;但在某些情况下使用 Docker 可以为 Yocto 项目提供以下具体且实际的好处&#xff1a; 1. 环境一致性&#xff1a; Yocto 构建需要一个稳定且一致的开发环境。不同的 Linux 发行版可能会有不同的库版本、…

深入探索电能消耗数据:基于机器学习的分析与洞察

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

Java | Leetcode Java题解之第504题七进制数

题目&#xff1a; 题解&#xff1a; class Solution {public String convertToBase7(int num) {if (num 0) {return "0";}boolean negative num < 0;num Math.abs(num);StringBuffer digits new StringBuffer();while (num > 0) {digits.append(num % 7);…

【数据结构】包装类简单认识泛型-Java

包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都给了一个包装类型 基本数据类型和对应的包装类 基本数据类型包装类ByteByteshortShortint Integer longLongfloatFloatdoubleDoublec…

wordcloud 字体报错

wordcloud 字体报错 词云库报错&#xff1a;Only supported for TrueType fonts字体文件问题pillow版本的问题wordcloud版本问题&#xff08;我的最终解决方案&#xff09; 词云库报错&#xff1a;Only supported for TrueType fonts 字体文件问题 解决方法 写绝对路径 &…

【故障解决】麒麟系统2403用户帮助手册点击无反应的解决方法

往期好文&#xff1a;【系统配置】命令行修改统信UOS的grub启动延时 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何解决麒麟系统2403版本中用户帮助手册点击无反应问题的文章。很多使用麒麟系统的小伙伴可能遇到过点击“用户帮助手册”后没有任何响应的情况…

【Linux学习】(3)Linux的基本指令操作

前言 配置Xshell登录远程服务器Linux的基本指令——man、cp、mv、alias&which、cat&more&less、head&tail、date、cal、find、grep、zip&tar、bc、unameLinux常用热键 一、配置Xshell登录远程服务器 以前我们登录使用指令&#xff1a; ssh 用户名你的公网…

gorm.io/sharding改造:赋能单表,灵活支持多分表策略(下)

背景 分表组件改造的背景&#xff0c;我在这篇文章《gorm.io/sharding改造&#xff1a;赋能单表&#xff0c;灵活支持多分表策略&#xff08;上&#xff09;》中已经做了详细的介绍——这个组件不支持单表多个分表策略&#xff0c;为了突破这个限制做的改造。 在上一篇文章中&…