博客列表 >grid网格布局常用属性及实例演示

grid网格布局常用属性及实例演示

吳
原创
2020年12月25日 16:05:221064浏览

grid常用属性意义及实例演示

1. grid属性

1.网格容器:由若干个矩形网格单元构成
2.网格项目:网格容器的子元素,必须放在网格单元中
3.网格单元:由单元格和网格区域两种表现形式
4.网格轨道:由多个网格单元组成,根据排列方向有“行轨”和“列轨”之分
5.轨道间距:容器中轨道之间的坚决,有行轨间距,列轨间距

  • 实例演示:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>网格容器/网格项目/网格轨道/轨道间距</title>
  7. <style>
  8. /* 网格容器 */
  9. .container {
  10. border: 1px solid red;
  11. padding: 0.5em;
  12. display: grid;
  13. /* 1.设置轨道的列宽 */
  14. grid-template-columns: auto;
  15. grid-template-columns: 10em 10em 10em;
  16. /* 2.设置轨道的行高 */
  17. grid-template-rows: auto;
  18. grid-template-rows: 10em 10em;
  19. /* 3.设置轨道的间距 */
  20. /* gap:水平间距 垂直间距 */
  21. /* gap:0.5em 1em */
  22. gap: 0.5em;
  23. /* 简写方案 */
  24. }
  25. /* 网格项目*/
  26. .container>.item {
  27. /* 默认生成一列N行的容器,N就是项目的数量 */
  28. background-color: lightyellow;
  29. border: 1px solid black;
  30. padding: 0.5em;
  31. }
  32. </style>
  33. </head>
  34. <body>
  35. <div class="container">
  36. <span class="item">test1</span>
  37. <span class="item">test2</span>
  38. <span class="item">test3</span>
  39. <span class="item">test4</span>
  40. <span class="item">test5</span>
  41. <span class="item">test6</span>
  42. </div>
  43. </body>
  44. </html>

演示截图:


  • 设置网格单元尺寸:fr

设置轨道宽度可以使用一个新的单位:fr(fraction),类似于flex中的伸缩因子
1.auto、fr、% 都是相对单位,都可以触发自动计算机制,尽可能的不要同时使用
2.fr可以和em、px混合使用、但是要注意px、em是固定的,计算时要减去这些固定值,将剩下的空间在fr之间分配
3.fr尽可能的不要与auto同时使用

代码演示让中间的格子是左右的两倍:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>设置网格单元尺寸的新单位:fr</title>
  7. <style>
  8. /* 网格容器 */
  9. .container {
  10. border: 1px solid violet;
  11. padding: 0.5em;
  12. display: grid;
  13. /* 轨道列表 */
  14. grid-template-columns: 10em 10em 10em;
  15. /* 设置轨道宽度可以使用一个新的单位:fr(fraction),类似于flex中的伸缩因子 */
  16. /* 设置中间的宽度是左右的2倍 */
  17. grid-template-columns: 1fr 2fr 1fr;
  18. /* 总结:
  19. 1.auto、fr、% 都是相对单位,都可以触发自动计算机制,尽可能的不要同时使用
  20. 2.fr可以和em、px混合使用、但是要注意px、em是固定的,计算时要减去这些固定值,将剩下的空间在fr之间分配
  21. 3.fr尽可能的不要与auto同时使用
  22. */
  23. /* 轨道行高 */
  24. grid-template-rows: 5em 5em;
  25. /* 轨道间距 */
  26. gap: 0.5em;
  27. }
  28. /* 网格项目 */
  29. .container>.item {
  30. background-color: lightcyan;
  31. border: 1px solid black;
  32. padding: 0.5em;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <div class="container">
  38. <span class="item">test1</span>
  39. <span class="item">test2</span>
  40. <span class="item">test3</span>
  41. <span class="item">test4</span>
  42. <span class="item">test5</span>
  43. <span class="item">test6</span>
  44. </div>
  45. </body>
  46. </html>

演示截图:


  • 网格单元尺寸常用函数:repeat()minmax()

repeat(重复次数,可以多个值) 例如:grid-template-columns: repeat(3,1fr 2fr)
minmax(最小宽度,最大宽度) 例如:grid-template-columns: 1fr minmax(20em,2fr) 1fr;

实例演示:

  1. <html lang="en">
  2. <head>
  3. <meta charset="UTF-8">
  4. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  5. <title>设置网格单元尺寸的常用函数:repeat()、minmax()</title>
  6. <style>
  7. /* 网格容器 */
  8. .container {
  9. display: grid;
  10. padding: 0.5em;
  11. border: 1px solid red;
  12. /* 轨道列宽 */
  13. /* grid-template-columns: 10em 10em 10em; */
  14. /* 1. reapeat() */
  15. grid-template-columns: repeat(3, 10em);
  16. /* 第二个参数可以是多值 */
  17. grid-template-columns: repeat(3, 10em 3em);
  18. grid-template-columns: repeat(3, 1fr);
  19. grid-template-columns: repeat(3, 1fr 2fr);
  20. /* 展开解释 */
  21. grid-template-columns: 1fr 2fr 1fr 2fr 1fr 2fr;
  22. /* 混合使用 */
  23. grid-template-columns: repeat(2, 1fr) 2fr;
  24. /* 展开解释 */
  25. grid-template-columns: 1fr 1fr 2fr;
  26. /* 2.minmax() */
  27. /* 中间列,最小宽度是20em,最大宽度是左右的二倍 */
  28. grid-template-columns: 1fr minmax(20em, 2fr) 1fr;
  29. grid-template-columns: 20em minmax(20em, 1fr);
  30. /* 轨道行高 */
  31. grid-template-rows: 5em 5em;
  32. /* 轨道间距 */
  33. gap: 0.5em;
  34. }
  35. /* 网格项目 */
  36. .container>.item {
  37. padding: 0.5em;
  38. border: 1px solid lightyellow;
  39. background-color: lightblue;
  40. }
  41. </style>
  42. </head>
  43. <body>
  44. <div class="container">
  45. <span class="item">test1</span>
  46. <span class="item">test2</span>
  47. <span class="item">test3</span>
  48. <span class="item">test4</span>
  49. <span class="item">test5</span>
  50. <span class="item">test6</span>
  51. </div>
  52. </body>
  53. </html>

演示截图:


  • 网格单元的排列方式与隐式轨道

当原来声明的网格单元数量不够存入所有网格项目中,多出来的项目会被放进自动生成的网格空间,这时原来声明的网格单元叫显式轨道,多出来的项目显示的轨道称为隐式轨道

默认项目在容器中按:先行后列的顺序排列“行优先” 使用:grid-auto-flow: row;
自动生成的隐式轨道高度是自动的
行优先时需设置隐式轨道的行高:
grid-auto-rows: 5em;
列优先时需设置隐式轨道的列宽:
grid-auto-column:1fr;

实例演示:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>网格单元的排列方式与隐式轨道</title>
  7. <style>
  8. /* 网格容器 */
  9. .container {
  10. display: grid;
  11. padding: 0.5em;
  12. border: 3px solid red;
  13. /* 轨道列宽 */
  14. grid-template-columns: repeat(3, 1fr);
  15. /* 轨道行高 */
  16. grid-template-rows: 5em 5em;
  17. /* 默认项目在容器中按:先行后列的顺序排列,“行优先” */
  18. grid-auto-flow: row;
  19. /* 自动生存的隐式轨道的高度是自动的,行优先时要设置隐式轨道的行高 */
  20. grid-auto-rows: 5em;
  21. /* 列优先 */
  22. grid-auto-flow: column;
  23. /* 列优先时要设置隐式轨道的列宽 */
  24. grid-auto-columns: 1fr;
  25. /* 设置轨道间距 */
  26. gap: 0.5em;
  27. }
  28. /* 网格项目 */
  29. .container>.item {
  30. padding: 0.5em;
  31. background-color: violet;
  32. border: 3px solid blue;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <div class="container">
  38. <span class="item">test1</span>
  39. <span class="item">test2</span>
  40. <span class="item">test3</span>
  41. <span class="item">test4</span>
  42. <span class="item">test5</span>
  43. <span class="item">test6</span>
  44. <span class="item">test7</span>
  45. <span class="item">test8</span>
  46. <span class="item">test9</span>
  47. </div>
  48. </body>
  49. </html>

演示截图:


  • grid-area自定义项目在容器的显示位置

语法:grid-area:行起始编号 / 列起始编号 / 行结束编号 / 列结束编号

实例演示:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>自定义项目在容器的显示位置</title>
  7. <style>
  8. /* 网格容器 */
  9. .container {
  10. border: 1px solid red;
  11. padding: 0.5em;
  12. display: grid;
  13. /* 轨道列宽 */
  14. grid-template-columns: repeat(3, 1fr);
  15. /* 轨道行高 */
  16. grid-template-rows: 5em 5em;
  17. /* 行优先时要设置隐式轨道的行高 */
  18. grid-auto-rows: 5em;
  19. /* 轨道间距 */
  20. gap: 0.5em;
  21. }
  22. /* 网格项目 */
  23. .container>.item {
  24. background-color: skyblue;
  25. border: 1px solid red;
  26. padding: 0.5em;
  27. }
  28. .container>.item:nth-of-type(3) {
  29. background-color: yellow;
  30. grid-area: 1 / 1;
  31. grid-area: span 1 / span 2;
  32. grid-area: 2 / 2;
  33. grid-area: auto / 2 /2;
  34. grid-area: 2 / 2 / 3 / 3;
  35. }
  36. /* 总结:
  37. grid-area:参数数量不同,意义不同
  38. 1. 值中只有span
  39. 1.1 单值:跨的行数
  40. 1.2 双值:跨的行与列数,如果只想设置列数,就必须设置行数(auto)
  41. 2. 值中只有span和编号
  42. 2.1 双值:没有span,默认跨1行1列,grid-area:2 / 3
  43. 2.2 三值:省了列结束编号或跨的数量,此时前面的值可使用auto
  44. 2.3 四值:最完整的语法 */
  45. </style>
  46. </head>
  47. <body>
  48. <div class="container">
  49. <span class="item">1</span>
  50. <span class="item">2</span>
  51. <span class="item">3</span>
  52. <span class="item">4</span>
  53. <span class="item">5</span>
  54. <span class="item">6</span>
  55. <span class="item">7</span>
  56. <span class="item">8</span>
  57. <span class="item">9</span>
  58. </div>
  59. </body>
  60. </html>

演示截图:

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