css基础知识十:介绍一下CSS中的Grid网格布局?

news2024/9/27 5:43:31

在这里插入图片描述
一、是什么

Grid 布局即网格布局,是一个二维的布局方式,由纵横相交的两组网格线形成的框架性布局结构,能够同时处理行与列

擅长将一个页面划分为几个主要区域,以及定义这些区域的大小、位置、层次等关系
在这里插入图片描述
这与之前讲到的flex一维布局不相同

设置display:grid/inline-grid的元素就是网格布局容器,这样就能出发浏览器渲染引擎的网格布局算法

<div class="container">
    <div class="item item-1">
        <p class="sub-item"></p>
 </div>
    <div class="item item-2"></div>
    <div class="item item-3"></div>
</div> 

上述代码实例中,.container元素就是网格布局容器,.item元素就是网格的项目,由于网格元素只能是容器的顶层子元素,所以p元素并不是网格元素

这里提一下,网格线概念,有助于下面对grid-column系列属性的理解

网格线,即划分网格的线,如下图所示:
在这里插入图片描述
上图是一个 2 x 3 的网格,共有3根水平网格线和4根垂直网格线

二、属性

同样,Grid 布局属性可以分为两大类:

  • 容器属性,
  • 项目属性

关于容器属性有如下:

display 属性

文章开头讲到,在元素上设置display:grid 或 display:inline-grid 来创建一个网格容器

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

grid-template-columns 属性,grid-template-rows 属性

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

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

以上表示固定列宽为 200px 200px 200px,行高为 50px 50px

上述代码可以看到重复写单元格宽高,通过使用repeat()函数,可以简写重复的值

  • 第一个参数是重复的次数
  • 第二个参数是重复的值

所以上述代码可以简写成

.wrapper {
  display: grid;
  grid-template-columns: repeat(3,200px);
  grid-gap: 5px;
  grid-template-rows:repeat(2,50px);
}

除了上述的repeact关键字,还有:

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

grid-template-columns: repeat(auto-fill, 200px) 表示列宽是 200 px,但列的数量是不固定的,只要浏览器能够容纳得下,就可以放置元素

fr:片段,为了方便表示比例关系

grid-template-columns: 200px 1fr 2fr 表示第一个列宽设置为 200px,后面剩余的宽度分为两部分,宽度分别为剩余宽度的 1/3 和 2/3

minmax:产生一个长度范围,表示长度就在这个范围之中都可以应用到网格项目中。第一个参数就是最小值,第二个参数就是最大值

minmax(100px, 1fr)表示列宽不小于100px,不大于1fr

auto:由浏览器自己决定长度

grid-template-columns: 100px auto 100px 表示第一第三列为 100px,中间由浏览器决定长度

grid-row-gap 属性, grid-column-gap 属性, grid-gap 属性

grid-row-gap 属性、grid-column-gap 属性分别设置行间距和列间距。

grid-gap 属性是两者的简写形式

grid-row-gap: 10px 表示行间距是 10px

grid-column-gap: 20px 表示列间距是 20px

grid-gap: 10px 20px 等同上述两个属性

grid-template-areas 属性

用于定义区域,一个区域由一个或者多个单元格组成

.container {
  display: grid;
  grid-template-columns: 100px 100px 100px;
  grid-template-rows: 100px 100px 100px;
  grid-template-areas: 'a b c'
			                       'd e f'
			                       'g h i';
}

上面代码先划分出9个单元格,然后将其定名为a到i的九个区域,分别对应这九个单元格。

多个单元格合并成一个区域的写法如下

grid-template-areas: 'a a a'
			                     'b b b'
			                     'c c c';

上面代码将9个单元格分成a、b、c三个区域

如果某些区域不需要利用,则使用"点"(.)表示

grid-auto-flow 属性

划分网格以后,容器的子元素会按照顺序,自动放置在每一个网格。

顺序就是由grid-auto-flow决定,默认为行,代表"先行后列",即先填满第一行,再开始放入第二行
在这里插入图片描述
当修改成column后,放置变为如下:
在这里插入图片描述
justify-items 属性, align-items 属性, place-items 属性

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

两者属性的值完成相同

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

属性对应如下:

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

place-items属性是align-items属性和justify-items属性的合并简写形式

justify-content 属性, align-content 属性, place-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 - 项目大小没有指定时,拉伸占据整个网格容器

在这里插入图片描述
grid-auto-columns 属性和 grid-auto-rows 属性

有时候,一些项目的指定位置,在现有网格的外部,就会产生显示网格和隐式网格比如网格只有3列,但是某一个项目指定

在第5行。这时,浏览器会自动生成多余的网格,以便放置项目。超出的部分就是隐式网格

而grid-auto-rows与grid-auto-columns就是专门用于指定隐式网格的宽高

关于项目属性,有如下:
grid-column-start 属性、grid-column-end 属性、grid-row-start 属性以及grid-row-end 属性

指定网格项目所在的四个边框,分别定位在哪根网格线,从而指定项目的位置

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

举个例子:

<style>
    #container{
        display: grid;
        grid-template-columns: 100px 100px 100px;
        grid-template-rows: 100px 100px 100px;
    }
    .item-1 {
        grid-column-start: 2;
        grid-column-end: 4;
    }
</style>

<div id="container">
    <div class="item item-1">1</div>
    <div class="item item-2">2</div>
    <div class="item item-3">3</div>
</div>

通过设置grid-column属性,指定1号项目的左边框是第二根垂直网格线,右边框是第四根垂直网格线

在这里插入图片描述
grid-area 属性

.item-1 {
grid-area: e;
}

意思为将1号项目位于e区域

与上述讲到的grid-template-areas搭配使用

justify-self 属性、align-self 属性以及 place-self 属性

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

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

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

这两个属性都可以取下面四个值。

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

三、应用场景

文章开头就讲到,Grid是一个强大的布局,如一些常见的 CSS 布局,如居中,两列布局,三列布局等等是很容易实现的,在以前的文章中,也有使用Grid布局完成对应的功能

关于兼容性问题,结果如下:
在这里插入图片描述
总体兼容性还不错,但在 IE 10 以下不支持

目前,Grid布局在手机端支持还不算太友好

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

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

相关文章

操作系统—内存管理

单片机是没有操作系统的&#xff0c;每次写完代码都是通过一些工具将程序直接烧录进去&#xff0c;这样程序才能跑起来。单片机的CPU是直接操作内存的物理地址。在这种情况下&#xff0c;要想在内存中同时运行两个程序是不可能的&#xff0c;程序会崩溃。那么操作系统为了解决这…

LLM相关的一些调研

Prompt Engine 可以参考该项目&#xff0c;该项目提供关于提示词书写的规则。由openai以及吴恩达完成。 https://github.com/datawhalechina/prompt-engineering-for-developers由于目前chatgpt 无法直接在国内访问&#xff0c;推荐在claude on slack上尝试。关于claude api h…

Leetcode:1035. 不相交的线、53. 最大子数组和(C++)

目录 1035. 不相交的线 题目描述&#xff1a; 实现代码与解析&#xff1a; 动态规划 原理解析&#xff1a; 53. 最大子数组和 题目描述&#xff1a; 实现代码与解析&#xff1a; 动态规划 原理思路&#xff1a; 1035. 不相交的线 题目描述&#xff1a; 在两条独立的水…

移动端永不过时的高薪技术岗位,原来是它……

随着 Android 设备的普及和应用领域的不断扩大&#xff0c;Android Framework 开发需求量将会持续增长&#xff0c;并且会越来越多地向行业、企业级应用和系统优化等方向发展。以下是一些 Android Framework 开发相关的应用场景&#xff1a; 1. 特定垂直领域的智能设备&#x…

Jmeter性能测试

一、jmeter多并发 1.线程设置&#xff1a; 线程数——多少个虚拟用户 ramp_up时间(秒)——时间&#xff0c;设置时间内将线程都跑完 循环次数——勾选永远&#xff0c;就一直跑&#xff0c;直到手动停止&#xff1b;输入数字&#xff0c;就是循环多少次 2.jmeter逻辑分支控制…

关于MySQL性能优化方案,掌握这一篇就够了!

目录 前言 一、设置索引 1、索引的优缺点: 2、给表列创建索引 3、查看索引 4、删除索引&#xff1a; 5、索引原理&#xff1a; 二、分类讨论 三、针对偶尔很慢的情况 1、 数据库在刷新脏页&#xff08;flush&#xff09; 2. 拿不到锁我能怎么办 四、针对一直都这…

力扣题库刷题笔记16--最接近的三数之和

1、题目如下&#xff1a; 2、个人Python代码实现 本题的思路应该与很早之前刷的第15题三数之和是一个思路&#xff1a; 1、先将数组排序&#xff0c;然后进行遍历数组 2、确定左指针、右指针 3、判断三个数之和是否接近目标值 4、重点是&#xff0c;为确保左右指针不是同一个元…

Transformer回归预测

一、Attention is all you need——李沐论文精读Transformer 论文地址&#xff1a; https://arxiv.org/pdf/1706.03762.pdf Transformer论文逐段精读【论文精读】 卷积神经网络对较长的序列难以建模&#xff0c;因为他每次看一个比较小的窗口&#xff0c;如果两个像素隔得比较…

6.STM32时钟系统

1.时钟系统框图: HSI&#xff1a;高速的内部时钟->8MHz;HSE&#xff1a;外部高速时钟->8MHz;PLL&#xff1a; 锁相环->用于倍频(放大频率)&#xff1b;CSS&#xff1a;时钟监控系统(一旦检测到HSE(外部晶振)失败&#xff0c;将会自动切换系统时钟源HSI)&#xff1b;LS…

高等数学函数的性质

&#xff08;本文内容为个人笔记分享&#xff09; 牛顿二项公式 ( x y ) n ∑ k 0 n C n k ⋅ x n − k y k (xy)^n\stackrel{n}{\sum\limits_{k0}}C^k_n\sdot x^{n-k}y^k (xy)nk0∑​n​Cnk​⋅xn−kyk. 映射 f : X → Y f:X\rightarrow Y f:X→Y&#xff0c; f f f 为 …

成功解决RuntimeError:Unable to find a valid cuDNN algorithm to run convolution

该错误有可能是由于GPU不足导致的 有两种解决方法: 方法一&#xff1a;指定device 在指定device时&#xff0c;没有指定具体的卡 只用了如下代码 device torch.device("cuda" if torch.cuda.is_available() else "cpu")默认使用了index0的卡&#xff0…

CppUTest——【由JUnit移植过来的】C++单元测试框架——的下载安装

C单元测试框架CppUTest的下载与安装 简介下载地址单元测试框架下载单元测试被测工程下载 安装安装Cygwin下载地址安装步骤手动安装CMake 编译单元测试框架CppUTest 导入到Virtual Studio准备条件根据VS版本选择导入对应的.sln文件 简介 CppUnit是【由JUnit移植过来的】C测试框…

每日一练 | 华为认证真题练习Day65

1、如果一个以太网数据帧的Length/Type0x8100&#xff0c;那么这个数据帧的载荷不可能是&#xff1f;&#xff08;多选&#xff09; A. ARP应答报文 B. OSPF报文 C. RSTP数据帧 D. STP数据帧 2、路由器某接口配置信息如下&#xff0c;则此端口可以接收携带哪个VLAN的数据包…

《C++ Primer》--学习8

vector 对象是如何增长的 当不得不获取新的内存空间时&#xff0c;vector 和 string 的实现通常会分配比新的空间需求更大的内存空间&#xff0c;容器预留这些空间作为备用&#xff0c;这样就不用每次添加新元素都重新分配容器的内存空间了 管理容器的成员函数 capacity 和 …

高速电路设计系列分享-带宽和动态范围

目录 概要 整体架构流程 技术名词解释 1.带宽 2.动态范围 小结 概要 提示&#xff1a;这里可以添加技术概要 本文继续熟悉一些基本概念。 在许多技术领域,我们习惯于把技术进步与更高的速率关联起来:从以太网到无线局域网再到蜂窝移动网络&#xff0c;数据通信的实质就是不断…

MySQL8.0(Win)的安装步骤

MySQL8.0&#xff08;Win&#xff09;的安装步骤 MySql8.0 安装网址MySql8.0 安装界面界面一界面二界面三界面四界面五界面六界面七界面八界面十界面十一 查看 MySql8.0 安装结果配置MySql8.0的环境变量Path使用命令行访问MySQL的安装结果使用命令行操作MySQL数据库显示MySQL中…

Fiddler 简单抓包

文章目录 一、Fiddler 简介二、下载 Fiddler三、功能介绍1、Filters2、Inspectors3、Automatic BreakPoints4、TextWizard5、其他常用功能 一、Fiddler 简介 Fiddler是一个http协议调试代理工具&#xff0c;它能够记录并检查所有你的电脑和互联网之间的http通讯&#xff0c;设…

计算机由于找不到msvcr120.dll无法执行代码的解决方法分享

运行软件程序或游戏的时候&#xff0c;计算机提示由于找不到msvcr120.dll无法执行代码是怎么回事呢&#xff1f;msvcr120.dll是Microsoft Visual C的一部分&#xff0c;用于在Windows操作系统上运行C应用程序。它是一个动态链接库文件&#xff0c;包含了许多C运行时库&#xff…

【日志1】rsyslog,logrotate,post_code,journalctl

文章目录 1.rsyslog&#xff1a;rsyslogd一个进程 &#xff0c;管理每个进程发来的log并往/var/log里写&#xff0c;syslog函数将log写给rsyslogd进程&#xff0c;rsyslogd -v2.logrotate&#xff1a;logrotate /etc/logrotate.rsyslog&#xff08;bb中重命名&#xff09;3.pos…

【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(6月 26 日论文合集)

文章目录 一、检测相关(4篇)1.1 Bridging the Performance Gap between DETR and R-CNN for Graphical Object Detection in Document Images1.2 Cascade Subspace Clustering for Outlier Detection1.3 Lesion Detection on Leaves using Class Activation Maps1.4 Deep Omni-…