Blogger Information
Blog 94
fans 0
comment 0
visits 92720
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
【CSS】布局技术二:grid 布局(二维)总结
可乐随笔
Original
559 people have browsed it

布局技术二:grid 布局(二维)

Grid 术语

(一) 容器属性

  1. display: 容器类型(块或行内)
  2. grid-template-row/columns:创建显示网格
  3. grid-auto-rows/columns: 创建隐式网格
  4. grid-auto-flow: 项目排列方向
  5. gap: 行列间隙
  6. place-content: 项目在容器中的排列方式
  7. place-items: 项目在单元格中的排列试工

(二)项目属性

  1. grid-row/column: 某项目占据的网格区域
  2. grid-area: grid-row/column语法糖
  3. place-self: 某项目在单元格中的排列方式

显式风格与项目属性

  1. 布局技术: Grid: display: grid;
  2. 显式网格
    grid-template-columns: repeat(3,1fr);
    grid-template-rows: repeat(3,1fr); */
    grid-template-rows: repeat(3,50px);
  3. 排列规则
    grid-auto-flow: column;
    grid-auto-flow: row;
  4. 布局属性:grid-area
    重点
    span 简化:行开始/列开始/跨越行/跨越列;
    grid-area: 1 / 1 / span 2 / span 2;

排列规则与隐式网格

  1. 排列规则:grid-auto-flow:row / column 行优先/列优先
  2. 隐式网格:grid-auto-row / column 多除隐式网格自定义高和度

Grid项目之对齐方式

  1. 对齐方式:必须存在“剩余空间”
  2. 对齐方案:“剩余空间”在“项目”之间的分配方式
  3. 剩余空间:Flex(主轴,交叉轴),Grid(容器,单元格)
  4. Grid:剩余空间存在于“容器”或“单元格”
  5. 容器中:place-content,place-items
  6. 项目中:place-self

Grid项目之行列间隙

行列间隙
gap: 垂直方向 水平方向
gap: 5px 5px;
项目间隙 5PX
gap: 5px;

更多:参考MDN:https://developer.mozilla.org/zh-CN/docs/Web/CSS/grid

示例代码

1:grid属性-1:显式风格与项目属性

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>grid属性-1:显式风格与项目属性</title>
  8. </head>
  9. <body>
  10. <!-- 容器:父元素 -->
  11. <div class="container">
  12. <!-- 项目:子元素 -->
  13. <div class="item">item1</div>
  14. </div>
  15. <style>
  16. .container {
  17. /* grid布局 */
  18. display: grid;
  19. width: 300px;
  20. height: 150px;
  21. /* 3行3列 */
  22. /* grid-template-columns: 100px 100px 100px;
  23. grid-template-rows: 50px 50px 50px; */
  24. /* grid-template-columns: repeat(3,100px);
  25. grid-template-rows: repeat(3,50px); */
  26. /* 容器300px,而每个项目100px,有3个项目正好充满容器,1:1:1 */
  27. grid-template-columns: repeat(3,1fr);
  28. grid-template-rows: repeat(3,1fr);
  29. }
  30. .container > .item {
  31. background-color: wheat;
  32. }
  33. /* 可以将项目放在任何一个单元格中 */
  34. .container > .item:first-of-type {
  35. /* 默认:1行1列到2行2列 */
  36. /* grid-row: 起始行 / 结束行; */
  37. /* grid-column:起始列 / 结束列; */
  38. grid-row: 1 / 2;
  39. grid-column: 1 /2;
  40. /* 移动到正中间 */
  41. grid-row: 2 / 3;
  42. grid-column: 2 / 3;
  43. /* 因为一个项目至少要占据一个单元格,默认跨越一个单元格编号 */
  44. grid-row: 2;
  45. grid-column: 2;
  46. /* 很多场景下,用户不关心也不知道结束编号,只知道要跨越几行几列 */
  47. grid-row: 2 / span 1;
  48. grid-column: 2 / span 1;
  49. /* 从当前位置开始,跨越2行2列 */
  50. grid-row: 2 / span 2;
  51. grid-column: 2 / span 2;
  52. /* grid-row,grid-column 创建出了一个网格区域 */
  53. /* grid-area: 行开始/列开始/行结束/列结束; */
  54. grid-area: 1 / 1 / 3 / 3;
  55. /* span 简化 */
  56. grid-area: 1 / 1 / span 2 / span 2;
  57. /* 页脚 布局 */
  58. grid-area: 3 / 1 / span 1 / span 3;
  59. }
  60. </style>
  61. </body>
  62. </html>

示例代码2:Grid属性-2:排列规则与隐式网格

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Grid属性-2:排列规则与隐式网格</title>
  8. </head>
  9. <body>
  10. <div class="container">
  11. <div class="item">item1</div>
  12. <div class="item">item2</div>
  13. <div class="item">item3</div>
  14. <div class="item">item4</div>
  15. <div class="item">item5</div>
  16. <div class="item">item6</div>
  17. <div class="item">item7</div>
  18. <div class="item">item8</div>
  19. <div class="item">item9</div>
  20. <div class="item">item11</div>
  21. <div class="item">item12</div>
  22. </div>
  23. <style>
  24. .container {
  25. width: 300px;
  26. /* height: 150px; */
  27. /* 布局技术: Grid */
  28. display: grid;
  29. /* 显式网格 */
  30. grid-template-columns: repeat(3,1fr);
  31. /* grid-template-rows: repeat(3,1fr); */
  32. grid-template-rows: repeat(3,50px);
  33. /* 排列规则 */
  34. grid-auto-flow: column;
  35. grid-auto-flow: row;
  36. /* 隐式网格 */
  37. /* 多余的项目,出现在隐式网格中(自动生成) */
  38. /* 自定义隐式网格高度 */
  39. grid-auto-rows: 50px;
  40. /* 共享高度,与显式网络高度一致 */
  41. /* grid-auto-rows: 1fr; */
  42. }
  43. .container > .item {
  44. background-color: wheat;
  45. }
  46. .container > .item:nth-last-child(-n+2){
  47. background-color: yellow;
  48. }
  49. </style>
  50. </body>
  51. </html>

示例代码3:Grid之项目对齐

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Grid属性3:项目对齐</title>
  8. </head>
  9. <body>
  10. <div class="container">
  11. <div class="item">item1</div>
  12. <div class="item">item2</div>
  13. <div class="item">item3</div>
  14. <div class="item">item4</div>
  15. <div class="item">item5</div>
  16. <div class="item">item6</div>
  17. <div class="item">item7</div>
  18. <div class="item">item8</div>
  19. <div class="item">item9</div>
  20. </div>
  21. <style>
  22. /**------------------------------------------------------------------------
  23. * * 1. 对齐方式:必须存在“剩余空间”
  24. * * 2. 对齐方案:“剩余空间”在“项目”之间的分配方式
  25. * * 3. 剩余空间:Flex(主轴,交叉轴),Grid(容器,单元格)
  26. * * Grid:剩余空间存在于“容器”或“单元格”
  27. * * 容器中:place-content,place-items
  28. * * 项目中:place-self
  29. *------------------------------------------------------------------------**/
  30. .container {
  31. display: grid;
  32. grid-template-columns: repeat(3,100px);
  33. grid-template-rows: repeat(3,100px);
  34. }
  35. .container .item {
  36. background-color: wheat;
  37. }
  38. /* 创建容器剩余空间 */
  39. .container {
  40. width: 450px;
  41. height: 450px;
  42. border: 1px solid #000;
  43. background-color: lightgreen;
  44. /* 1. 项目在“容器”中的对齐 */
  45. /* 默认值:垂直居上,水平居左 */
  46. place-content: start start;
  47. /* 垂直居中,水平居右 end <==> right */
  48. place-content: center end;
  49. /* 全部居中 */
  50. place-content: center;
  51. /* 水平方向居中对齐,垂直方向分散对齐 */
  52. place-content: space-between space-around;
  53. /* 2. 项目在单元格中对齐 */
  54. /* 单元格中必须要有剩余控件,即:项目 < 单元格 */
  55. /* place-tiems:垂直方向 水平方向 */
  56. /* 默认值:place-items: start strat; */
  57. place-items: start start;
  58. /* 垂直居中 水平居右对齐 */
  59. place-items:center end;
  60. /* 垂直水平居中 */
  61. place-items: center;
  62. }
  63. /* 3. 设置某个项目在单元格中对齐方式不同 */
  64. .container .item:nth-child(5) {
  65. background-color: yellow;
  66. place-self: end;
  67. }
  68. </style>
  69. </body>
  70. </html>

Grid属性4:行列间隙

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Grid属性4:行列间隙</title>
  8. </head>
  9. <body>
  10. <div class="container">
  11. <div class="item">item1</div>
  12. <div class="item">item2</div>
  13. <div class="item">item3</div>
  14. <div class="item">item4</div>
  15. <div class="item">item5</div>
  16. <div class="item">item6</div>
  17. <div class="item">item7</div>
  18. <div class="item">item8</div>
  19. <div class="item">item9</div>
  20. </div>
  21. <style>
  22. .container {
  23. display: grid;
  24. grid-template-columns: repeat(3,100px);
  25. grid-template-rows: repeat(3,100px);
  26. /* 行列间隙 */
  27. /* gap: 垂直方向 水平方向 */
  28. gap: 5px 5px;
  29. /* 项目间隙 5PX */
  30. gap: 5px;
  31. }
  32. .container .item {
  33. background-color: wheat;
  34. }
  35. </style>
  36. </body>
  37. </html>
Correcting teacher:PHPzPHPz

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
Author's latest blog post