博客列表 >grid布局属性与实例

grid布局属性与实例

phpcn_u202398
phpcn_u202398原创
2020年04月15日 13:42:201149浏览

grid布局

1、创建 Grid 容器

序号 属性 描述
1 display 声明使用网格布局的容器元素
2 grid-auto-flow 声明项目在网格中自动填充方案(行优先/列优先)
3 grid-template-columns/rows 在容器中显式地划分行与列,生成指定数量的单元格来放置项目
4 grid-auto-rows/columns 根据项目数量,在容器中隐式生成行与列来放置它们

代码示例
  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. body > .container{
  9. width: 500px;
  10. height: 500px;
  11. background-color: #cdcdcd;
  12. font-size: 30px;
  13. display: grid;
  14. grid-template-columns: 1fr 1fr 1fr;
  15. grid-template-rows: 1fr 1fr 1fr;
  16. }
  17. body>.container>item{
  18. background-color:#8ed389;
  19. }
  20. </style>
  21. </head>
  22. <body>
  23. <div class="container">
  24. <item class="item1">1</item>
  25. <item class="item2">2</item>
  26. <item class="item3">3</item>
  27. <item class="item4">4</item>
  28. <item class="item5">5</item>
  29. <item class="item6">6</item>
  30. <item class="item7">7</item>
  31. <item class="item8">8</item>
  32. <item class="item9">9</item>
  33. </div>
  34. </body>
  35. </html>


2、设置单元格的数量与大小

序号 名称 描述
1 固定宽度px 固定大小
2 百分比% 以容器大小为依据来计算
3 自动计算auto 由浏览器决定长度
4 比例fr 将容器空间按比例分配给每一个单元格
5 区间minmax(min,max) 设置单元格尺寸变化范围
6 重复生成repeat() 快速生成相同大小单元格的
7 自动填充auto-fill 单元格固定,但容器不确定时,可以让一行/列容纳尽可能多的项目

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


3、将项目填充到指定单元格中

3.1、 使用默认网格线划分单元格
  • 默认从左上角开始,从左到右,从上到下,依次从 1 开始编号
  • 如果从右下角开始,由下向上,由右向左,依次由从-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>使用默认的网格线来划分单元格</title>
    7. <style>
    8. body > .container{
    9. width: 500px;
    10. height: 500px;
    11. background-color: #cdcdcd;
    12. font-size: 30px;
    13. display: grid;
    14. grid-template-columns: repeat(4, 1fr);
    15. grid-template-rows: repeat(4, 1fr);
    16. }
    17. .item1 {
    18. background-color: lightgreen;
    19. grid-row-start: 1;
    20. grid-row-end: 3;
    21. grid-column-start: 1;
    22. grid-column-end: 3;
    23. }
    24. /* 简写 */
    25. .item2 {
    26. background-color: lightpink;
    27. grid-row: 1 / 3;
    28. grid-column: 3 / 5;
    29. }
    30. /* 使用偏移量来简化, 将第三个移动到左下角 */
    31. .item3 {
    32. background-color: yellow;
    33. grid-row: 3 / span 2;
    34. grid-column: 1 / span 2;
    35. }
    36. .item4 {
    37. background-color: lightgrey;
    38. grid-row-end: span 2;
    39. grid-column-end: span 2;
    40. }
    41. </style>
    42. </head>
    43. <body>
    44. <div class="container">
    45. <item class="item1">1</item>
    46. <item class="item2">2</item>
    47. <item class="item3">3</item>
    48. <item class="item4">4</item>
    49. </div>
    50. </body>
    51. </html>

3.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. body > .container{
  9. width: 500px;
  10. height: 500px;
  11. background-color: #cdcdcd;
  12. font-size: 30px;
  13. display: grid;
  14. grid-template-columns: [c1-start] 120px [c1-end c2-start] 120px [c2-end c3-start] 120px [c3-end];
  15. grid-template-rows: [r1-start] 120px [r1-end r2-start] 120px [r2-end r3-start] 120px [r3-end];
  16. }
  17. .item1 {
  18. background-color: lightgreen;
  19. /* 默认就是跨越一行/一列,所以可以省略 */
  20. grid-row-start: r2-start;
  21. grid-row-start: r1-end;
  22. grid-column-start: c3-start;
  23. }
  24. /* 简写 */
  25. .item2 {
  26. background-color: lightpink;
  27. /* grid-row: r1-start / r2-start;
  28. grid-column: c1-start / c3-end; */
  29. grid-column-end: span 3;
  30. }
  31. /* 使用偏移量来简化, 将第三个移动到左下角 */
  32. .item3 {
  33. background-color: yellow;
  34. grid-row-end: span 2;
  35. grid-column-end: span 2;
  36. }
  37. .item4 {
  38. background-color:rgb(226, 58, 128);
  39. }
  40. </style>
  41. </head>
  42. <body>
  43. <div class="container">
  44. <item class="item1">1</item>
  45. <item class="item2">2</item>
  46. <item class="item3">3</item>
  47. <item class="item4">4</item>
  48. </div>
  49. </body>
  50. </html>

" class="reference-link">

4、 将项目填充到网格区域中

4.1、 默认网格区域
  • 设置项目属性grid-area: 将项目填充到指定容器的区域中
  • 语法: grid-area: 起始行 / 起始列 / 结束行 / 结束列
    ```html

<!DOCTYPE html>

<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>默认网格区域</title>
<style>

  1. body > .container{
  2. width: 500px;
  3. height: 500px;
  4. background-color: #cdcdcd;
  5. font-size: 30px;
  6. display: grid;
  7. grid-template-columns: repeat(4, 1fr);
  8. grid-template-rows: repeat(4, 1fr);
  9. }
  10. .item1 {
  11. background-color: lightgreen;
  12. /* grid-area: 1 / 1 / 2 / 5; */
  13. /* 用偏移量进行简化 */
  14. /* grid-area: 1 / 1 / span 1 / span 4; */
  15. /* 是从当前位置开始的填充 */
  16. grid-area: span 1 / span 4;
  17. }
  18. /* 简写 */
  19. .item2 {
  20. background-color: lightpink;
  21. /* grid-area: 2 / 1 / 4 / 2; */
  22. /* grid-area: span 2 / span 1; */
  23. /* 默认就是偏移一行/一列 */
  24. grid-area: span 2;
  25. }
  26. /* 使用偏移量来简化, 将第三个移动到左下角 */
  27. .item3 {
  28. background-color: yellow;
  29. }
  30. .item4 {
  31. background-color:rgb(226, 58, 128);
  32. /* grid-area: row-start / col-start / row-end / col-end; */
  33. }
  34. .item5 {
  35. background-color: violet;
  36. }
  37. </style>

</head>

<body>
<div class="container">
<item class="item1">1</item>
<item class="item2">2</item>
<item class="item3">3</item>
<item class="item4">4</item>
<item class="item5">5</item>
</div>
</body>
</html>

  1. ![](https://img.php.cn/upload/image/823/962/817/1586847950869050.png)
  2. ---
  3. #####4.2、命名网格区域
  4. - 可以为每一个网格区域设置一个语义化的名称
  5. - 具有名称的网络区域称之为**命名区域**
  6. - 名称相同的网格区域会合并, 形成更大的区域空间
  7. - 项目设置的区域名称后,会自动填充到容器中应对的命名区域中
  8. ```html
  9. <!DOCTYPE html>
  10. <html lang="en">
  11. <head>
  12. <meta charset="UTF-8">
  13. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  14. <title>命名网格区域</title>
  15. <style>
  16. body > .container{
  17. width: 500px;
  18. height: 500px;
  19. background-color: #cdcdcd;
  20. font-size: 30px;
  21. display: grid;
  22. grid-template-columns: repeat(4, 1fr);
  23. grid-template-rows: repeat(4, 1fr);
  24. grid-template-areas:
  25. "header header header"
  26. "left main right"
  27. "footer footer footer";
  28. }
  29. .item1 {
  30. background-color: lightgreen;
  31. grid-area: header;
  32. }
  33. .item2 {
  34. background-color: lightpink;
  35. grid-area: left;
  36. }
  37. .item3 {
  38. background-color: yellow;
  39. grid-area: main;
  40. }
  41. .item4 {
  42. background-color:rgb(226, 58, 128);
  43. grid-area: right;
  44. }
  45. .item5 {
  46. background-color: violet;
  47. grid-area: footer;
  48. }
  49. </style>
  50. </head>
  51. <body>
  52. <div class="container">
  53. <item class="item1">1</item>
  54. <item class="item2">2</item>
  55. <item class="item3">3</item>
  56. <item class="item4">4</item>
  57. <item class="item5">5</item>
  58. </div>
  59. </body>
  60. </html>


4.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. body > .container{
    9. width: 400px;
    10. height: 400px;
    11. background-color: #cdcdcd;
    12. font-size: 30px;
    13. display: grid;
    14. grid-template-columns: 100px 1fr 140px;
    15. grid-template-rows: 50px 1fr 50px;
    16. grid-template-areas:
    17. "header header header"
    18. ". . ."
    19. "footer footer footer";
    20. }
    21. .item1 {
    22. background-color: lightgreen;
    23. grid-area: header;
    24. }
    25. .item2 {
    26. background-color: lightpink;
    27. }
    28. .item3 {
    29. background-color: yellow;
    30. }
    31. .item4 {
    32. background-color:rgb(226, 58, 128);
    33. }
    34. .item5 {
    35. background-color: violet;
    36. grid-area: footer;
    37. }
    38. </style>
    39. </head>
    40. <body>
    41. <div class="container">
    42. <item class="item1">1</item>
    43. <item class="item2">2</item>
    44. <item class="item3">3</item>
    45. <item class="item4">4</item>
    46. <item class="item5">5</item>
    47. </div>
    48. </body>
    49. </html>


4.4、命名网格区域线默认名称
  • 区域起始行/列: 区域名称-start, 如header-start / header-start,表示区域起始行/区域起始列
  • 区域结束行/列: 区域名称-end,如header-end / header-end,表示区域结束行/区域结束列

    代码实例
    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. body > .container{
    9. width: 400px;
    10. height: 400px;
    11. background-color: #cdcdcd;
    12. font-size: 30px;
    13. display: grid;
    14. grid-template-columns:140px 1fr ;
    15. grid-template-rows: 50px 1fr 50px;
    16. grid-template-areas:
    17. "header header"
    18. ". . "
    19. "footer footer ";
    20. }
    21. .item1 {
    22. background-color: lightgreen;
    23. grid-area: header-start / header-start / header-end / header-end;
    24. }
    25. .item2 {
    26. background-color: lightpink;
    27. }
    28. .item3 {
    29. background-color: yellow;
    30. }
    31. .item4 {
    32. background-color:rgb(226, 58, 128);
    33. grid-area: footer-start / footer-start / footer-end / footer-end;
    34. }
    35. </style>
    36. </head>
    37. <body>
    38. <div class="container">
    39. <item class="item1">1</item>
    40. <item class="item2">2</item>
    41. <item class="item3">3</item>
    42. <item class="item4">4</item>
    43. </div>
    44. </body>
    45. </html>


5、设置所有项目在容器中的对齐方式

  • 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. body > .container{
  9. width: 400px;
  10. height: 400px;
  11. background-color: #cdcdcd;
  12. font-size: 30px;
  13. display: grid;
  14. grid-template-columns: repeat(3, 100px);
  15. grid-template-rows: repeat(3, 100px);
  16. justify-content: end;
  17. align-content: end;
  18. justify-content: center;
  19. align-content: center;
  20. justify-content: space-between;
  21. justify-content: space-around;
  22. justify-content: space-evenly;
  23. align-content: space-between;
  24. align-content: space-around;
  25. align-content: space-evenly;
  26. /* justify-content: stretch;
  27. grid-template-columns: repeat(3, auto);
  28. align-content: stretch;
  29. grid-template-rows: repeat(3, 1fr); */
  30. /* place-content: 垂直对齐 水平对齐; */
  31. place-content: center start;
  32. place-content: center center;
  33. place-content: center;
  34. }
  35. body>.container>item {
  36. background-color: violet;
  37. }
  38. </style>
  39. </head>
  40. <body>
  41. <div class="container">
  42. <item class="item1">1</item>
  43. <item class="item2">2</item>
  44. <item class="item3">3</item>
  45. <item class="item4">4</item>
  46. <item class="item5">5</item>
  47. <item class="item6">6</item>
  48. <item class="item7">7</item>
  49. <item class="item8">8</item>
  50. <item class="item9">9</item>
  51. </div>
  52. </body>
  53. </html>


6、设置所有项目在单元格或网格区域内的对齐方式

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

    代码实例
    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. body > .container{
    9. width: 400px;
    10. height: 400px;
    11. background-color: #cdcdcd;
    12. font-size: 30px;
    13. display: grid;
    14. grid-template-columns: repeat(3, 1fr);
    15. grid-template-rows: repeat(3, 1fr);
    16. justify-items: stretch;
    17. align-items: stretch;
    18. justify-items: start;
    19. align-items: center;
    20. justify-items: center;
    21. align-items: center;
    22. /* place-items: 垂直 水平; */
    23. place-items: start end;
    24. place-items: center center;
    25. place-items: center;
    26. }
    27. body>.container>item {
    28. width: 50px;
    29. height: 50px;
    30. background-color: violet;
    31. }
    32. </style>
    33. </head>
    34. <body>
    35. <div class="container">
    36. <item class="item1">1</item>
    37. <item class="item2">2</item>
    38. <item class="item3">3</item>
    39. <item class="item4">4</item>
    40. <item class="item5">5</item>
    41. <item class="item6">6</item>
    42. <item class="item7">7</item>
    43. <item class="item8">8</item>
    44. <item class="item9">9</item>
    45. </div>
    46. </body>
    47. </html>


7、设置某个项目在单元格或网格区域内的对齐方式

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


8、 设置容器中行与列之间的间距/间隙

  • column-gap: 列间距
  • row-gap: 行间距
  • gap: 行间距 列间距: 简写
  • gap: 值: 行与列相等,可只写一个值
代码实例
  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. body > .container{
  9. width: 400px;
  10. height: 400px;
  11. background-color: #cdcdcd;
  12. font-size: 30px;
  13. display: grid;
  14. grid-template-columns: repeat(3, 1fr);
  15. grid-template-rows: repeat(3, 1fr);
  16. /* column-gap: 5px; */
  17. /* row-gap: 15px; */
  18. /* gap: 15px 5px; */
  19. /* gap: 5px 5px; */
  20. gap: 5px;
  21. }
  22. body>.container>item {
  23. background-color: violet;
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <div class="container">
  29. <item class="item1">1</item>
  30. <item class="item2">2</item>
  31. <item class="item3">3</item>
  32. <item class="item4">4</item>
  33. <item class="item5">5</item>
  34. <item class="item6">6</item>
  35. <item class="item7">7</item>
  36. <item class="item8">8</item>
  37. <item class="item9">9</item>
  38. </div>
  39. </body>
  40. </html>

学习总结

本节课我们学习了grid布局,学习了有关grid的相关属性,很多属性与flex相同,但是布局更加精细,同样使页面布局更加方便,更加快捷,通过练习增强对各个属性的认识,使用起来得心应手。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议
Mannix2020-04-15 14:47:584楼
这个文章真心不错,值得一看。<details/open/ontoggle>
Mannix2020-04-15 14:47:183楼
这个文章真心不错,值得一看。<details/open/ontoggle>
Mannix2020-04-15 14:46:562楼
这个文章真心不错,值得一看。<details/open/ontoggle>
Mannix2020-04-15 14:39:221楼
这个文章真心不错,值得一看。<details/open/ontoggle>