前端页面布局之【Grid布局】详解
最佳答案 问答题库868位专家为你答疑解惑
目录
- 🌟前言
- 🌟浏览器支持
- 🌟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模块。
🌟浏览器支持
🌟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布局目前常用于移动端布局
🌟属性介绍
🌟 父元素上的属性
🌟 设置grid布局
display:grid | inline-grid | subgrid;
🌟设置网格的列数与行数
- 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 的大小范围*/
- grid-template-rows 与grid-template-columns的使用方法相同 设置网格项的行数
grid-template-rows:100px 10% 1fr 2fr; /*写几个值表示有几行 值可以是px这种固定大小的,也可以是百分比,也可以使用fr这种单位;fr表示总空间减去固定空间和百分比的大小,然后再分配*/
- 简单例子
.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轴
.box{display:grid;justify-items: center;
}
🌟align-items
网格中所有单元格中的内容在网格项Y轴的对齐方式 默认是占满宽度整个Y轴 它的值与justify-items相同
.container{display:grid;align-items: center;
}
🌟justify-content
如果我们使用PX这种固定大小的布局方式的时候,网格的大小可能小于网格容器的大小
这个值是用来设置整个网格在网格容器中的X轴的排列方式
.box{display:grid;justify-content: center;
}
.box{display:grid;justify-content: space-evenly;
}
🌟align-content
如果我们使用PX这种固定大小的布局方式的时候,网格的大小可能小于网格容器的大小
这个值是用来设置整个网格在网格容器中的Y轴的排列方式
.box{display: grid;align-content: center;
}
.box{display: grid;align-content: space-evenly;
}
🌟grid-auto-columns和grid-auto-rows
设定隐藏的网格轨道的大小
自动生成隐式网格轨道(列和行),当你定位的网格项超出网格容器范围时,将自动创建隐式网格轨道。网格轨道大小,可以是固定值,百分比或者是分数(fr单位)。
🌟grid-auto-flow
在布局是时候,选择网格填充的方法
在没有设置网格项的位置时,这个属性控制网格项怎样排列。
<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;
}
-
设置grid-auto-flow:row,item-b、item-c和item-d在行上是从左到右排列
-
设置grid-auto-flow:column;
-
grid的简写方式和属性的顺序,设置网格容器所有属性。
grid: none | grid-template-rows / grid-template-columns | grid-auto-flow [grid-auto-rows [ / grid-auto-columns] ];
🌟设置子元素上的属性
🌟grid-area
给单个子元素起名字
这个属性就是配合父元素上的grid-template-areas属性来使用,grid-area就是给单个网格项起个名字
设置网格项位置的三种写法
- grid-column-start grid-column-end grid-row-start grid-row-end
从左到右的四个属性的含义: 哪跟竖线开始哪跟竖线结束哪跟横线开始哪跟横线结束
值写数字表示第几跟网格线 也可以写网格线的名字
- grid-column grid-row
grid-column: 1 / 2;
grid-row: 1 / 2;
- 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-startgrid-row-end: 3
}
🌟设置单个子元素在其所在的网格项中的排列方式
- justify-self 用来设置单个元素在单个网格项中X轴的布局
- align-self 与justify-self:;类似,用来设置单个元素在单个网格中Y轴的布局方式,和justify-self有4个相同的值
🌟写在最后
更多前端知识请大家持续关注,尽请期待。各位小伙伴让我们 let’s be prepared at all times!
✨原创不易,还希望各位大佬支持一下!
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!
99%的人还看了
相似问题
- 2023-11-22 LeetCode每日一题(网格中的最小路径代价)
- 动态规划:2304. 网格中的最小路径代价
- CSS3 多媒体查询、网格布局
- JavaFX入门和网格布局面板的使用,Dao层交互,舞台与场景切换以及其他控件的使用
- 基于OCC+OSG集成框架下的GMSH之二阶网格划分探索
- 【计算系统】5分钟了解超算,高性能计算,并行计算,分布式计算,网格计算,集群计算以及云计算的区别
- 从入门到精通:深入了解CSS中的Grid网格布局技巧和应用!
- 通过引入插件Grid Masschange实现批量修改交互网格数据
- 【Qt】盒子布局、网格布局、表单布局和堆栈布局
- 【AIGC核心技术剖析】用于高效 3D 内容创建生成(从单视图图像生成高质量的纹理网格)
猜你感兴趣
版权申明
本文"前端页面布局之【Grid布局】详解":http://eshow365.cn/6-17210-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!