【前端】CSS-Grid网格布局

目录

  • 一、grid布局是什么
  • 二、grid布局的属性
  • 三、容器属性
    • 1、display
      • ①、语句
      • ②、属性值
    • 2、grid-template-columns属性、grid-template-rows属性
      • ①、定义
      • ②、属性值
        • 1)、固定的列宽和行高
        • 2)、repeat()函数
        • 3)、auto-fill关键字
        • 4)、fr关键字
        • 5)、minmax()函数
        • 6)、auto关键字
    • 3、grid-row-gap属性、grid-column-gap属性、grid-gap属性
    • 4、grid-template-areas属性
    • 5、grid-auto-flow属性
      • ①、语法
      • ②、属性值
    • 6、justify-items属性、align-items属性、place-items属性
      • ①、语法
      • ②、属性值
    • 7、justify-content属性、align-content属性、place-content属性
      • ①、语法
      • ②、属性值
    • 8、grid-auto-columns属性、grid-auto-rows属性
  • 四、项目属性
    • 1、grid-column-start属性、grid-column-end 属性
    • 2、grid-row-start属性、grid-row-end 属性
    • 3、justify-self 属性、align-self 属性、place-self 属性
      • ①、语法
      • ②、属性值
  • 五、应用场景
  • 六、Grid布局和flex布局二者区别
  • 七、总结

一、grid布局是什么

grid布局:网络布局,是目前唯一一种CSS二维布局方式,一种新的CSS布局模型,由纵横相交的两组网络线形成的框架性布局结构,能够同时处理行与列。号称是最强大的CSS布局方案。

擅长将一个页面划分为几个主要区域,以及定义这些区域的大小、位置、层次等关系

Grid布局是将容器划分成了“行”和“列”,产生了一个个的网格,我们可以将网格元素放在与这些行和列相关的位置上,从而达到我们布局的目的。

二、grid布局的属性

Grid布局属性可以分为两大类

  1. 容器属性
  2. 项目属性

三、容器属性

1、display

①、语句

.wrapper {display: grid / inline-grid;
}

②、属性值

  • grid:该容器元素是一个块级元素
  • inline-grid:该容器元素为行内元素

一旦声明,这个元素的所有直系子元素将成为网格项目

2、grid-template-columns属性、grid-template-rows属性

①、定义

  • grid-template-columns:属性设置列宽
  • grid-template-rows:属性设置行高

②、属性值

1)、固定的列宽和行高

.wrapper {display: grid;/*  声明了三列,宽度分别为 200px 100px 200px */grid-template-columns: 200px 100px 200px;grid-gap: 5px;/*  声明了两行,行高分别为 50px 50px  */grid-template-rows: 50px 50px;
}

2)、repeat()函数

可以简化重复的值,该函数接受两个参数,第一个参数是重复的次数,第二个参数是所要重复的值。比如上面行高都是一样的,我们可以使用repeat()函数进行实现,实际效果是一样的

.wrapper {display: grid;grid-template-columns: 200px 100px 200px;grid-gap: 5px;/*  2行,而且行高都为 50px  */grid-template-rows: repeat(2, 50px);
}

3)、auto-fill关键字

表示自动填充,让一行(或者一列)中尽可能的容纳更多的单元格

.wrapper-2 {display: grid;/* 列宽200,但是列的数量是不固定的*/grid-template-columns: repeat(auto-fill, 200px);grid-gap: 5px;grid-auto-rows: 50px;
}

4)、fr关键字

fr单位代表网格中可用空间的一等份,可以帮助我们创建灵活的网格轨道

.wrapper {display: grid;/* 第一个列宽设置为 200px,第二个列宽为剩余宽度的1/3,第三个列宽为剩余宽度的2/3 */grid-template-columns: 200px 1fr 2fr;grid-gap: 5px;grid-auto-rows: 50px;
}

5)、minmax()函数

有的时候我们想给网格元素一个最小和最大的尺寸,minmax()函数产生一个长度范围,表示长度就在这个范围之中都可以应用到网格项目中。它接受两个参数,分别为最小值和最大值

.wrapper-4 {display: grid;/* 第三个列宽最少也是要 300px,但是最大不能大于第一第二列宽的两倍。 */grid-template-columns: 1fr 1fr minmax(300px, 2fr);grid-gap: 5px;grid-auto-rows: 50px;
}

6)、auto关键字

由浏览器决定长度。通过auto关键字,我们可以轻易实现三列或者两列布局

.wrapper-5 {display: grid;/* 表示第一第三列为 100px,中间由浏览器决定长度,自适应 */grid-template-columns: 100px auto 100px;grid-gap: 5px;grid-auto-rows: 50px;
}

3、grid-row-gap属性、grid-column-gap属性、grid-gap属性

grid-row-gap属性、grid-column-gap属性分别设置行间距和列间距, grid-gap属性是两者的简写形式

  • grid-row-gap:10px:表示行间距是10px
  • grid-column-gap:30px:表示列间距是30px
  • grid-gap:10px 30px:表示行间距是10px,列间距是30px
.wrapper-1 {display: grid;grid-template-columns: 200px 100px 100px;grid-auto-rows: 50px;/* 行间距是10px */grid-row-gap: 10px;/* 列间距是20px */grid-column-gap: 20px;
}.wrapper {display: grid;grid-template-columns: 200px 100px 100px;/* 行间距是10px; 列间距是20px */grid-gap: 10px 20px;grid-auto-rows: 50px;
}

4、grid-template-areas属性

grid-template-areas属性用于定义区域,一个区域由一个或者多个单元格组成

一般这个属性跟网格元素的grid-area一起使用,在这里会一起介绍。grid-area属性指定项目放在哪一个区域

.wrapper {display: grid;grid-gap: 10px;grid-template-columns: 120px  120px  120px;grid-template-areas:". header  header""sidebar content content";background-color: #fff;color: #444;
}.sidebar {grid-area: sidebar;
}.content {grid-area: content;
}.header {grid-area: header;
}

上面代码表示划分出6个单元格,其中值得注意的是 . 符号代表空的单元格,也就是没有用到该单元格
以上代码表示将类.sidebar .content .header所在的元素放在上面grid-template-areas中定义的sidedar content header区域中

5、grid-auto-flow属性

①、语法

grid-auto-flow 属性控制着自动布局算法怎样运作,精确指定在网格中被自动布局的元素怎样排列。默认的放置顺序是"先行后列",即先填满第一行,再开始放入第二行,即下图英文数字的顺序 one,two,three…。这个顺序由 grid-auto-flow 属性决定,默认值是 row

.wrapper {display: grid;grid-template-columns: 100px 200px 100px;grid-auto-flow: row;grid-gap: 5px;grid-auto-rows: 50px;
}

②、属性值

  • grid-auto-flow:row:表示根据实际情况排列,可能会存在空白等情况
  • grid-auto-flow:row dense:表示尽可能填满表格,下面存在长度合适的就会去填满上面的空白
  • grid-auto-flow:column:表示先列后行。就是按照顺序竖着排,一列排满就去排第二列,依次类推

6、justify-items属性、align-items属性、place-items属性

①、语法

justify-items属性设置单元格内容的水平位置(左中右),align-items属性设置单元格的垂直位置(上中下)

下面以justify-items属性为例进行讲解,align-items属性同理,只是方向为垂直方向。二者都有如下属性

.container {justify-items: start | end | center | stretch;align-items: start | end | center | stretch;
}

②、属性值

  • start:对齐单元格的起始边缘
  • end:对齐单元格的结束边缘
  • center:单元格内部居中
  • stretch:拉伸,占满单元格的整个宽度(默认值)

7、justify-content属性、align-content属性、place-content属性

①、语法

justify-content属性是整个内容区域在容器里面的水平位置(左中右),align-content属性是整个内容区域的垂直位置(上中下)

下面以justify-content属性为例进行讲解,align-content属性同理,只是方向为垂直方向

.container {justify-content: start | end | center | stretch | space-around | space-between | space-evenly;align-content: start | end | center | stretch | space-around | space-between | space-evenly;
}

②、属性值

  • start: 对齐容器的起始边框
  • end: 对齐容器的结束边框
  • center: 容器内部居中
  • space-around: 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与容器边框的间隔大一倍
  • space-between: 项目与项目的间隔相等,项目与容器边框之间没有间隔
  • space-evenly: 项目与项目的间隔相等,项目与容器边框之间也是同样长度的间隔
  • stretch: 项目大小没有指定时,拉伸占据整个网格容器

8、grid-auto-columns属性、grid-auto-rows属性

在将grid-auto-columns属性和grid-auto-rows属性之前,先来看看隐式和显式网格的概念

**隐式和显式网格:**显式网格包含了你在 grid-template-columns 和 grid-template-rows 属性中定义的行和列。如果你在网格定义之外又放了一些东西,或者因为内容的数量而需要的更多网格轨道的时候,网格将会在隐式网格中创建行和列

假如有多余的网格(也就是上面提到的隐式网格),那么它的行高和列宽可以根据 grid-auto-columns 属性和 grid-auto-rows 属性设置。它们的写法和grid-template-columns 和 grid-template-rows 完全相同。如果不指定这两个属性,浏览器完全根据单元格内容的大小,决定新增网格的列宽和行高

四、项目属性

1、grid-column-start属性、grid-column-end 属性

  • grid-column-start 属性:左边框所在的垂直网格线
  • grid-column-end 属性:右边框所在的垂直网格线

2、grid-row-start属性、grid-row-end 属性

  • grid-row-start 属性:上边框所在的水平网格线
  • grid-row-end 属性:下边框所在的水平网格线

3、justify-self 属性、align-self 属性、place-self 属性

①、语法

  • justify-self 属性设置单元格内容的水平位置(左中右),跟 justify-items 属性的用法完全一致,但只作用于单个项目
  • align-self 属性设置单元格内容的垂直位置(上中下),跟align-items属性的用法完全一致,也是只作用于单个项目

两者很相像,这里只拿 justify-self 属性演示,align-self 属性同理,只是作用于垂直方向。place-self 是设置。align-self 和 justify-self 的简写形式,这里也不重复介绍。

.item {justify-self: start | end | center | stretch;align-self: start | end | center | stretch;
}

②、属性值

  • start:对齐单元格的起始边缘
  • end:对齐单元格的结束边缘
  • center:单元格内部居中
  • stretch:拉伸,占满单元格的整个宽度(默认值)

五、应用场景

  • fr 实现等分响应式
  • repeat + auto-fit——固定列宽,改变列数量
  • repeat+auto-fit+minmax 去掉右侧空白
  • repeat+auto-fit+minmax-span-dense 解决空缺问题

六、Grid布局和flex布局二者区别

  • flex布局是一维布局。一次只能处理一个维度上的元素布局,一行或者一列
  • Grid是二维布局。可以同时处理行和列
    在这里插入图片描述

七、总结

通过使用CSS-Grid,可以创建复杂的布局,如响应式的多列网格、媒体查询、网格项的自适应大小和位置等。CSS-Grid通过定义网格行和列来组织内容,并使用网格容器和网格项将内容放置在网格中。CSS-Grid的主要优点是它提供了更灵活的布局选项,比如可以定义不同的网格行和列的大小和位置,而且不需要使用复杂的浮动和定位技术。

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

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

相关文章

L1-012 计算指数 C++

#include<iostream> #include<math.h> using namespace std; int main() {int n;int ret;cin >> n;if (n < 10) {ret pow(2, n);cout << "2^" << n << " " << ret<<endl;}return 0; } 所用知识点 …

suning苏宁API接入说明(苏宁商品详情+关键词搜索商品列表)

API地址:https://o0b.cn/anzexi 调用示例&#xff1a;https://api-gw.onebound.cn/suning/item_get/?keytest_api_key& &num_iid0070134261/703410301&&langzh-CN&secret 参数说明 通用参数说明 version:API版本key:调用key,测试key:test_api_keyapi_na…

轻松学会WiFi模块(ESP8266)—基于STM32,学到就是赚到!

目录 前言 一、ESP8266介绍 二、如何实现WiFi传输&#xff1f;代码详解附上 三、结果实现流程与展示 四、总结 题外话&#xff1a; 前言 哎哎哎&#xff0c;发觉好久没有更新博客了&#xff0c;最近一直事情比较多&#xff0c;也没什么时间注意博客&#xff0c;不过接下…

GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程

详情点击链接&#xff1a;GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图教程 前沿 GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。 如在科研编程、绘图领域&#xff1a; 1、编程建议和示例代码: 无论你使用的编程语言是…

PCL入门(四):kdtree简单介绍和使用

目录 1. kd树的意义2. kd树的使用 参考博客《欧式聚类&#xff08;KD-Tree&#xff09;详解&#xff0c;保姆级教程》和《(三分钟)学会kd-tree 激光SLAM点云搜索常见》 1. kd树的意义 kd树是什么&#xff1f; kd树是一种空间划分的数据结构&#xff0c;对于多个维度的数据&a…

向量数据库Milvus Cloud核心组件再升级,主打就是一个低延迟、高准确度

支持 ScaNN 索引 Faiss 实现的 ScaNN,又名 FastScan,使用更小的 PQ 编码和相应的指令集可以更为友好地访问 CPU 寄存器,从而使其拥有优秀的索引性能。该索引在 Cohere 数据集,Recall 约 95% 的时候,Milvus 使用 Knowhere 2.x 版本端到端的 QPS 是 IVF_FLAT 的 7 倍,HN…

SpringMVC的整合完成CRUD(增删改查)

SpringMVC是一种基于Java的Web框架&#xff0c;它是Spring框架的一部分。SpringMVC通过使用MVC&#xff08;Model-View-Controller&#xff09;设计模式来组织和管理Web应用程序的开发。 在SpringMVC中&#xff0c;Model代表数据模型&#xff0c;View代表用户界面&#xff0c;C…

Java“牵手”阿里巴巴商品列表数据,关键词搜索阿里巴巴商品数据接口,阿里巴巴API申请指南

阿里巴巴商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取阿里巴巴商品列表和商品详情页面数据&#xff0c;您可以通过开放平台的接口或者直接访问阿里巴巴商城的网页来获取商品详情信息。以下是两种常用方…

stm32之30.DMA

DMA&#xff08;硬件加速方法&#xff09;一般用于帮运比较大的数据&#xff08;如&#xff1a;摄像头数据图像传输&#xff09;&#xff0c;寄存器-》DMA-》RAM 或者 RAM-》DMA-》寄存器提高CPU的工作效率 源码-- #include "myhead.h" #include "adc.h"#…

STM32 Nucleo-144开发板开箱bring-up

文章目录 1. 开篇2. 开发环境搭建2.1 下载官方例程2.2 ST-Link安装 3. STM32F446ZE demo工程3.1 STM32F446ZE简介3.2 跑个demo试一试 1. 开篇 最近做项目&#xff0c;用到STM32F446ZET6这款MCU&#xff0c;为了赶进度&#xff0c;前期软件需要提前开发&#xff0c;于是在某宝买…

826. 安排工作以达到最大收益;2257. 统计网格图中没有被保卫的格子数;816. 模糊坐标

826. 安排工作以达到最大收益 核心思想&#xff1a;排序维护最大利润。首先我们需要对工人按照能力排序&#xff0c;前面工人满足的最大利润后面的工人肯定是满足的&#xff0c;所以我们只需要用一个tmp来维护小于等于当前工人的最大利润&#xff0c;然后如何得到tmp&#xff…

【web开发】5.Mysql及python代码执行数据库操作

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、MYSQL二、MySQL管理查看已有数据库创建数据库删除数据库进入数据库创建表删除表展示表的行列插入数据查看表中的数据删除数据修改数据 三、python代码执行数据库…

STM32定时器的One Pulse Mode,OPM应用

文章目录 OPM应用1-精准延时应用2-精准定时 OPM T IMx_CR1的OPM位 位 3 OPM&#xff1a;单脉冲模式 (One-pulse mode) 0&#xff1a;计数器在发生更新事件时不会停止计数 1&#xff1a;计数器在发生下一更新事件时停止计数&#xff08;将 CEN 位清零&#xff09; 应用1-精准延时…

C++设计模式_03_模板方法Template Method

文章目录 1. 设计模式分类1.1 GOF-23 模式分类1.2 从封装变化角度对模式分类 2. 重构&#xff08;使用模式的方法&#xff09;2.1 重构获得模式 Refactoring to Patterns2.2 重构关键技法 3. “组件协作”模式4. Template Method 模式4.1 动机&#xff08; Motivation&#xff…

磐基2.0搭建es集群

参考&#xff1a; k8s安装elasticsearch集群 k8s安装elasticsearch集群_k8s部署elasticsearch集群_MasonYyp的博客-CSDN博客1 环境简述搭建es集群需要使用的技术如下&#xff1a;k8s集群、StatefulSet控制器、Service&#xff08;NodePort&#xff09;服务、PV、PVC、volumeC…

洛谷 LGR SCP-J 2023 c++语言模拟试题 10. 以下程序片段的时间复杂度为( )

之前在牛客的一个群中看到有位哥们发的题 好像是洛谷哪次的模拟题&#xff0c;还写着什么 LGR SCP-J 2023 c语言模拟试题 题目 就是给段代码询问时间复杂度 for (int i1; i<n; i){for (int j1; j<n; ji){for (int k1; k<n; k j){}} } 跑代码 一开始想不出怎么解就…

数据结构(C语言版)概念、数据类型、线性表

数据结构&#xff08;C语言&#xff09;基本概念 数据的基本单位 数据的基本单位是位&#xff08;bit&#xff09;和字节&#xff08;byte&#xff09;。位是最小的存储单位&#xff0c;它可以表示一个二进制的0或1。字节由8个位组成&#xff0c;用于表示一个字符或数字。在计…

ElasticSearch第二讲:ES详解 - ElasticSearch基础概念

ElasticSearch第二讲&#xff1a;ES详解 - ElasticSearch基础概念 在学习ElasticSearch之前&#xff0c;先简单了解下ES流行度&#xff0c;使用背景&#xff0c;以及相关概念等。本文是ElasticSearch第二讲&#xff0c;ElasticSearch的基础概念。 文章目录 ElasticSearch第二讲…

将PyCharm中的终端运行前面的PS修改成当前环境

最近使用Pycharm中的Terminal来pip安装一些pakage&#xff0c;发现Terminal运行前面的显示的是PS&#xff0c;然后输入安装指令报错。“python无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。” 解决方法&#xff1a; 只需要在pycharm的设置中修改一些termi…

01JVM_内存结构

一、什么是JVM 1.JVM的定义 Java程序的运行环境&#xff0c;java二进制字节码的运行环境 2.JVM的好处 ①一次编写&#xff0c;到处运行 ②自动内存管理&#xff0c;垃圾回收功能 ③数组下标越界检查 ④多态 3.jvm&#xff0c;jre&#xff0c;jdk的比较 3.常见的JVM 主…