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.rhkb.cn/news/455833.html

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

相关文章

【算法篇】动态规划类(4)——子序列(笔记)

目录 一、Leetcode 题目 1. 最长递增子序列 2. 最长连续递增序列 3. 最长重复子数组 4. 最长公共子序列 5. 不相交的线 6. 最大子序和 7. 判断子序列 8. 不同的子序列 9. 两个字符串的删除操作 10. 编辑距离 11. 回文子串 12. 最长回文子序列 二、动态规划总结 …

ctfshow-web入门-web31

<?php ​ /* # -*- coding: utf-8 -*- # Author: h1xa # Date: 2020-09-04 00:12:34 # Last Modified by: h1xa # Last Modified time: 2020-09-04 00:49:10 # email: h1xactfer.com # link: https://ctfer.com ​ */ ​ error_reporting(0); if(isset($_GET[c])){$c …

Java语言-接口(下)

目录 1. 接口使用实例 1.1 给对象数组排序 1.2 Clonable接口和深拷贝 Cloneable 浅拷贝 深拷贝 1.3 抽象类和接口的区别 2. Object类 2.1 Object类的介绍 2.2 toString() 2.3 equals() 2.4 hashcode() 1. 接口使用实例 1.1 给对象数组排序 现有一个学生类&#…

关于java继承(深入解析父类属性的抽取与构造函数的作用)

目录 前言基础继承作用 理论分析父类属性的抽取构造函数调用父类构造函数会不会创建一个父类的对象&#xff1f;生命周期角度谁的属性用谁的构造函数初始化 示例解析代码代码调试展示构造函数初始化成员变量 总结 前言 在Java中&#xff0c;继承是一项至关重要的特性&#xff0…

详解23种设计模式——第二部分:结构型模式

目录 3 结构型模式 3.1 代理模式 3.2 适配器模式 3.2.1 默认适配器模式 3.2.2 对象适配器模式 3.2.3 类适配器模式 3.2.4 适配器模式总结 3.3 桥梁模式 3.4 装饰模式 3.4 门面模式 3.5 组合模式 3.6 享元模式 3.7 结构型模式总结 接上一篇&#xff1a;详解23种设计…

openrtp 音视频时间戳问题

解决音视频发送的rtp问题 openrtp增加了音频aac的发送&#xff0c;地址 OpenRTP Gitee开源地址 同时使用两个rtp &#xff0c;来发送音频和视频 使用以下音频rtp&#xff0c;是可以发送和接收的&#xff0c;音频端口在视频端口上2 v0 o- 0 0 IN IP4 127.0.0.1 sMy Stream cI…

Windows通过netsh控制安全中心防火墙和网络保护策略

Windows通过netsh控制安全中心防火墙和网络保护策略 1. 工具简介 【1】. Windows安全中心 【2】. netsh工具 netsh(Network Shell) 是一个Windows系统本身提供的功能强大的网络配置命令行工具。 2. 开启/关闭防火墙策略 在设置端口&#xff08;禁用/启用&#xff09;前&am…

使用 CDN 后 Apache 的日志记录客户真实 IP

经常搭建网站服务器的都知道&#xff0c;在给站点使用了 CDN 后 Web 应用的日志记录里就会只记录 CDN 节点 IP 了&#xff0c;这就没法看到真实客户请求 IP&#xff0c;对于日志分析、运维日常维护来说就有点儿麻烦了&#xff0c;今天明月结合在五洛云服务器上搭建的Apache环境…

多ip访问多网站

多IP访问多网站 1.预配操作 [rootlocalhost ~]# mount /dev/sr0 /mnt mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# systemctl stop firewalld ----------关闭防火墙 [rootlocalhost ~]# setenforce 0 -------关闭selinux2.安装n…

【论文阅读】ESRGAN

学习资料 论文题目:增强型超分辨率生成对抗网络(ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks)论文地址:[1809.00219] ESRGAN:增强型超分辨率生成对抗网络代码:xinntao / ESRGAN:ECCV18 研讨会 - 增强的 SRGAN。Champion PIRM Challenge 关于感知…

【机器学习】VQ-VAE(Vector Quantized Variational Autoencoder)

VQ-VAE&#xff08;Vector Quantized Variational Autoencoder&#xff09;是一种生成模型&#xff0c;它结合了变分自编码器&#xff08;Variational Autoencoder, VAE&#xff09;和向量量化&#xff08;Vector Quantization&#xff09;技术。VQ-VAE的主要目的在于通过离散潜…

【动态规划】子序列问题(上)

1. 最长递增子序列 300. 最长递增子序列 和子数组不同的是&#xff0c;子数组要求是连续的&#xff0c;子序列只要下标是递增的就可以&#xff0c;这里严格递增的意思是不能有相等的元素&#xff0c;必须一直递增 状态表示&#xff1a;以 i 位置为结尾的所有的子序列中最长递…

Android GPU Inspector分析帧数据快速入门

使用 谷歌官方工具Android GPU Inspector (AGI) 可以对Android 应用进行深入和全面的系统性能分析和帧性能分析 。AGI 是一个非常强大的分析工具&#xff0c;尤其是在需要诊断 GPU 性能问题和优化应用时&#xff0c;可以帮助你精准找到性能瓶颈。本文介绍如何使用该工具对帧数据…

梳理一下spring中,与message相关的知识点

本次梳理的相关知识点包括jms&#xff0c;amqp(rabbitmq)&#xff0c;sping-messaging&#xff0c;spring-integration&#xff0c;springcloud-stream&#xff0c;这些都是与消息message相关的内容&#xff0c;它们有什么区别与联系呢&#xff1f; 相关的要点与相互关系都整理…

物联网消息队列Emqx日志配置及日志追踪以及Centos7上的rc.local开机不执行、git提交的小问题

一、物联网消息队列Emqx日志配置及日志追踪 EMQX支持将日志输出到控制台或者日志文件&#xff0c;或者同时使用两者。使用 Docker 部署 EMQX&#xff0c;默认只能通过 docker logs 命令查看 EMQX 日志。EMQX 的默认日志级别为 warning&#xff0c;默认在单日志文件超过10MB(log…

word压缩大小怎么弄?快来试试这几种压缩word方法!

word压缩大小怎么弄&#xff1f;在处理Word文档时&#xff0c;如果遇到体积过大的情况&#xff0c;无疑会带来一系列麻烦&#xff0c;大型Word文档不仅占据大量存储空间&#xff0c;而且在传输过程中会耗费更多时间&#xff0c;想象一下&#xff0c;当你急需将一份重要的文档发…

Perl打印9x9乘法口诀

本章教程主要介绍如何用Perl打印9x9乘法口诀。 一、程序代码 1、写法① use strict; # 启用严格模式&#xff0c;帮助捕捉变量声明等错误 use warnings; # 启用警告&#xff0c;帮助发现潜在问题# 遍历 1 到 9 的数字 for my $i (1..9) {# 对于每个 $i&#xff0c;遍历 1…

【设计模式系列】观察者模式

一、什么是观察者模式 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了对象之间的一对多依赖关系&#xff0c;当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。这种模式也被称为发布-订阅模式&…

【AscendC算子开发】笔记2 算子高级开发和调试调优

算子调试 Tensor也可以通过特定的printf方法来打印&#xff0c;见上图。 gdb调试见上图。 为什么gdb调试无法成功&#xff0c;因为run.sh里面有两行export&#xff0c;如果直接通过.XX运行的话需要配置一下。 npu域也支持调试&#xff0c;可以使用上述的方法。 内存检测工…

AI自动生成PPT哪个软件好?智能生成PPT不再熬夜做课件

大概这世上&#xff0c;都是职场牛马对“PPT”这三个字母的头痛反应最大吧&#xff01; 是的&#xff0c;就连各个年级段的老师也是很头痛——愁着怎样能在排版整齐的情况下&#xff0c;将必考知识点都呈现在PPT每一张幻灯片页面里...... 近期打听到用人工智能生成ppt课件&am…