前端页面布局之【Grid布局】详解

news2024/11/26 6:03:00

目录

  • 🌟前言
  • 🌟浏览器支持
  • 🌟Gird简介和基本概念
  • 🌟属性介绍
    • 🌟 父元素上的属性
      • 🌟 设置grid布局
      • 🌟设置网格的列数与行数
      • 🌟通过网格单元的名字来布局 grid-template-areas
      • 🌟设置网格轨道的大小
      • 🌟justify-items
      • 🌟align-items
      • 🌟justify-content
      • 🌟align-content
      • 🌟grid-auto-columns和grid-auto-rows
      • 🌟grid-auto-flow
    • 🌟设置子元素上的属性
      • 🌟grid-area
      • 🌟设置单个子元素在其所在的网格项中的排列方式
  • 🌟写在最后

在这里插入图片描述

🌟前言

CSS一直用来布局网页,但一直都不完美。 一开始我们使用table 做布局,然后转向浮动、定位以及inline-block,但所有这些方法本质上都是 Hack 的方式,并且遗漏了很多重要的功能(例如垂直居中)。 Flexbox的出现在一定程度上解决了这个问题,但是它的目的是为了更简单的一维布局,而不是复杂的二维布局(Flexbox和Grid实际上一起工作得很好)。 只要我们一直在制作网站,我们就一直在为解决布局问题不断探索, 而Grid是第一个专门为解决布局问题而生的CSS模块。

名称地址
W3C网格规范文档点击

🌟浏览器支持

在这里插入图片描述

🌟Gird简介和基本概念

  • grid布局又称CSS网格布局,(又名“网格”)是一个二维的基于网格的布局系统,其目的只在于完全改变我们设计基于网格的用户界面的方式。
  • grid中的一些概念:
    • 网格容器(Grid Container)元素应用display:grid,它是其所有网格项的父元素。
    • 网格项(Grid Item)网格容器的直接子元素
    • 网格线(Grid Line)组成网格线的分界线。它们可以是列网格线(column grid lines),也可以是行网格线(row grid lines)并居于行或列的任意一侧
    • 网格轨道(Grid Track)两个相邻的网格线之间为网格轨道。
    • 网格单元(Grid Cell)两个相邻的列网格线和两个相邻的行网格线组成的是网格单元,它是最小的网格单元。
    • 网格区(Grid Area)网格区是由任意数量网格单元组成
  • grid目前兼容性目前还可以,主流浏览器对它的支持力度很大,ie10 11宣布它未来不久会对它有很好的支持,目前则需要使用过时的语法。 所以grid布局目前常用于移动端布局

🌟属性介绍

🌟 父元素上的属性

属性说明
display设置grid布局
grid-template-rows设置网格的行数
grid-template-columns设置网格的列数
grid-template-areas根据子元素的网格名字来排列
grid-column-gap用来指定竖网格轨道的大小
grid-row-gap用来指定行网格轨道的大小
grid-gapgrid-column-gap和grid-row-gap这两个属性的缩写方式
justify-items网格中所有单元格中的内容在X轴的对齐方式
align-items网格中所有单元格中的内容在Y轴的对齐方式
justify-content来设置整个网格在网格容器中的X轴的排列方式
align-content来设置整个网格在网格容器中的Y轴的排列方式
grid-auto-columns设定隐藏的网格的高
grid-auto-rows设定隐藏的网格的宽
grid-auto-flow在布局的时候,选择网格填充的方法

🌟 设置grid布局

display:grid | inline-grid |  subgrid;
属性值说明
grid设置块级grid网格布局
inline-grid     设置一个内联级的网格
subgrid如果这个网格本身就是父元素中的某一个单元网格,则这个值是用来表示继承父元素,希望它的行/列的大小继承自它的父级网格容器,而不是自己指定的。

🌟设置网格的列数与行数

  1. grid-template-columns 它表示的是设置列数
grid-template-columns:100px 10% 1fr 2fr; /*写几个值表示有几列   值可以是px这种固定大小的,也可以是百分比,也可以使用fr这种单位;fr表示总空间减去固定空间和百分比的大小,然后再分配*/
grid-template-columns: [c1] 200px [c2] 200px [c3] 1fr [c4];/*这里的[]是在给网格线起名字,每个网格线可以有多个名字,用空格隔开就OK,在后面会说到网格线名字的作用*/
grid-template-columns:repeat(12 1fr);    /*这个repeat是重复的意思,也就是我们创建了12个大小相等的列*/
grid-template-columns: repeat(auto-fit, 100px);    /*auto-fit 自适应的意思,也就是说尽可能的每块100px填满网格容器*/
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));/*上面的这种repeat(auto-fit, 100px)在响应式布局中可能因为不到100像素然后产生留白,所以我们用minmax()来解决,我们用minmax(100px, 1fr)来代替100px   minmax() 函数定义大于或等于 min 且小于或等于 max 的大小范围*/
  1. grid-template-rows 与grid-template-columns的使用方法相同 设置网格项的行数
grid-template-rows:100px 10% 1fr 2fr; /*写几个值表示有几行   值可以是px这种固定大小的,也可以是百分比,也可以使用fr这种单位;fr表示总空间减去固定空间和百分比的大小,然后再分配*/
  1. 简单例子
.box{
 display:grid;
 grid-template-columns: 40px 50px auto 50px 40px;
 grid-template-rows: 25% 100px auto;
}

在这里插入图片描述

.box{
    display:grid;
    grid-template-columns: [first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];
    grid-template-rows: [row1-start] 25% [row1-end] 100px [third-line] auto [last-line];
}

在这里插入图片描述

🌟通过网格单元的名字来布局 grid-template-areas

使用这个属性的时候,需要先用子元素上的grid-area属性给子元素起一个名字,然后再配合这个属性来时使用

.box{
          background-color: #999;
          display: grid;
          grid-template-columns: 100px 80% 1fr 1fr;
          grid-template-rows: 200px 300px 300px;
          grid-template-areas: "header header header header"
                               "main main . sidebar"
                               "footer footer footer footer"
               /*名字便是元素的名字,点(.)代表的意思是空一格,这个单元格中不放内容 grid_name.webp*/
}
.a{
          grid-area:header;
          /*grid-area:;   是给子元素起一个名字*/
          background-color: blue;
}
.b{
          grid-area:main;
          background: yellow;
}
.c{
          grid-area:sidebar;
          background: red;
}
.d{
          grid-area:footer;
          background: green;
}
<div class="box">
        <div class="a">
            头部
        </div>
        <div class="b">
            主题
        </div>
        <div class="c">
            侧边栏
        </div>
        <div class="d">
            底部
        </div>
</div>

在这里插入图片描述

🌟设置网格轨道的大小

  • grid-column-gap和grid-row-gap 用来指定横竖网格轨道的大小 只在两个单元格之间产生间距,不再边缘产生
  • grid-gap grid-column-gap和grid-row-gap这两个属性的缩写方式
.box{
    display:grid;
    grid-template-columns: 100px 50px 100px;
    grid-template-rows: 80px auto 80px;
    grid-column-gap: 10px;
    grid-row-gap: 15px;
    /* grid-gap:15px 10px;     grid-gap: grid-row-gap grid-column-gap; */
}

在这里插入图片描述

🌟justify-items

网格中所有单元格中的内容在网格项X轴的对齐方式 默认是占满宽度整个X轴

属性值说明
start内容在单元格的左端对齐
end内容在单元格的右端对齐
center内容在单元格X轴的中间位置
stretch内容宽度占据整个单元格的X轴 (默认值)
.box{
    display:grid;
    justify-items: center;
}

在这里插入图片描述

🌟align-items

网格中所有单元格中的内容在网格项Y轴的对齐方式 默认是占满宽度整个Y轴 它的值与justify-items相同

属性值说明
start内容在单元格的顶端对齐
end内容在单元格的底部对齐
center内容在单元格Y轴的中间位置
stretch内容宽度占据整个单元格的Y轴 (默认值)
.container{
    display:grid;
    align-items: center;
}

在这里插入图片描述

🌟justify-content

如果我们使用PX这种固定大小的布局方式的时候,网格的大小可能小于网格容器的大小

这个值是用来设置整个网格在网格容器中的X轴的排列方式

属性值说明
start网格与网格容器的左端对齐
end网格与网格容器的右端对齐
center网格处于网格容器的X轴的中间
stretch调整网格项的大小,使其宽度填充整个网格容器
space-around相当于给每一列单元格添加相同的左右margin
space-between在网格容器的X轴的两段对齐
space-evenly每一列之间的左右间距是相同的 与边缘也有相同的距离
.box{
    display:grid;
    justify-content: center;
}

在这里插入图片描述

.box{
    display:grid;
    justify-content: space-evenly;
}

在这里插入图片描述

🌟align-content

如果我们使用PX这种固定大小的布局方式的时候,网格的大小可能小于网格容器的大小

这个值是用来设置整个网格在网格容器中的Y轴的排列方式

属性值说明
start网格与网格容器的顶部对齐
end网格与网格容器的底部对齐
center网格处于网格容器的Y轴的中间
stretch调整网格项的大小,使其高度填充整个网格容器
space-around相当于给每一行单元格添加相同的上下margin
space-between在网格容器的Y轴的两段对齐
space-evenly每一行之间的上下间距是相同的 与边缘也有相同的距离
.box{
    display: grid;
    align-content: center;
}

在这里插入图片描述

.box{
    display: grid;
    align-content: space-evenly;
}

在这里插入图片描述

🌟grid-auto-columns和grid-auto-rows

设定隐藏的网格轨道的大小

自动生成隐式网格轨道(列和行),当你定位的网格项超出网格容器范围时,将自动创建隐式网格轨道。网格轨道大小,可以是固定值,百分比或者是分数(fr单位)。

🌟grid-auto-flow

在布局是时候,选择网格填充的方法

在没有设置网格项的位置时,这个属性控制网格项怎样排列。

属性值说明
row按照行依次从左到右排列
column按照列依次从上倒下排列
dense按先后顺序排列
<section class="container">
    <div class="item-a">item-a</div>
    <div class="item-b">item-b</div>
    <div class="item-c">item-c</div>
    <div class="item-d">item-d</div>
    <div class="item-e">item-e</div>
</section>
.container{
    display: grid;
    grid-template-columns: 60px 60px 60px 60px 60px;
    grid-template-rows: 30px 30px;
    grid-auto-flow: row;
}
.item-a{
    grid-column: 1;
    grid-row: 1 / 3;
}
.item-e{
    grid-column: 5;
    grid-row: 1 / 3;
}
  1. 设置grid-auto-flow:row,item-b、item-c和item-d在行上是从左到右排列
    在这里插入图片描述

  2. 设置grid-auto-flow:column;
    在这里插入图片描述

  3. grid的简写方式和属性的顺序,设置网格容器所有属性。

grid: none | grid-template-rows / grid-template-columns | grid-auto-flow [grid-auto-rows [ / grid-auto-columns] ];

🌟设置子元素上的属性

属性说明
grid-area给单个子元素起名字
grid-column-start元素的位置哪跟竖线开始
grid-column-end哪跟竖线结束
grid-row-start哪跟横线开始
grid-row-end哪跟横线结束
grid-rowgrid-row-start和grid-row-end的缩写
grid-columngrid-column-start和grid-column-end这两个属性的缩写方式
grid-areagrid-row和grid-column的缩写
justify-self设置单个子元素在其所在的小网格中的X轴排列方式
align-self设置单个子元素在其所在的小网格中的Y轴排列方式
align-content来设置整个网格在网格容器中的Y轴的排列方式

🌟grid-area

给单个子元素起名字

这个属性就是配合父元素上的grid-template-areas属性来使用,grid-area就是给单个网格项起个名字

设置网格项位置的三种写法

  1. grid-column-start grid-column-end grid-row-start grid-row-end
从左到右的四个属性的含义:  
         哪跟竖线开始
         哪跟竖线结束
         哪跟横线开始
         哪跟横线结束
值写数字表示第几跟网格线       也可以写网格线的名字
  1. grid-column grid-row
grid-column: 1 / 2;
grid-row: 1 / 2;
  1. grid-area grid-column和grid-row的缩写
grid-area: 1/1/2/2;
/*第三种写法  行起始位置/列起始位置/行结束位置/列结束位置*/
.item-a{
  grid-column-start: 2;
  grid-column-end: five;
  grid-row-start: row1-start
  grid-row-end: 3
}

在这里插入图片描述

🌟设置单个子元素在其所在的网格项中的排列方式

  1. justify-self 用来设置单个元素在单个网格项中X轴的布局
属性说明
start元素与网格的左端对齐
end元素与网格的右端对齐
center元素放置在网格X轴的中间
stretch元素占满整个网格空间(默认值)
  1. align-self 与justify-self:;类似,用来设置单个元素在单个网格中Y轴的布局方式,和justify-self有4个相同的值
属性说明
start元素与网格的顶部对齐
end元素与网格的底部对齐
center元素放置在网格Y轴的中间
stretch元素占满整个网格空间(默认值)

🌟写在最后

更多前端知识请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!

✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!

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

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

相关文章

资深8年测试总结,web网页测试bug定位详细步骤,一文打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、前置条件 1&a…

助力农作物病虫害检测识别,基于yolov3—yolov8开发构建马铃薯作物甲虫检测识别系统

AI加持的智慧农业也是一个比较有前景的赛道&#xff0c;近些年来已经有很多不错的方向做出来成绩&#xff0c;基于AI的激光除草、灭虫等也是其中的一个热门&#xff0c;杂草相关的检测识别在我们之前的项目实例中已经有相关的实践了&#xff0c;这里本文的主要目的就是以农作物…

最短路径专题8 交通枢纽 (Floyd求最短路 )

题目&#xff1a; 样例&#xff1a; 输入 4 5 2 0 1 1 0 2 5 0 3 3 1 2 2 2 3 4 0 2 输出 0 7 思路&#xff1a; 由题意&#xff0c;绘制了该城市的地图之后&#xff0c;由给出的 k 个编号作为起点&#xff0c;求该点到各个点之间的最短距离之和最小的点是哪个&#xff0c;并…

分布式数据库(林子雨慕课课程)

文章目录 4. 分布式数据库HBase4.1 HBase简介4.2 HBase数据模型4.3 HBase的实现原理4.4 HBase运行机制4.5 HBase的应用方案4.6 HBase安装和编程实战 4. 分布式数据库HBase 4.1 HBase简介 HBase是BigTable的开源实现 对于网页搜索主要分为两个阶段 1.建立整个网页索引&#xf…

第八章 排序 十四、最佳归并树

目录 一、定义 二、多路最佳归并树 三、多路最佳归并树少了一个归并段 四、总结 一、定义 最佳归并树是指将若干个有序序列合并成一个有序序列的一种方式&#xff0c;使得所有合并操作的总代价最小的一棵二叉树。其中&#xff0c;代价通常指合并两个有序序列的操作次数或比…

挑选出优秀的项目管理软件,满足您的需求

Zoho Projects是很好的一个项目管理软件&#xff0c;不管是web端还是APP没有那些乱七八糟的广告&#xff0c;光是这一点&#xff0c;就让人用着很舒服。除此之外还有更多让人意想不到的惊喜&#xff0c;软件界面设置的井井有条&#xff0c;关键是软件有完全免费版的&#xff0c…

mp4视频太大怎么压缩变小?

mp4视频太大怎么压缩变小&#xff1f;确实&#xff0c;很多培训和教学都转向了线上模式&#xff0c;这使得我们需要下载或分享大量的在线教学视频。然而&#xff0c;由于MP4视频文件通常较大&#xff0c;可能会遇到无法打开或发送的问题。为了解决这个问题&#xff0c;我们可以…

WMS仓储管理系统在快消品生产企业中有哪些应用

随着企业规模的扩大和市场竞争的加剧&#xff0c;仓库管理在企业管理中的地位越来越重要。对于快消品生产企业来说&#xff0c;仓库管理更是关系到产品的质量和市场竞争力。为了提高仓库管理的效率和准确性&#xff0c;许多企业开始引入WMS仓储管理系统解决方案。 中小企业WMS系…

网络安全(黑客)——自学

前言&#xff1a; 想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“…

山东济南建筑模板厂家批发之桉木芯建筑模板

济南建筑模板厂家是建筑行业中非常重要的供应商之一。建筑模板是建筑施工中必不可少的一种材料&#xff0c;用于支撑混凝土浇筑和模板安装。在选择建筑模板材料时&#xff0c;我们需要考虑各类材料的特点和优缺点&#xff0c;以及与传统的建筑木模板相比的价格、耐用性和经济效…

软件测试/测试开发丨Python文件操作 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27721 文件操作 在程序中操作文件和使用图形界面操作文件的过程基本一致&#xff0c;都要进行找到文件位置&#xff0c;打开文件&#xff0c;读写文件&am…

架构方法、模型、范式、治理

从架构方法、模型、范式、治理等四个方面介绍架构的概念和方法论、典型业务场景下的架构范式、不同架构的治理特点这3个方面的内容

ChatGPT 背后包含了哪些技术?

ChatGPT 是由OpenAI开发的一款基于GPT-3&#xff08;Generative Pre-trained Transformer 3&#xff09;的人工智能语言模型。这个模型是使用多种编程语言和技术组合编写的。 首先&#xff0c;ChatGPT 使用了 Python 作为主要的编程语言。Python 是一种流行的高级编程语言&…

Vue3+TypeScript

一、Vue3带来的变化(源码&#xff09; 源码通过monorepo的形式来管理源代码 口Mono:单个 口Repo : repository仓库 口主要是将许多项目的代码存储在同一个repository中; 口这样做的目的是多个包本身相互独立&#xff0c;可以有自己的功能逻辑、单元测试等&#xff0c;同时又在…

绘制长时间尺度的古地理图(海岸线)——获取海岸线数据

绘制长尺度的古地理图&#xff08;海岸线&#xff09; 2. 重建海岸线2.1. 功能描述2.2. 功能接口2.3. 功能参数2.4. 返回值2.5. 功能示例2.5.1. 使用SETON2012模型将海岸线重建至140Ma。2.5.2. 返回一个PNG地图。2.5.3. 返回指定范围内的 png 地图 分析 本文接续计算古坐标点—…

【Java 进阶篇】HTML 语义化标签详解

HTML&#xff08;HyperText Markup Language&#xff09;是构建Web页面的标准语言。在HTML中&#xff0c;标签&#xff08;tag&#xff09;是用于定义页面结构和内容的关键元素。在构建网页时&#xff0c;了解如何正确使用HTML标签是非常重要的&#xff0c;因为它们不仅影响页面…

地磁查询网站

百度搜索经纬度查询定位&#xff0c;找到位置点坐标&#xff0c; 登录如下网站 https://www.ngdc.noaa.gov/geomag/calculators/magcalc.shtml#igrfwmm

ADuM1250 ADuM1251 模块 I2C IIC总线2500V电磁隔离 接口保护

功能说明&#xff1a; 1&#xff0c;2500V电磁隔离&#xff0c;2通道双向I2C&#xff1b; 2&#xff0c;支持电压在3到5.5V&#xff0c;最大时钟频率可达1000KHz&#xff1b; 3&#xff0c;将该隔离模块接入总线&#xff0c;可以保护主MCU引脚&#xff0c;降低I2C总线上的干…

BUUCTF [MRCTF2020]Ez_bypass1

这道题全程我都是用bp做的 拿到题目 我们查看页面源代码得到 代码审计 我们要用get传入id和gg两个参数&#xff0c;id和gg的值要求不能相等&#xff0c;但是id和gg的md5强比较必须相等 if(isset($_GET[gg])&&isset($_GET[id])) {$id$_GET[id];$gg$_GET[gg];if (md5($…

PUPANVR-UI主菜单及设置窗体框架(9)

PUPA NVR UI主菜单及设置窗体框架 在设计UI时&#xff0c;竟量把数据、控制、显示&#xff0c;分开&#xff0c;即MVC的一个模式吧&#xff01;使用MVC这样的模式思想&#xff0c;会让代码简洁不少&#xff0c;逻辑也很清析&#xff01; 具体的代码见&#xff1a; PUPANVR这个…