博客列表 >【CSS】布局技术二:grid 布局(二维)总结

【CSS】布局技术二:grid 布局(二维)总结

可乐随笔
可乐随笔原创
2022年11月27日 20:21:38555浏览

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