Blogger Information
Blog 18
fans 0
comment 0
visits 13300
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
CSS中Grid布局的属性认识
马晓宁
Original
518 people have browsed it

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负责二维布局,两个布局都非常强大,但属性是真的很多。我是有点记不过来了。还是需要多多加强练习啊。

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