博客列表 >CSS中Grid布局的属性认识

CSS中Grid布局的属性认识

马晓宁
马晓宁原创
2020年04月16日 22:18:53509浏览

1.grid 布局

grid是 css 中的一种新的布局方式,对盒子和盒子内容的位置及尺寸有很强的控制能力。与 flex 不同,flex 着重于单轴,而 grid 适应于多轴。

2. 基本概念

设置 display: grid; 的元素称为容器,它的直接子元素称为项目,但注意子孙元素不是项目。

grid line:网格线,构成 grid 布局的结构,分为水平和竖直两种。

grid track:两条相邻网格线之间的空间,可以认为是一行或者一列。

grid cell:两条相邻行和相邻列之间分割线组成的空间,是 grid 布局中的一个单元。

grid area:四条网格线包裹的全部空间,任意数量的 grid cell 组成一个 grid area。

3. 容器属性

grid-template 系列
grid-template-columns
grid-template-rows
grid-template-areas
grid-gap 系列
grid-column-gap
grid-row-gap
place-items 系列
justify-items
align-items
place-content 系列
justify-content
align-content
grid 系列
grid-auto-columns
grid-auto-rows
grid-auto-flow

4.示例1

  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: lightblue;
  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

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

示例3

  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. grid-template-columns: repeat(4, 1fr);
  16. grid-template-rows: repeat(4, 1fr);
  17. }
  18. .item {
  19. font-size: 2rem;
  20. }
  21. .item.item1 {
  22. background-color: lightgreen;
  23. grid-row-start: 1;
  24. grid-row-end: 3;
  25. grid-column-start: 1;
  26. grid-column-end: 3;
  27. /* grid-row-start: -1;
  28. grid-row-end: -3;
  29. grid-column-start: -1;
  30. grid-column-end: -3; */
  31. /* grid-row-start: 2;
  32. grid-row-end: 4;
  33. grid-column-start: 2;
  34. grid-column-end: 4;
  35. grid-row-start: 1;
  36. grid-row-end: -1;
  37. grid-column-start: 1;
  38. grid-column-end: -1; */
  39. }
  40. /* 简写 */
  41. .item.item2 {
  42. background-color: lightpink;
  43. /* grid-row-start: 1;
  44. grid-row-end: 3;
  45. grid-column-start: 3;
  46. grid-column-end: 5; */
  47. grid-row: 1 / 3;
  48. grid-column: 3 / 5;
  49. }
  50. /* 使用偏移量来简化, 将第三个移动到左下角 */
  51. .item.item3 {
  52. background-color: yellow;
  53. /*grid-row-start: 3;
  54. grid-row-end: span 2;
  55. grid-column-start: 1;
  56. grid-column-end: span 2; */
  57. grid-row: 3 / span 2;
  58. grid-column: 1 / span 2;
  59. }
  60. .item.item4 {
  61. background-color: lightgrey;
  62. /* grid-row-start: 3; */
  63. grid-row-end: span 2;
  64. /* grid-column-start: 3; */
  65. grid-column-end: span 2;
  66. }
  67. </style>
  68. </head>
  69. <body>
  70. <div class="container">
  71. <div class="item item1">1</div>
  72. <div class="item item2">2</div>
  73. <div class="item item3">3</div>
  74. <div class="item item4">4</div>
  75. </div>
  76. </body>
  77. </html>

5.总结

Grid,真的布局神器。Css在引入Flex布局和Grid布局两个模块后,才真正有了布局的概念。Flex负责一维布局,Grid负责二维布局,两个布局都非常强大,但属性是真的很多。我是有点记不过来了。还是需要多多加强练习啊。

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