Blogger Information
Blog 62
fans 7
comment 2
visits 58274
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Grid布局入门知识学习
我是郭富城
Original
415 people have browsed it

作业演示:https://php520.vip/4.13/4.13.html

1. 基本术语

  • 容器: 使用网格布局的元素
  • 项目: 容器中的子元素
  • 网格线: 将容器划分为行与列的直线
  • 显式网络: 由用户根据项目数量指示容器生成的网格
  • 隐式网格: 由容器根据项目数量自动生成的网格
  • 单元格: 项目放置的具体空间
  • 网格区域: 一个以上的单元格组成的矩形区域

网格布局的基本步骤: 1. 生成网格; 2. 放置项目
网格布局实际上就是表格布局
Grid 布局/栅格布局/网格布局

2.grid布局常用属性

2.1 创建Grid容器

  • 通过display: grid;定义容器为栅格布局

  • 代码实例

    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>创建Grid容器</title>
    7. <style>
    8. .container {
    9. /* 容器大小 */
    10. width: 400px;
    11. height: 400px;
    12. background-color: wheat;
    13. /* 创建Grid容器 */
    14. display: grid;
    15. /* 设置项目在网格中的填充方案,默认行优先 */
    16. grid-auto-flow: row;
    17. /* grid-auto-flow: column; */
    18. /* 显式的划分行与列,比如划分为两行三列 */
    19. grid-template-columns: 100px 100px 100px;
    20. grid-template-rows: 100px 100px;
    21. /* 对于放置不下的项目会隐式生成单元格 */
    22. grid-auto-rows: auto;
    23. grid-auto-rows: 150px;
    24. }
    25. .item {
    26. background-color: lightskyblue;
    27. font-size: 2rem;
    28. }
    29. </style>
    30. </head>
    31. <body>
    32. <div class="container">
    33. <div class="item item1">1</div>
    34. <div class="item item2">2</div>
    35. <div class="item item3">3</div>
    36. <div class="item item4">4</div>
    37. <div class="item item5">5</div>
    38. <div class="item item6">6</div>
    39. <div class="item item7">7</div>
    40. </div>
    41. </body>
    42. </html>

2.2设置单元格的数量和尺寸

  • 通过grid-template-columns/rows,在容器中显式地划分行与列,生成指定数量的单元格来放置项目
  • 代码实例

    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. .container {
    9. /* 容器大小 */
    10. width: 400px;
    11. height: 400px;
    12. background-color: wheat;
    13. /* 创建Grid容器 */
    14. display: grid;
    15. }
    16. .container {
    17. /* 固定值 */
    18. grid-template-columns: 100px 100px 100px;
    19. grid-template-rows: 100px 100px 100px;
    20. /* 百分比 */
    21. grid-template-columns: 20% 30% auto;
    22. grid-template-rows: 100px auto 100px;
    23. /* 按比例 */
    24. grid-template-columns: 1fr 2fr 2fr;
    25. grid-template-rows: 1fr auto 2fr;
    26. /* 重复设置 */
    27. grid-template-columns: repeat(3, 100px);
    28. grid-template-rows: repeat(3, 100px);
    29. /* 按分组来设置:(50px-100px) */
    30. grid-template-columns: repeat(2, 50px 100px);
    31. /* 弹性设置 */
    32. grid-template-columns: repeat(2, minmax(50px, 100px));
    33. grid-template-rows: repeat(3, minmax(150px, 1fr));
    34. /* 自动填充 */
    35. grid-template-columns: repeat(auto-fill, 100px);
    36. grid-template-rows: repeat(auto-fill, 100px);
    37. }
    38. .item {
    39. background-color: lightskyblue;
    40. font-size: 2rem;
    41. }
    42. </style>
    43. </head>
    44. <body>
    45. <div class="container">
    46. <div class="item item1">1</div>
    47. <div class="item item2">2</div>
    48. <div class="item item3">3</div>
    49. <div class="item item4">4</div>
    50. <div class="item item5">5</div>
    51. <div class="item item6">6</div>
    52. <div class="item item7">7</div>
    53. </div>
    54. </body>
    55. </html>

2.3 使用默认的网格线划分单元格

  • 默认的网格线具有编号,可以通过属性grid-row-start,grid-row-end,grid-column-start,grid-column-end来划分具体的单元格。
    1. grid-row-start: 1;
    2. grid-row-end: 3;
    3. grid-column-start: 1;
    4. grid-column-end: 3;
  • 缩写:
    1. grid-row: 1 / 3;
    2. grid-column: 3 / 5;
  • 使用偏移量来简化
    1. grid-row: 3 / span 2;
    2. grid-column: 1 / span 2;
  • 代码实例

    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. .container {
    9. /* 容器大小 */
    10. width: 400px;
    11. height: 400px;
    12. background-color: wheat;
    13. /* 创建Grid容器 */
    14. display: grid;
    15. }
    16. .container {
    17. grid-template-columns: repeat(4, 1fr);
    18. grid-template-rows: repeat(4, 1fr);
    19. }
    20. .item {
    21. font-size: 2rem;
    22. }
    23. .item.item1 {
    24. background-color: lightgreen;
    25. grid-row-start: 1;
    26. grid-row-end: 3;
    27. grid-column-start: 1;
    28. grid-column-end: 3;
    29. /* 右下角开始 */
    30. /* grid-row-start: -1;
    31. grid-row-end: -3;
    32. grid-column-start: -1;
    33. grid-column-end: -3; */
    34. /* 放到中间 */
    35. /* grid-row-start: 2;
    36. grid-row-end: 4;
    37. grid-column-start: 2;
    38. grid-column-end: 4; */
    39. /* 填满空间 */
    40. /* grid-row-start: 1;
    41. grid-row-end: -1;
    42. grid-column-start: 1;
    43. grid-column-end: -1; */
    44. }
    45. /* 简写 */
    46. .item.item2 {
    47. background-color: lightpink;
    48. /* grid-row-start: 1;
    49. grid-row-end: 3;
    50. grid-column-start: 3;
    51. grid-column-end: 5; */
    52. grid-row: 1 / 3;
    53. grid-column: 3 / 5;
    54. }
    55. /* 使用偏移量来简化 */
    56. .item.item3 {
    57. background-color: yellow;
    58. /* grid-row-start: 3;
    59. grid-row-end: span 2;
    60. grid-column-start: 1;
    61. grid-column-end: span 2; */
    62. grid-row: 3 / span 2;
    63. grid-column: 1 / span 2;
    64. }
    65. .item.item4 {
    66. background-color: whitesmoke;
    67. /* grid-row-start: 3; */
    68. grid-row-end: span 2;
    69. /* grid-column-start: 3; */
    70. grid-column-end: span 2;
    71. }
    72. </style>
    73. </head>
    74. <body>
    75. <div class="container">
    76. <div class="item item1">1</div>
    77. <div class="item item2">2</div>
    78. <div class="item item3">3</div>
    79. <div class="item item4">4</div>
    80. </div>
    81. </body>
    82. </html>

    2.4 使用命名(自定义)的网格线划分单元格

  • 使用语义化的名称替代容器自动生成的数字网线线编号
  • 同一条网络线可以有多个别名
  • 例如:
    1. .container {
    2. grid-template-columns: [c1-start] 100px [c1-end c2-start] 100px [c2-end c3-start] 100px [c3-end];
    3. grid-template-rows: [r1-start] 100px [r1-end r2-start] 100px [r2-end r3-start] 100px [r3-end];
    4. }
  • 代码示例

    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. padding: 0;
    10. margin: 0;
    11. }
    12. .container {
    13. /* 容器大小 */
    14. width: 400px;
    15. height: 400px;
    16. background-color: wheat;
    17. /* 创建Grid容器 */
    18. display: grid;
    19. }
    20. .container {
    21. grid-template-columns: [c1-start] 100px [c1-end c2-start] 100px [c2-end c3-start] 100px [c3-end];
    22. grid-template-rows: [r1-start] 100px [r1-end r2-start] 100px [r2-end r3-start] 100px [r3-end];
    23. }
    24. .item {
    25. font-size: 2rem;
    26. }
    27. .item.item1 {
    28. background-color: lightgreen;
    29. /* 默认就是跨越一行一列,所以可以省略 */
    30. grid-row-start: r2-start;
    31. grid-row-end: span;
    32. grid-column-start: c3-start;
    33. grid-column-end: span;
    34. }
    35. /* 简写 */
    36. .item.item2 {
    37. background-color: lightpink;
    38. grid-row: 1 / 2;
    39. grid-column: 1 / 4;
    40. }
    41. /* 使用偏移量来简化 */
    42. .item.item3 {
    43. background-color: yellow;
    44. grid-row-end: span 2;
    45. grid-column-end: span 2;
    46. }
    47. .item.item4 {
    48. background-color: whitesmoke;
    49. }
    50. </style>
    51. </head>
    52. <body>
    53. <div class="container">
    54. <div class="item item1">1</div>
    55. <div class="item item2">2</div>
    56. <div class="item item3">3</div>
    57. <div class="item item4">4</div>
    58. </div>
    59. </body>
    60. </html>

2.5 网格区域

  • 设置项目属性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. padding: 0;
    10. margin: 0;
    11. }
    12. .container {
    13. /* 容器大小 */
    14. width: 400px;
    15. height: 400px;
    16. background-color: wheat;
    17. /* 创建Grid容器 */
    18. display: grid;
    19. }
    20. .container {
    21. grid-template-columns: repeat(4, 1fr);
    22. grid-template-rows: repeat(4, 1fr);
    23. }
    24. .item {
    25. font-size: 2rem;
    26. }
    27. .item.item1 {
    28. background-color: lightgreen;
    29. grid-area: 1 / 1 / 2 / 5;
    30. /* 行开始 / 列开始 / 行结束 / 列结束 */
    31. grid-area: 1 / 1 / span 1 / span 4;
    32. /* 当前位置可以省略 */
    33. grid-area: span 1 / span 4;
    34. }
    35. .item.item2 {
    36. background-color: lightpink;
    37. grid-area: 2 / 1 / 4 /2;
    38. }
    39. .item.item3 {
    40. background-color: yellow;
    41. }
    42. .item.item4 {
    43. background-color: whitesmoke;
    44. }
    45. .item.item5 {
    46. background-color: violet;
    47. }
    48. </style>
    49. </head>
    50. <body>
    51. <div class="container">
    52. <div class="item item1">1</div>
    53. <div class="item item2">2</div>
    54. <div class="item item3">3</div>
    55. <div class="item item4">4</div>
    56. <div class="item item5">5</div>
    57. </div>
    58. </body>
    59. </html>

    2.6 命名(自定义)网格区域

  • 设置命名网格区域 ,相同名称的命名区域会合并
  • 可以为每一个网格区域设置一个语义化的名称
  • 具有名称的网络区域称之为命名区域
  • 项目设置的区域名称后,会自动填充到容器中应对的命名区域中
  • grid-template-areas:属性
  • 代码示例:

    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. padding: 0;
    10. margin: 0;
    11. }
    12. .container {
    13. /* 容器大小 */
    14. width: 400px;
    15. height: 400px;
    16. background-color: wheat;
    17. /* 创建Grid容器 */
    18. display: grid;
    19. }
    20. .container {
    21. grid-template-columns: 80px 1fr 80px;
    22. grid-template-rows: 40px 1fr 40px;
    23. }
    24. .container {
    25. /* 设置命名网格区域 ,相同名称的命名区域会合并*/
    26. grid-template-areas:
    27. "header header header"
    28. "left main right"
    29. "footer footer footer";
    30. }
    31. .item {
    32. font-size: 2rem;
    33. }
    34. .item.item1 {
    35. background-color: lightgreen;
    36. grid-area: header;
    37. }
    38. .item.item2 {
    39. background-color: lightpink;
    40. grid-area: left;
    41. }
    42. .item.item3 {
    43. background-color: yellow;
    44. grid-area: main;
    45. }
    46. .item.item4 {
    47. background-color: whitesmoke;
    48. grid-area: right;
    49. }
    50. .item.item5 {
    51. background-color: violet;
    52. grid-area: footer;
    53. }
    54. </style>
    55. </head>
    56. <body>
    57. <div class="container">
    58. <div class="item item1">1</div>
    59. <div class="item item2">2</div>
    60. <div class="item item3">3</div>
    61. <div class="item item4">4</div>
    62. <div class="item item5">5</div>
    63. </div>
    64. </body>
    65. </html>

2.7 网格区域占位符

  • 当项目默认已到填充到正确的区域中,无需设置时,可使用”.”做为占位符
  • 演示
    1. .container {
    2. /* 设置命名网格区域 ,相同名称的命名区域会合并*/
    3. grid-template-areas:
    4. "header header header"
    5. ". . ."
    6. "footer footer footer";
    7. }

2.8 网格区域线的默认名称

  • 区域起始行/列: 区域名称-start, 如header-start / header-start,表示区域起始行/区域起始列
  • 区域结束行/列: 区域名称-end,如header-end / header-end,表示区域结束行/区域结束列

2.9 设置单元格在容器中的对齐方式

  • justify-content: 设置所有项目在容器中水平方向的对齐方式
  • align-content: 设置所有项目在容器中垂直方向的对齐方式
  • place-content: 上面二个属性的简写, place-content: 垂直对齐方式 水平对齐方式
  • 代码示例:

    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. padding: 0;
    10. margin: 0;
    11. }
    12. .container {
    13. /* 容器大小 */
    14. width: 400px;
    15. height: 400px;
    16. background-color: wheat;
    17. /* 创建Grid容器 */
    18. display: grid;
    19. }
    20. .container {
    21. grid-template-columns: repeat(3, 50px);
    22. grid-template-rows: repeat(3, 50px);
    23. justify-content: center;
    24. align-content: center;
    25. justify-content: space-between;
    26. justify-content: space-around;
    27. justify-content: space-evenly;
    28. align-content: space-between;
    29. align-content: space-around;
    30. align-content: space-evenly;
    31. }
    32. .container {
    33. /* justify-content: stretch;
    34. grid-template-columns: repeat(3, auto);
    35. align-content: stretch;
    36. grid-template-rows: repeat(3, 1fr); */
    37. /* 简写 */
    38. place-content: center start;
    39. place-content: center center;
    40. place-content: center;
    41. }
    42. .item {
    43. background-color: violet;
    44. font-size: 2rem;
    45. }
    46. </style>
    47. </head>
    48. <body>
    49. <div class="container">
    50. <div class="item item1">1</div>
    51. <div class="item item2">2</div>
    52. <div class="item item3">3</div>
    53. <div class="item item4">4</div>
    54. <div class="item item5">5</div>
    55. <div class="item item6">6</div>
    56. <div class="item item7">7</div>
    57. <div class="item item8">8</div>
    58. <div class="item item9">9</div>
    59. </div>
    60. </body>
    61. </html>

    2.10 设置项目在单元格的对齐方式

  • justify-items: 设置所有项目在单元格/网格区域中水平方向的对齐方式
  • align-items: 设置所有项目在单元格/网格区域中垂直方向的对齐方式
  • place-items: 上面二个属性的简写, place-items: 垂直对齐方式 水平对齐方式

    看到items就是项目

2.11 设置某个项目在单元格的对齐方式

  • justify-self: 设置某个项目在单元格/网格区域中水平方向的对齐方式
  • align-self: 设置某个项目在单元格/网格区域中垂直方向的对齐方式
  • place-self: 上面二个属性的简写, place-self: 垂直对齐方式 水平对齐方式

  • 代码实例:

    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. padding: 0;
    10. margin: 0;
    11. }
    12. .container {
    13. /* 容器大小 */
    14. width: 400px;
    15. height: 400px;
    16. background-color: wheat;
    17. /* 创建Grid容器 */
    18. display: grid;
    19. }
    20. .container {
    21. grid-template-columns: repeat(3, 1fr);
    22. grid-template-rows: repeat(3, 1fr);
    23. }
    24. .container {
    25. justify-items: stretch;
    26. align-items: stretch;
    27. justify-items: center;
    28. align-items: center;
    29. place-items: start end;
    30. place-items: center;
    31. }
    32. .item {
    33. width: 50px;
    34. height: 50px;
    35. background-color: violet;
    36. font-size: 2rem;
    37. }
    38. .item.item5 {
    39. justify-self: end;
    40. align-self: end;
    41. place-self: start;
    42. place-self: center;
    43. }
    44. </style>
    45. </head>
    46. <body>
    47. <div class="container">
    48. <div class="item item1">1</div>
    49. <div class="item item2">2</div>
    50. <div class="item item3">3</div>
    51. <div class="item item4">4</div>
    52. <div class="item item5">5</div>
    53. <div class="item item6">6</div>
    54. <div class="item item7">7</div>
    55. <div class="item item8">8</div>
    56. <div class="item item9">9</div>
    57. </div>
    58. </body>
    59. </html>

2.12 行间距,列间距

  • column-gap: 列间距
  • row-gap: 行间距
  • gap: 行间距 列间距: 简写
  • gap: 值: 行与列相等,可只写一个值

3.学习总结

通过学习grid布局,对比之前学习的浮动元素,定位元素,以及flex布局,grid是一种全新的二维布局,比flex布局多了一维,不仅加速了前端的布局开发,还节省了代码。这对于维护一个项目来说是一个颠覆性的创新方法。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:grid布局绝对是以后的一个趋势, 越早掌握越好
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
Author's latest blog post