grid网格布局的使用?

news2024/10/7 6:49:11

一、定义

CSS 网格是一个用于 web 的二维布局系统。利用网格,你可以把内容按照行与列的格式进行排版。另外,网格还能非常轻松地实现一些复杂的布局。

网格是由一系列水平及垂直的线构成的一种布局模式。根据网格,我们能够将设计元素进行排列,帮助我们设计一系列具有固定位置以及宽度的元素的页面,使我们的网站页面更加统一。

一个网格通常具有许多的列(column)行(row),以及行与行、列与列之间的间隙,这个间隙一般被称为沟槽(gutter)

 二、使用网格布局

1、定义一个网格

 我们通过把容器的display属性设置为 grid,来定义一个网格。与弹性盒子一样,将父容器改为网格布局后,他的直接子项会变为网格项。

当我们定义网格布局以后它并不会向我们定义弹性盒子一样页面马上发生变化,因为display:grid的声明只创建了一个只有一列的网格,所以子项还是会像正常布局流那样,自上而下、一个接一个的排布。

我们想要让我们的容器看起来更像一个网格,我们要给刚定义的网格加一些列。我们可以通过长度单位、百分比、repeat等方式给我们的网格添加行的宽度或者列的高度。

我们有多种方式定义我们行高以及列宽。

.container {
        width: 30%;
        height: 260px;
        margin: 0 auto;
        background: #ecc284;
        display: grid;
        /* 定义每一列的宽度 */
        grid-template-columns: 100px 100px 100px;
        /* 定义每一行的高度 */
        grid-template-rows: 100px 100px;
        /* 通过repeat方式定义每一列的宽度,第一个参数是有几列,第二个参数每列宽度 */
        grid-template-columns: repeat(3, 100px);
        /* 通过repeat方式定义每一行的高度,第一个参数是有几行,第二个参数每行高度 */
        grid-template-rows: repeat(5, 100px);
        /* 通过大小的方式定义每一列的宽度 第一个相当于定义第一列的宽度 第几个表示定义第几列  定义几个值表示有几列*/
        grid-template-columns: 100px auto 100px;
        /* 通过大小方式定义每一行的高度 与columns的同理 */
        grid-template-rows: 100px auto 100px;
        /* 通过百分比方式定义每一列的宽度 auto可以表示未设宽度的剩余空间分布*/
        grid-template-columns: 22% 22% auto;
        /* 通过百分比方式定义每一行的高度 */
        grid-template-rows: 22% auto 22%;
}

 以下是实现的效果:

我们也可以使用fr单位的灵活网格

除了长度和百分比,我们也可以用 fr 这个单位来灵活地定义网格的行与列的大小。这个单位代表网格容器中可用空间的一份

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
}

 fr单位也相当于是一个比例,如果我们设置 1fr 2fr 1fr那么我们的比例为1:2:1的比例。

备注: fr单位分配的是可用空间而非所有空间,所以如果某一格包含的内容变多了,那么整个可用空间就会减少,可用空间是不包括那些已经确定被占用的空间的

2、网格间隙

使用 grid-column-gap 属性来定义列间隙;使用  grid-row-gap  来定义行间隙;使用 可以同时设定两者。

 间隙距离可以用任何长度单位包括百分比来表示,但不能使用fr单位。

.container {
    display: grid;
    grid-template-columns: 2fr 1fr 1fr;
    /*同时定义行与列之间的间距*/
    grid-gap: 20px;
    /* 定义每行之间的距离 */
    grid-row-gap: 20px;
    /* 定义每列之间的距离 */
    grid-column-gap: 20px;
}

以下是效果:

3、 显式网格与隐式网格

 显式网格是我们用 grid-template-columns 或 grid-template-rows 属性创建的。而隐式网格则是当有内容被放到网格外时才会生成的。显式网格与隐式网格的关系与弹性盒子的 main 和 cross 轴的关系有些类似。

隐式网格中生成的行/列大小是参数默认是 auto ,大小会根据放入的内容自动调整。

简单来说,隐式网格就是为了放显式网格放不下的元素,浏览器根据已经定义的显式网格自动生成的网格部分。

使用grid-auto-rows和grid-auto-columns属性手动设定隐式网格轨道的大小

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: 100px;
  grid-gap: 20px;
}

效果展示:

 4、minmax()函数

如果我们设置固定高度那么元素高度超过我们定义的高度盒子内容高度就会不够用,因此我们可以设置最小像素行高或列宽,这样能够跟随内容来自动拓展尺寸。

minmax()函数为一个行/列的尺寸设置了取值范围。设定minmax(100px,auto)那么尺寸就至少为100px,如果内容尺寸大于100px则会根据内容自动调整。

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: minmax(100px, auto);
  grid-gap: 20px;
}

 如果所有网格内容均小于100px,那么看起来不会有声明变化。如果我们在某一项中添加了很多内容或者图片,那么这一行的高度能够自己撑开刚好容纳我们的内容。

5、调整网格中的横纵轴方向的排布

justify-items:横轴排布

属性:start、end、center表示横轴左右方向排布是靠最左侧、最右侧、还是正中间。

以下是justify-items: center;的演示效果:

 默认为stretch表示左右元素延伸,start表示水平靠左 end表示水平靠右 center表示水平居中,

主要是根据x轴的左右移动的区别。

align-items:纵轴排布

属性:start、end、center表示纵轴上下方向排布是靠最顶部、底部、还是纵轴正中间。

以下是align-items: center;的演示效果:

默认stretch向上下延伸,start表示靠顶部 end表示靠底部 center表示纵轴中心,主要是关于y轴进行上下移动的区别 。

place-items:横纵轴排布

相当于align-items以及justify-items一起使用,默认值为place-items:stretch,stretch;第一个参数为纵轴排布,第二个参数为横轴排布。

6、调整网格中网格轨道横纵轴方向的排布

justify-content:调整网格中网格轨道横轴方向的排布

它相当于我们弹性盒子中的justify-content布局,是对我们水平元素的对齐方式的改变。

start表示整体水平靠左侧,end表示整体水平靠右侧,center表示整体水平居中,默认为stretch

space-around表示均匀布局 space-between表示 延两侧均匀布局 space-evenlv表示均匀布局每个元素之间间隔相等

以下是start属性的演示:

 属性之间的区别主要是左右水平方向的移动

align-content:调整网格中网格轨道纵轴方向的排布

它控制着纵轴的一个垂直水平的位置,start表示顶部 end表示底部 center表示垂直居中 默认为stretch space-around表示均匀布局 space-between表示 延两侧均匀布局 space-evenlv表示均匀布局每个元素之间间隔相等

以下是end属性的演示:

属性之间的区别主要是垂直方面的移动 

place-content:调整网格中网格轨道横纵轴方向的排布

将justify-content以及align-content一起使用,使用起来和这两个属性一样。第一个属性为纵坐标的垂直方向的移动,第二个参数为横坐标的水平方向的移动。

7、子元素的网格布局属性

以上是父元素的属性,其定义通常在父元素的样式中定义,下面是子元素的属性。

grid-column:规定网格横向分布

网格布局它的每一行每一列都存在标记我们可以通过起始位置 结束位置 实现网格的横向分布

grid-column-start:起始位置

grid-column-end:结束位置

这两个属性可以通过grid-column实现简写形式,第一个数是起始位置第二个数是结束位置

.container{
     grid-column: 1/4;
     background: #202020;
}

 以下为横向分布效果展示:

grid-row:规定网格纵向分布

网格布局它的每一行每一列都存在标记我们可以通过起始位置 结束位置 实现网格的横向分布

grid-row-start:起始位置

grid-row-end:结束位置

这两个属性可以通过grid-row实现简写形式,第一个数是起始位置第二个数是结束位置

.container{
     grid-row: 2/3;
     background: #202020;
}

 以下为纵向分布效果展示:

我们可以做一下对比,以下是原效果展示:

 

grid-area:调节项目再网格的位置

可以通过grid-area可以将我们的grid-column与grid-row一起使用

使用方式:grid-area:2/1/4/3;相当于横纵轴的起始位置以及结束位置

justify-self:调节子元素在网格中的横向的位置

水平方向的位置,默认stretch表示水平方向延伸,start表示水平左侧 end表示水平右侧 center表示水平居中

当前为start效果:

此时由于我没有设置align-self因此我当前是垂直延伸

属性变化主要体现在水平方向的移动 

align-self:调节子元素在网格中的纵向的位置

垂直方向的位置,默认stretch表示垂直方向延伸,start表示垂直方向顶部 end表示垂直方向底部 center表示垂直水平居中

当前为end效果展示:

由于未设置justify-self因此是向左右水平延伸的,属性不同主要体现在垂直方向的移动。 

place-self:调节子元素在网格中的横纵向的位置

将justify-self以及align-self一起使用,第一个参数为网格中纵向的位置,第二个参数为横向的位置。

以上是网格布局的简述。需要多使用才能了解更清晰。

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

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

相关文章

Ubuntu系统下使用宝塔面板实现一键搭建Z-Blog个人博客的方法和流程

文章目录 1.前言2.网站搭建2.1. 网页下载和安装2.2.网页测试2.3.cpolar的安装和注册 3.本地网页发布3.1.Cpolar临时数据隧道3.2.Cpolar稳定隧道(云端设置)3.3.Cpolar稳定隧道(本地设置) 4.公网访问测试5.结语 1.前言 Ubuntu系统作…

单向链表和双向链表的增删改查以及排序问题

文章目录 单向链表双向链表运行结果完整代码 本文介绍链表的增删改查以及排序问题,其中最重要的还是指针的使用! 单向链表 定义一个单向链表,里面包含一个整型数据和一个指向后向的指针。 typedef struct linklist{int data;struct linkli…

InnoDB 的默认隔离级别是什么?

分析&回答 大部分数据库系统(如Oracle)都将都将读提交(Read-Commited)作为默认隔离级别,而MySQL却选择可重复读(Repeatable-Read)作为其默认隔离级别。 如果没有隔离级别基础知识的话先看…

数学建模之插值法

目录 1 插值法概述2 插值法原理3 拉格朗日插值4 牛顿插值5 三次Hermite插值(重点)6 三次样条插值(重点)7 各种插值法总结8 n 维数据的插值9 插值法拓展10 课后作业 1 插值法概述 数模比赛中,常常需要根据已知的函数点进…

【Unity3D赛车游戏优化篇】新【八】汽车实现镜头的流畅跟随,以及不同角度的切换

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

YOLOV8实例分割——详细记录环境配置、自定义数据处理到模型训练与部署

前言 Ultralytics YOLOv8是一种前沿的、最先进的(SOTA)模型,它在前代YOLO版本的成功基础上进行了进一步的创新,引入了全新的特性和改进,以进一步提升性能和灵活性。作为一个高速、精准且易于操作的设计,YO…

合宙Air724UG LuatOS-Air LVGL API控件-标签 (Label)

标签 (Label) 标签是 LVGL 用来显示文字的控件。 示例代码 label lvgl.label_create(lvgl.scr_act(), nil) lvgl.label_set_recolor(label, true) lvgl.label_set_text(label, "#0000ff Re-color# #ff00ff words# #ff0000 of\n# align the lines …

Vision Transformer(VIT 网络架构)

论文下载链接:https://arxiv.org/abs/2010.11929 文章目录 引言1. VIT与传统CNN的比较2. 为什么需要Transformer在图像任务中? 1. 深入Transformer1.1 Transformer的起源:NLP领域的突破1.2 Transformer的基本组成1.2.1 自注意机制 (Self-Atte…

C++将派生类赋值给基类

在 C/C++ 中经常会发生数据类型的转换,例如将 int 类型的数据赋值给 float 类型的变量时,编译器会先把 int 类型的数据转换为 float 类型再赋值;反过来,float 类型的数据在经过类型转换后也可以赋值给 int 类型的变量。 数据类型转换的前提是,编译器知道如何对数据进行取舍…

星际争霸之小霸王之小蜜蜂(十)--鼠道

系列文章目录 星际争霸之小霸王之小蜜蜂(九)--狂鼠之灾 星际争霸之小霸王之小蜜蜂(八)--蓝皮鼠和大脸猫 星际争霸之小霸王之小蜜蜂(七)--消失的子弹 星际争霸之小霸王之小蜜蜂(六)-…

大数据课程K20——Spark的SparkSql概述

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解Spark的SparkSQL由来; ⚪ 了解Spark的SparkSQL特点; ⚪ 了解Spark的SparkSQL优势; ⚪ 掌握Spark的SparkSQL入门; 一、SparkSQL概述 1. 概述 Spark为结构化数据处理引入了一个称…

SQLI-labs-第四关

知识点:get双引号(")和括号注入 思路: 1、判断注入点 首先,输入?id1 --,看看正常的回显状态 接着输入?id1 --,结果还是正常回显,说明这里不存在单引号问题 试试双引号,这里爆出了sql语…

深入了解GCC编译过程

关于Linux的编译过程,其实只需要使用gcc这个功能,gcc并非一个编译器,是一个驱动程序。其编译过程也很熟悉:预处理–编译–汇编–链接。在接触底层开发甚至操作系统开发时,我们都需要了解这么一个知识点,如何…

C# 如何读取dxf档案

需求来源: 工作中,客户提供一张CAD导出的dxf 档案,然后需要机器人将其转成点位,走到对应的位置。 下面介绍一下dxf档案到底是什么?以及语法规则。 dxf 格式介绍:DXF 格式 dxf LINE 格式。 其实上述文档…

软考:中级软件设计师:多媒体基础,音频,图像,颜色,多媒体技术的种类,图像音频视频的容量计算,常见的多媒体标准

软考:中级软件设计师:多媒体基础 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学习和总结,以应对未来更多的可能性 关于互联网大厂的笔试面试,都是需要细心准备的 &am…

在公网上使用SSH远程连接安卓手机Termux:将Android手机变身为远程服务器

文章目录 前言1.安装ssh2.安装cpolar内网穿透3.远程ssh连接配置4.公网远程连接5.固定远程连接地址 前言 使用安卓机跑东西的时候,屏幕太小,有时候操作不习惯。不过我们可以开启ssh,使用电脑PC端SSH远程连接手机termux。 本次教程主要实现在…

介绍OpenCV

OpenCV是一个开源计算机视觉库,可用于各种任务,如物体识别、人脸识别、运动跟踪、图像处理和视频处理等。它最初由英特尔公司开发,目前由跨学科开发人员社区维护和支持。OpenCV可以在多个平台上运行,包括Windows、Linux、Android和…

高等数学刷题

分段函数主要看在临界点处的左右极限是否相等,若相等则整段函数即为连续 (反之若是连续函数,在某一点为间断点,则可推导出一定为可去间断点) 无定义的点一定为间断点 如果该点有极限则为可去间断点 由于x的不确定导…

RK3568-spi-适配1.8寸TFT彩屏驱动芯片st7735s

RK3568-spi-适配1.8寸TFT彩屏 驱动芯片st7735s 显示分辨率128x160硬件连接 VCC -- 3.3V GND -- GND BL -- 背光控制 CS -- 片选引脚 DC -- 数据/命令控制 RES -- 屏幕复位 SCL -- i2c时钟引脚 SDA -- i2c数据引脚设备树编写 &spi0 {pinctrl-names = "default"…

docker安装Apache NIFI

说明 系统:CentOS7.9 nifi版本:1.23.2 下载镜像 nifi的镜像比较大,大概有2G左右,下载时间根据个人网速而定 docker pull apache/nifi:1.23.2 查看下载好的镜像 docker images 复制容器数据 创建挂载目录 创建挂载目录的目…