博客列表 >grid的基础知识

grid的基础知识

咸鱼老爷
咸鱼老爷原创
2021年02月27日 14:17:51927浏览

什么是Grid

基于行与列的二维空间布局

网格容器

由若干个矩形网格单元构成;
使用了属性display: grid就是网格容器;
默认是块元素;

网格单元

单元格|网格区域

网格项目

网格容器中的子元素就是网格项目;
默认生成1行N列的容器(N就是项目的数量)

网格轨道

由多个网格单元组成
轨道就是行和列
设置列 grid-template-columns :
设置轨道的行高 grid-template-rows :

轨道间距

容器中轨道之间的间距;
轨道间距 gap : 水平 垂直;

实现一个简单俩列三行

  1. <style>
  2. .container {
  3. display: grid;
  4. border: 1px solid #ccc;
  5. grid-template-columns: 10em 10em;
  6. grid-template-rows: 2em 2em 2em;
  7. }
  8. .item {
  9. background-color: aquamarine;
  10. border: 1px solid #ccc;
  11. }
  12. </style>
  13. <body>
  14. <div class="container">
  15. <span class="item">1</span>
  16. <span class="item">2</span>
  17. <span class="item">3</span>
  18. <span class="item">4</span>
  19. <span class="item">5</span>
  20. </div>
  21. </body>

效果图

网格单元尺寸单位:fr

设置轨道列宽的可以使用fr 响应式

fr与auto的区别

auto默认是适应,fr可以实现对应的倍数等
比如3行2列时 中间一列是左右俩列的2倍宽,auto就无法实现,fr可以实现:grid-template-columns: 1fr 2fr 1fr;

fr和%的区别

%无法计算列边距,会出现内容超出,如果使用%,则需要关闭gap间距;
%可以与fr共存,计算方式:总宽度-%的宽度,将剩下的分配给fr

总结:auto 、fr 、%都是相对单位,都可以触发自动计算,尽量不要同时出现。

fr与其他单位混合:em、px等

px、em是固定值,计算时要减去固定值,将剩下的空间在fr之间分配;
grid-template-columns: 1em 2fr 3fr;

设置网格单元尺寸的常用函数

repeat()
重复:grid-template-columns: 1em 1em 1em;可以写成grid-template-columns: repeat(3,1em);
混合使用grid-template-columns: repeat(3,1fr) 2fr; 1fr 1fr 1fr 2fr;
minmax()最大最小值,grid-template-columns: 1fr minmax(5em,10fr) 1fr;
适用于局部响应式;

隐式轨道

声明的网格单元数量与网格项目不匹配时,多余的网格单元称为隐式轨道
隐式轨道也是可以控制的;
控制排列方式:grid-auto-flow: row|columns;
行优先时使用grid-auto-rows设置行高
列优先时使用grid-auto-columns设置列宽

网格项目的显示顺序

默认是按照书写顺序排列,可以自定义排序;
行号,列号:从左上角开始(1,1)递增;
属性grid-area: 行起始编号 / 列起始编号 /行结束编号 /列结束编号;
grid-area 参数不同意义不同
1、值中有span
单值:跨越的行数
双值:跨的行与列数,如果只想设置列数,就必须设置行数(auto);
2、值中有span和编号
双值:没有span 默认跨一行一列,
三值:省略了列结束编号或跨的数量,此时前面的值可以使用auto

  1. <style>
  2. .container {
  3. display: grid;
  4. border: 1px solid #ccc;
  5. /* 轨道列宽 */
  6. grid-template-columns: repeat(3, 1fr);
  7. /* 行高 */
  8. grid-template-rows: 2em 2em;
  9. /* 间距 */
  10. gap: .2em;
  11. }
  12. .item {
  13. background-color: aquamarine;
  14. border: 1px solid #ccc;
  15. }
  16. .item:nth-of-type(5) {
  17. background-color: bisque;
  18. grid-area: 1 / 1 / 2 / 2;
  19. /* 跨一行时可以简写 */
  20. grid-area: 1 / 1;
  21. }
  22. .item:first-of-type {
  23. background-color: brown;
  24. grid-area: span 1 /span 3;
  25. }
  26. </style>
  27. <body>
  28. <div class="container">
  29. <span class="item">1</span>
  30. <span class="item">2</span>
  31. <span class="item">3</span>
  32. <span class="item">4</span>
  33. <span class="item">5</span>
  34. <span class="item">6</span>
  35. </div>
  36. </body>

效果图

grid快速实现圣杯布局

  1. <!-- 优先主体内容 -->
  2. <style>
  3. body {
  4. display: grid;
  5. grid-template-columns: 15em minmax(50vh, auto) 15em;
  6. grid-template-rows: 3em minmax(80vh, auto) 3em;
  7. gap: .5em;
  8. }
  9. body * {
  10. border: 1px solid #ccc;
  11. }
  12. footer,
  13. header {
  14. grid-area: span 1 /span 3;
  15. }
  16. main {
  17. grid-area: 2 / 2;
  18. }
  19. </style>
  20. <body>
  21. <header>header</header>
  22. <main>main</main>
  23. <aside class="left">left</aside>
  24. <aside class="right">right</aside>
  25. <footer>footer</footer>
  26. </body>

效果图

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议