CSS学习之Grid网格布局基本概念、容器属性
网格布局
网格布局(Grid)是将网页划分成一个个网格单元,可任意组合不同的网格,轻松实现各种布局效果,也是目前CSS中最强大布局方案,比Flex更强大。

基本概念
容器和项目
当一个 HTML 元素将 display 属性设置为 grid 或 inline-grid(设成行内元素) 后,它就变成了一个网格容器(container),这个元素的所有直系子元素将成为网格元素,称为项目(item)。
.box { display: grid | inline-grid;
}
设为网格布局以后,容器子元素(项目)的float、display: inline-block、display: table-cell、vertical-align等设置都将失效。
行和列
容器里面的水平区域称为"行"(row),垂直区域称为"列"(column)。
网格线
划分网格的线,称为"网格线"(grid line)。水平网格线划分出行,垂直网格线划分出列。
正常情况下,n行有n + 1根水平网格线,m列有m + 1根垂直网格线,比如三行就有四根水平网格线。

单元格
行和列的交叉区域,称为"单元格"(cell)。 正常情况下,n行和m列会产生n x m个单元格。比如,3行3列会产生9个单元格。

图示中绿的背景为4个单元格,单元格各自有一个项目item。
注意:需要区分单元格和项目元素,比如一个3*3的九宫格,项目元素不一定就是9个,项目元素个数由开发者决定。
容器属性
grid-template-columns、 grid-template-rows
grid-template-columns属性定义每一列的列宽grid-template-rows属性定义每一行的行高
- 固定值 px
.container {display: grid;grid-template-columns: 50px 100px 50px;grid-template-rows: 50px 100px 50px;
}

- 百分比 %
.container {display: grid;grid-template-columns: 25% 25% 25% 25%;grid-template-rows: 50% 50%;
}

- repeat()
重复写同样的值非常麻烦,尤其网格很多时。可以使用repeat()函数,简化重复的值。
将上面的代码用repeat()改写如下:
.container {display: grid;grid-template-columns: repeat(4,25%);grid-template-rows: repeat(2,50%);
}
repeat()接受两个参数
- 参数一:重复的次数(上例分别是列为4,行为2)
- 参数二:重复的值。
repeat()重复某种模式也是可以的。
.container {display: grid;grid-template-columns: repeat(2, 40px 60px 80px);grid-template-rows: repeat(2,50%);
}
上述代码是将列宽为40px、60px、80px重复2次;行高2行,等分容器的高度。

- fr
为了方便表示比例关系,网格布局提供了fr关键字(fraction 的缩写,意为"片段")。
.container {width: 300pxdisplay: grid;grid-template-columns: 1fr 2fr 1fr;
}

同时,fr可以与绝对长度的单位结合使用,这时会非常方便。
.container {width: 300pxdisplay: grid;grid-template-columns: 1fr 100px 2fr
}
上面代码表示,第二列的宽度为固定的100px,第三列的宽度是第一列的2倍。

- minmax()
minmax()函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值。
grid-template-columns: 1fr 1fr minmax(100px, 1fr);
上面代码表示,第三列的宽度不小于100px,不大于1fr。
6. auto
auto关键字表示由浏览器自己决定长度。
.container {width: 300pxdisplay: grid;grid-template-columns: 50px auto 50px;
}
上面代码中,第二列的宽度为容器宽度除第一、第三列的总宽度外所占最大的宽度,除非单元格内容设置了min-width,且这个值大于最大宽度。

- auto-fill、auto-fit
auto-fill与auto-fit直译为 自适应 与 自填充,一般用来实现自适应布局的。
.container {display: grid;grid-template-columns: repeat(auto-fill, 100px);
}
auto-fill:
If the grid container has a definite or maximal size in the relevant axis, then the number of repetitions is the largest possible positive integer that does not cause the grid to overflow its grid container.
如果网格容器在相关轴上具有确定的大小或最大大小,则重复次数是最大可能的正整数,不会导致网格溢出其网格容器。
.container {width: 400px;display: grid;grid-template-columns: repeat(auto-fill, minmax(200px , 1fr));
}

auto-fit:
Behaves the same as
auto-fill, except that after placing the grid items any empty repeated tracks are collapsed。
行为与 auto-fill 相同,除了放置网格项目后,所有空的重复轨道都将消失。简单来说,就是如果元素数量不够放满一行,则 auto-fit 会将元素平铺,铺满一行。
.container {width: 400px;display: grid;grid-template-columns: repeat(auto-fit, minmax(200px , 1fr));
}

- 网格线名称
grid-template-columns属性和grid-template-rows属性里面,还可以使用方括号,指定每一根网格线的名字,方便以后的引用。
.container {display: grid;grid-template-columns: [c1] 100px [c2] 100px [c3] 100px [c4];grid-template-rows: [r1] 100px [r2] 100px [r3] 100px [r4];
}
上述代码表示 3*3 的九宫格,4根垂直的网格线的名称分别是c1、c2、c3、c4;4根水平的网格线名称分别是:r1、r2、r3、r4。

同时网格布局允许同一根线有多个名字,比如:
grid-template-columns: [c1 c11 c111] 100px [c2 c22] 100px [c3] 100px [c4];
相关文章:
CSS学习之Grid网格布局基本概念、容器属性
网格布局 网格布局(Grid)是将网页划分成一个个网格单元,可任意组合不同的网格,轻松实现各种布局效果,也是目前CSS中最强大布局方案,比Flex更强大。 基本概念 容器和项目 当一个 HTML 元素将 display 属性…...
前后端交互接口(二)
前后端交互接口(二) 前言 在上一集我们约定了我们前后端交互接口的三条规则。这一集我们就先来看一看我们的一些proto文件。 浅看proto文件 在看文件之前,还是简单谈谈Protobuf Protobuf通过一个.proto文件定义数据结构,这个…...
HarmonyOs DevEco Studio小技巧28--部分鸿蒙生命周期详解
目录 前言 页面和自定义组件生命周期 页面生命周期 onPageShow --- 表示页面已经显示 onPageHide --- 表示页面已经隐藏 onBackPress --- 表示用户点击了返回键 组件生命周期 aboutToAppear --- 表示组件即将出现 onDidBuild --- 表示组件已经构建完成 aboutToDisap…...
STM32(hal库)的msp初始化HAL_TIM_Base_MspInit有什么用?为什么单独设置这个,而不是在timer_init()函数里直接初始化?
在STM32 HAL库中,HAL_TIM_Base_MspInit 函数是一个与定时器(TIM)相关的底层初始化函数,其名称中的 "Msp" 代表 MCU Service Package(微控制器服务包),这是HAL库的一部分,用…...
三品PLM系统如何规范企业图纸文档资料电子化管理
三品PLM系统如何规范企业图纸文档资料电子化管理 图纸文档是企业设计、生产、管理的重要信息载体,是产品设计与生产维护的关键。传统纸质归档已无法满足现代需求,电子化管理成为提升效率和文档一致性的重要手段。然而,许多企业在实施电子化管…...
鸿蒙开发:arkts 如何读取json数据
为了支持ArkTS语言的开发,华为提供了完善的工具链,包括代码编辑器、编译器、调试器、测试工具等。开发者可以使用这些工具进行ArkTS应用的开发、调试和测试。同时,华为还提供了DevEco Studio这一一站式的开发平台,为运行在Harmony…...
Java学习篇之JVM 调优
Java学习篇之JVM 调优 一、JVM 是什么?二、JVM 官方参数建议三、JVM调优的场景四、如何监控JVM五、JVM调优的流程步骤1. 明确优化目标2. 监控和分析3. 确定调优参数4. 实施调优策略5. 持续观察和调整6. 定期评估和优化 一、JVM 是什么? JVM,…...
LangChain上使用huggingface的embedding模型(如jina-embeddings-v3)
一、背景知识 embedding将文本映射到稠密的向量空间中,方便存储和查询。 huggingface的embedding榜单 这里结合自己的应用场景,选择1b以下的embedding模型,综合考量下选择arkohut/jina-embeddings-v3 模型链接 下载 使用模型卡片提供的命令…...
对象优化及右值引用优化(一)
对象优化及右值引用优化 对象的函数调用时机 class Test { public:Test(int val 0) :val_(val) {cout << "Test::Test" << endl;}~Test(){cout << "Test::~Test" << endl;}Test(const Test& test){cout << "Tes…...
江西省技能培训平台(逆向破解登录国密SM2)
江西省技能培训平台(逆向破解登录) 登录破解(国密sm2加密方式) 请求接口 https://api.cloud.wozhipei.com/auth/user/v1/login 使用身份证和密码登录发现有password加密,好开始逆向js 全局搜索发现使用国密SM2进行加密 模拟算法 js 使用js进行模拟算法 <…...
用万用表测量三极管:【判断是NPN\PNP+3极性】
三极管种类分2种,一种NPN型三极管,另外一种为PNP三极管。三极管由2个PN结组成。因此,我们可以将三极管看作由2个二极管组成。通过下图可以知道,三极管的公共端为B极(基极)。 1:测量方法 用万用…...
StableDiffusion系列教程 | 什么是SD?SD能做什么?有哪些应用场景?
随着人工智能技术的飞速发展,人工智能应用已经渗透到我们生活方方面面。在众多AI技术中,Stable Diffusion(简称SD)作为一种先进的图像生成技术,正逐渐成为创意产业的新宠。在本系列的首篇文章中,我们将一起…...
AutoCAD的Dwg版本代号、R版本参数值以及二次开发时VS、.NET版本关系
Dwg的AC版本代号 出处:https://www.autodesk.com.cn/support/technical/article/caas/sfdcarticles/sfdcarticles/CHS/drawing-version-codes-for-autocad.html 以下是AutoCAD图形的不同版本代号: MC0.0 - DWG Release 1.1 AC1.2 - DWG R1.2 AC1.4 - DW…...
解密可观测行业中的语义规范 — 代码世界中的“语言艺术”
可观测行业中的语义规范 语义规范可以说在我们生活中无处不在,它为某种语言或文化中的单词和短语提供了一致的意义,以促进更清晰的交流。 而在计算机世界中,语义规范也同样甚至更加关键,因为屏幕上的文本缺乏更丰富的对话环境—…...
esp32 ap httpsever 控制led
功能:浏览器/open 开 led /close 关led 如不关,则亮灯10秒自动关闭 已买220v 转5V电源,5V固态继电器,开始组装无线开关。 代替家里华为的hlink灯泡,此灯必须要连入网络才能控制开和关,经常时灵时不…...
告别复杂判断!Python中实现函数重载的终极技巧
引言 说到函数重载,学过 Java 的同学应该不陌生,最常用的地方应该就是打印 log 了,对于不同的参数,调用的是不同的重载函数。那么 Python 如何实现函数重载呢? 重载概念 函数重载是指在同一作用域内,允许…...
Clang-Format:让你的代码整齐划一,格式不再烦恼
在现代软件开发中,代码规范和一致性对团队协作和代码质量至关重要。如何保持代码风格一致,避免手动格式化的繁琐操作?clang-format 是一款强大而灵活的代码格式化工具,它为开发者提供了高效的解决方案。本文将详细介绍 clang-form…...
【jvm】Full GC
目录 1. 说明2. 触发条件3. 优化4. 注意事项 1. 说明 1.Full GC(Full Garbage Collection)是Java垃圾回收过程中最重要且最昂贵的一种操作。2.Full GC涉及对整个堆内存(包括年轻代和老年代)的垃圾回收。3.当Full GC发生时&#x…...
【Python】实战:请使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息
# 定义汽车基类 class Car:def __init__(self, model, license_plate):self.model model # 车型self.license_plate license_plate # 车牌def start(self):print(f"{self.model} ({self.license_plate}) 启动了。")def stop(self):print(f"{self.model} ({s…...
互联网摸鱼日报(2024-11-07)
互联网摸鱼日报(2024-11-07) 36氪新闻 阿华田再现颓势 中国旅游景区上市公司,三季度财报好看吗? 电动化浪潮下,消费者彻底放弃百年品牌BBA? 估值114亿,海尔系独角兽终止IPO 又一知名品牌门店全关,高端…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
