Blogger Information
Blog 47
fans 3
comment 0
visits 38317
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
grid网格布局常用属性及实例演示
Original
1066 people have browsed it

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>

演示截图:

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments