当前位置:   article > 正文

网格(grid)布局_grid-template-rows

grid-template-rows

目录

概述

使用网格布局水平垂直居中盒子

基本使用

1. 定义一个网格

 2. 操控列

 3. 操控行

4. 网格间隙

 5. 基于线号放置元素

 6. 使用 grid-template-areas 属性放置元素

 7. 控制元素如何排列

总结


概述

网格是由一系列水平(row 行)及垂直的线构(column 列)成的一种布局模式,  也就是说网格布局主要是操控行和列,面试呢常常会问到如何使一个盒子水平垂直居中是css中的一种布局方式,网格布局就是答案之一。

使用网格布局水平垂直居中盒子

  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>Document</title>
  8. <style>
  9. .box {
  10. width: 100px;
  11. height: 100px;
  12. background: skyblue;
  13. }
  14. body {
  15. display: grid;
  16. justify-content: center;
  17. align-items: center;
  18. height: 100vh;
  19. margin: 0;
  20. }
  21. .box {
  22. grid-area: box;
  23. }
  24. </style>
  25. </head>
  26. <body>
  27. <div class="box"></div>
  28. </body>
  29. </html>

基本使用

1. 定义一个网格

设置元素的 display 值为 grid 或者 inline-grid,仅设置display为grid,而不控制行和列是没有任何效果的。其子元素依旧按照从上至下的默认布局进行排列。

  1. ............
  2. <head>
  3. .............
  4. <style>
  5. .container {
  6. display: grid;
  7. }
  8. .item {
  9. background-color: orange;
  10. word-break: break-all;
  11. }
  12. </style>
  13. </head>
  14. <body>
  15. <div class="container">
  16. <div class="item">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>
  17. <div class="item">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</div>
  18. <div class="item">ccccccccccccccccccccccccccccccccccccccccccccccc</div>
  19. <div class="item">dddddddddddddddddddddddddddddddddddddddddd</div>
  20. <div class="item">eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee</div>
  21. <div class="item">fffffffffffffffffffffffffffffffffffffffff</div>
  22. <div class="item">gggggggggggggggggggggggggggggggggggggg</div>
  23. <div class="item">hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh</div>
  24. <div class="item">iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii</div>
  25. </body>
  26. ..............

 2. 操控列

通过设置 grid-template-columns,大致分为三种形式

  • 不同列宽:grid-template-columns: 100px 200px 100px;  一个一个设置每一列的宽度,几个宽度即为几列

  • 相同列宽:grid-template-columns: repeat(3, 200px); 对于列宽相等的情况可以使用repeat函数,参数6为6列,200px为列宽

  • 自适应列宽:grid-template-columns: 1fr 1fr 1fr;  将父元素的空间瓜分为3份,每个子元素占据一份

 

 

  1. .container {
  2. display: grid;
  3. /* 设置网格的列宽 */
  4. grid-template-columns: 100px 200px 100px;
  5. grid-template-columns: repeat(3, 200px);
  6. grid-template-columns: 1fr 1fr 1fr;
  7. }

 3. 操控行

通过设置 grid-template-row,基本同上

  • 不同行宽:grid-template-row: 100px 200px 100px

  • 相同行宽:grid-template-row: repeat(3, 200px)

  • 自适应列宽:grid-template-row: 1fr 1fr 1fr;由于我们没给父盒子加高度,所以父盒子的高度是由其子元素撑开的,故1fr即子元素累计高度的1/3,需要注意的是在没有设置子元素高度的时候,每个子元素的高度以最高的(内容最多的)那个子元素为准

 

 

  1. .container {
  2. display: grid;
  3. grid-template-columns: 1fr 1fr 1fr;
  4. /* 设置网格的行宽 */
  5. grid-template-rows: 100px 200px 100px;
  6. grid-template-rows: repeat(3, 100px);
  7. grid-template-rows: 1fr 1fr 1fr;
  8. }

4. 网格间隙

grid-gap: 20px(垂直方向) 10px(水平方向); 用于设置每个网格之间的间隙,是 grid-column-gap, grid-row-gap的简写形式

  1. .container {
  2. display: grid;
  3. /* 设置网格的列宽 */
  4. grid-template-columns: repeat(3, 150px);
  5. grid-template-rows: 1fr 1fr 1fr;
  6. grid-gap: 20px 10px;
  7. }

 5. 基于线号放置元素

单单控制行和列往往是满足不了需求的。我们可以通过线号手动设置某个子元素的位置。

  • grid-column: grid-column-start/ grid-column-end;
  • grid-row: grid-column-end/ grid-row-end; 
  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>Document</title>
  8. <style>
  9. .container {
  10. display: grid;
  11. grid-template-columns: repeat(3, 150px);
  12. grid-template-rows: 1fr 1fr 1fr 1fr 1fr;
  13. grid-gap: 20px 10px;
  14. }
  15. .item {
  16. background-color: orange;
  17. word-break: break-all;
  18. }
  19. .start {
  20. grid-column: 1/4;
  21. grid-row: 1/2;
  22. }
  23. .end {
  24. grid-column: 1/4;
  25. grid-row: 4/5;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div class="container">
  31. <div class="item start">我是header</div>
  32. <div class="item">bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb</div>
  33. <div class="item">ccccccccccccccccccccccccccccccccccccccccccccccc</div>
  34. <div class="item">dddddddddddddddddddddddddddddddddddddddddd</div>
  35. <div class="item">eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee</div>
  36. <div class="item">fffffffffffffffffffffffffffffffffffffffff</div>
  37. <div class="item">gggggggggggggggggggggggggggggggggggggg</div>
  38. <div class="item end">我是footer</div>
  39. </div>
  40. </body>
  41. </html>

 6. 使用 grid-template-areas 属性放置元素

grid-template-areas 属性用于设置区域

给将要放置在区域内的元素设置 grid-area: areaname

  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>Document</title>
  8. <style>
  9. #page {
  10. display: grid;
  11. grid-template-columns: 150px 1fr; 设置网格为两列,第一列150px,第二列自适应
  12. grid-template-rows: 100px 500px 100px; 设置网格为三行,第一行150px,第二列500px,...
  13. grid-template-areas: "header header"
  14. // 给这三行两列设置区域,第一行第一列是header,第一行第二列是header
  15. "nav main"
  16. // 第二行第一列是nav,第二行第二列是main
  17. "footer footer";
  18. // 第三行第一列是footer,第三行第二列是footer
  19. grid-gap: 20px 10px;
  20. }
  21. #page>header {
  22. grid-area: header;
  23. background-color: #8ca0ff;
  24. }
  25. #page>nav {
  26. grid-area: nav;
  27. background-color: #ffa08c;
  28. }
  29. #page>main {
  30. grid-area: main;
  31. background-color: #ffff64;
  32. }
  33. #page>footer {
  34. grid-area: footer;
  35. background-color: #8cffa0;
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. <section id="page">
  41. <header>Header</header>
  42. <nav>Navigation</nav>
  43. <main>Main area</main>
  44. <footer>Footer</footer>
  45. </section>
  46. </body>
  47. </html>

 

 7. 控制元素如何排列

grid-auto-flow属性用于控制元素如何排列

  • row 逐行填充。

  • column 逐列填充

  • dense 填充空白

 

 

 可以看到 row 是从左至右逐行排列的,如果某个网格占据空间较大,可能会流白

column 是从上至下逐列排的

dense 可以填充留白的空间

总结

display: grid / inline-grid 开启网格布局

grid-template-column 控制列

grid-template-row 控制行

grid-gap 控制间隙

grid-column 控制元素占几列

grid-row 控制元素占几行

grid-template-area 设置网格区域 ,grid-area 设置元素占据哪个网格区域

grid-auto-flow 设置网格如何排列

详细信息查阅官网 网格布局 - CSS(层叠样式表) | MDN

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/295319
推荐阅读
相关标签
  

闽ICP备14008679号