博客列表 >grid布局之二

grid布局之二

培(信仰)
培(信仰)原创
2021年01月07日 00:26:32517浏览

grid 布局 之 对齐

项目在网格单元中的对齐方式

默认项目在网格单元中拉伸显示
只有项目在网格单元中存在剩余空间的时候,对齐才有效果

  1. <div class="container">
  2. <div class="item">item1</div>
  3. <div class="item">item2</div>
  4. <div class="item">item3</div>
  5. <div class="item">item4</div>
  6. <div class="item">item5</div>
  7. <div class="item">item6</div>
  8. <div class="item">item7</div>
  9. <div class="item">item8</div>
  10. <div class="item">item9</div>
  11. </div>
  1. .container{
  2. border:1px solid #000;
  3. padding:0.5em;
  4. display:grid;
  5. grid-template-columns:repeat(3,1fr);
  6. grid-template-rows: repeat(2,5em);
  7. gap:0.5em;
  8. grid-auto-rows: 5em;
  9. }
  10. .container > .item {
  11. border:1px solid #000;
  12. background-color: skyblue;
  13. padding:0.5em;
  14. width: 5em;
  15. height: 2em;
  16. }
  17. /* 1. 设置容器中的“所有项目”在网格单元中的对齐方式 */
  18. /* place-items: 垂直方向 水平方向; */
  19. /* place-items: [start/end/center] [start/end/center]*/
  20. .container {
  21. /* 垂直居上,水平居中 */
  22. place-items: start center;
  23. /* 垂直水平居中 */
  24. place-items: center center;
  25. /* 当第二个值与第一个值相同时,可以省第二个值 */
  26. place-items: center;
  27. /* normal 可以当成默认值*/
  28. /* place-items: normal center; */
  29. /* auto 居然是居中的,老师说与normal同义。 */
  30. place-items: auto center;
  31. /* 以下用的情况并不多 */
  32. /* 继承 */
  33. place-items: inherit;
  34. /* 初始化 */
  35. /* place-items: initial; */
  36. /* unset 如果有父级就用父级的inherit(继承)值,如果没有父级,就用当前的初始值 */
  37. /* place-items: unset; */
  38. /* 拉伸,取消项目的固定尺寸才可以看到效果 */
  39. /* place-items: stretch; */
  40. }
  41. /* 2. 设置容器中的“某一个项目”在网格单元中的对齐方式 */
  42. /* 这个属性必须用在项目上:place-self */
  43. /* place-self: [start end center] [start end center]*/
  44. .container > .item:nth-of-type(5) {
  45. background-color: wheat;
  46. place-self: end;
  47. }
  48. /* 网格单元有两种表现形式,单元格,网格区域(多个单元格组成) */
  49. .container > .item:first-of-type{
  50. background-color: green;
  51. /* grid-area: 1 / 1 / 3 / 3; */
  52. grid-area: span 2 / span 2;
  53. place-self: center;
  54. place-self: end;
  55. }

项目在网格容器中的对齐方式

  1. .container{
  2. height: 25em;
  3. border:1px solid #000;
  4. padding:0.5em;
  5. display:grid;
  6. grid-template-columns:repeat(3,10em);
  7. grid-template-rows: repeat(2,5em);
  8. gap:0.5em;
  9. grid-auto-rows: 5em;
  10. /* 默认值 */
  11. /* 1. 将所有项目作为一个整体在容器中对齐 */
  12. /* place-content: 垂直方向 水平方向 */
  13. /* place-content: [start/end/center] [start/end/center]; */
  14. /* place-content: start end; */
  15. /* place-content: center; */
  16. /* 2. 将所有项目打散成独立个体在容器中的设置对齐 */
  17. /* 两端对齐 */
  18. place-content: space-between space-between;
  19. /* 垂直方向分散对齐 */
  20. place-content: space-around space-between;
  21. /* 垂直分散对齐,水平平均对齐 */
  22. place-content: space-around space-evenly;
  23. }
  24. .container > .item {
  25. border:1px solid #000;
  26. background-color: skyblue;
  27. padding:0.5em;
  28. }

使用命名式的网格区域来重构圣杯布局

  1. <body>
  2. <header>
  3. header
  4. </header>
  5. <main>main</main>
  6. <aside >aside</aside>
  7. <aside >asider</aside>
  8. <footer>footer</footer>
  9. </body>
  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. }
  6. body * {
  7. border: 1px solid #000;
  8. }
  9. body {
  10. /* 圣杯布局:grid实现,两边固定,中间自适应,主体优先渲染 */
  11. display: grid;
  12. grid-template-columns: 15em minmax(50vw, auto) 15em;
  13. grid-template-rows: 3em minmax(80vh, auto) 3em;
  14. /* 设置命名网格区域在轨道中的显示位置 */
  15. /* grid-template-areas:
  16. 'header header header'
  17. 'left main right'
  18. 'footer footer footer'; */
  19. /* 可以简化代码 */
  20. /* 去除left 和right的命名 */
  21. grid-template-areas:
  22. 'header header header'
  23. '. main .'
  24. 'footer footer footer';
  25. gap: 0.5em
  26. }
  27. header {
  28. grid-area: header;
  29. }
  30. footer {
  31. grid-area: footer;
  32. }
  33. main {
  34. grid-area: main;
  35. }
  36. /* aside.left {
  37. grid-area: left;
  38. }
  39. aside.right {
  40. grid-area: right;
  41. } */

上手演练一番:
仿一个PHP中文网首页部分结构布局

  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>仿php.cn首页的部分组件</title>
  7. <link rel="stylesheet" href="style.css">
  8. </head>
  9. <body>
  10. <header>
  11. <nav class="header-nav">
  12. <ul>
  13. <li><a href="">PHP 中文网</a></li>
  14. <li><a href="">首页</a></li>
  15. <li><a href="">视频教程</a></li>
  16. <li><a href="">入门教程</a></li>
  17. <li><a href="">社区问答</a></li>
  18. <li><a href="">技术文章</a></li>
  19. <li><a href="">资源下载</a></li>
  20. <li><a href="">编程词典</a></li>
  21. <li><a href="">工具下载</a></li>
  22. <li><a href="">PHP培训</a></li>
  23. <li><a href="">消息</a></li>
  24. <li><a href="">登录</a></li>
  25. </ul>
  26. </nav>
  27. </header>
  28. <main>
  29. <div class="main-top">
  30. <nav class="main-top-left">
  31. <ul>
  32. <li><a href="">php开发</a></li>
  33. <li><a href="">前端开发</a></li>
  34. <li><a href="">服务端开发</a></li>
  35. <li><a href="">移动开发</a></li>
  36. <li><a href="">数据库</a></li>
  37. <li><a href="">服务器运维&下载</a></li>
  38. <li><a href="">在线工具箱</a></li>
  39. <li><a href="">常用类库</a></li>
  40. </ul>
  41. </nav>
  42. <ul class="main-top-top">
  43. <li><a href="">PHP头条</a></li>
  44. <li><a href="">孤独九剑</a></li>
  45. <li><a href="">学习路线</a></li>
  46. <li><a href="">在线工具</a></li>
  47. <li><a href="">趣味课堂</a></li>
  48. <li><a href="">社区问答</a></li>
  49. <li><a href="">课程直播</a></li>
  50. <li><input type="text" placeholder="输入搜素内容"></li>
  51. </ul>
  52. <div class="main-top-slideshow">
  53. <a href=""><img src="https://www.php.cn/static/images/index_banner1.png" alt=""></a>
  54. </div>
  55. <div class="main-top-bottom">
  56. <a href=""><img src="https://www.php.cn/static/images/index_yunv.jpg" alt=""></a>
  57. <a href=""><img src="https://www.php.cn/static/images/index_php_item2_.png?1" alt=""></a>
  58. <a href=""><img src="https://www.php.cn/static/images/index_php_item3.jpg?1" alt=""></a>
  59. <a href=""><img src="https://www.php.cn/static/images/index_php_new4.jpg?1" alt=""></a>
  60. </div>
  61. </div>
  62. <div class="main-courses">
  63. <h3>&lt;/&gt;php入门精品课程&lt;/&gt;</h3>
  64. <ul class="main-courses-list">
  65. <li><a href=""><img src="https://www.php.cn/static/images/index_learn_first.jpg" alt=""></a></li>
  66. <li><a href=""><img src="https://img.php.cn/upload/course/000/000/001/5b63c72c61569244.png" alt=""></a></li>
  67. <li><a href=""><img src="https://img.php.cn/upload/course/000/126/153/5aa23f0ded921649.jpg" alt=""></a></li>
  68. <li><a href=""><img src="https://img.php.cn/upload/course/000/126/153/5ab346fc62ce4221.jpg" alt=""></a></li>
  69. <li><a href=""><img src="https://img.php.cn/upload/course/000/126/153/5acc118f11d6b969.jpg" alt=""></a></li>
  70. <li><a href=""><img src="https://img.php.cn/upload/course/000/000/001/5d1c6e0d2b744633.jpg" alt=""></a></li>
  71. <li><a href=""><img src="https://img.php.cn/upload/course/000/001/120/5a9fb97057b15707.jpeg" alt=""></a></li>
  72. <li><a href=""><img src="https://img.php.cn/upload/course/000/000/001/5d24019911a24370.jpg" alt=""></a></li>
  73. <li><a href=""><img src="https://img.php.cn/upload/course/000/000/003/5a699f1b2da2b398.jpg" alt=""></a></li>
  74. <li><a href=""><img src="https://img.php.cn/upload/course/000/000/001/5cecd27a4348b582.jpg" alt=""></a></li>
  75. <li><a href=""><img src="https://img.php.cn/upload/course/000/000/001/5d1c6dfc9eb09885.jpg" alt=""></a></li>
  76. <li><a href=""><img src="https://img.php.cn/upload/course/000/000/003/5a13c87351613730.jpg" alt=""></a></li>
  77. <li><a href=""><img src="https://img.php.cn/upload/course/000/171/829/5b19ef2990649817.jpg" alt=""></a></li>
  78. <li><a href=""><img src="https://img.php.cn/upload/course/000/000/001/5d240300be85b731.jpg" alt=""></a></li>
  79. </ul>
  80. </div>
  81. </main>
  82. <footer>
  83. footer
  84. </footer>
  85. </body>
  86. </html>

外部链接css文件

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. }
  6. body {
  7. background-color: #f3f5f7;
  8. }
  9. li {
  10. list-style: none;
  11. }
  12. a {
  13. text-decoration: none;
  14. color: #444444;
  15. }
  16. header {
  17. background-color: #000000;
  18. height: 60px;
  19. /* text-align: center; */
  20. margin-bottom: 30px;
  21. }
  22. footer {
  23. height: 160px;
  24. color: #eee;
  25. background-color: #444;
  26. }
  27. header>nav>ul>li {
  28. vertical-align: middle;
  29. }
  30. header>nav>ul>li>a {
  31. color: white;
  32. line-height: 60px;
  33. font-size: 1.25rem;
  34. display: block;
  35. min-width: 9rem;
  36. padding: .25em;
  37. }
  38. header>nav>ul {
  39. display: flex;
  40. justify-content: space-around;
  41. }
  42. main>.main-top {
  43. width: 1200px;
  44. height: 510px;
  45. display: grid;
  46. grid-template-columns: 216px 1fr;
  47. grid-template-rows: 60px 1fr 120px;
  48. margin: auto;
  49. }
  50. /* 左侧导航区 */
  51. main>.main-top>.main-top-left {
  52. grid-area: span 3;
  53. background-color: #2b333b;
  54. border-radius: 10px 0 0 10px;
  55. }
  56. main>.main-top>.main-top-left>ul {
  57. display: flex;
  58. height: 510px;
  59. flex-flow: column;
  60. justify-content: space-between;
  61. padding: 1em;
  62. }
  63. main>.main-top>.main-top-left>ul>li>a {
  64. color: white;
  65. font-size: 1.25em;
  66. }
  67. /* 顶部导航区 */
  68. main>.main-top>ul.main-top-top {
  69. background-color: wheat;
  70. display: grid;
  71. grid-template-columns: repeat(8, 83px) 1fr;
  72. place-items: center;
  73. /* font-size: 1em; */
  74. border-radius: 0 10px 0 0;
  75. }
  76. .main-top>ul.main-top-top>li:last-of-type {
  77. place-self: center start;
  78. padding-left: 30px;
  79. }
  80. .main-top>.main-top-slideshow img{
  81. width: 988px;
  82. }
  83. /* 课程推荐 */
  84. main>.main-top>.main-top-bottom {
  85. background-color: #fff;
  86. padding: 10px;
  87. display: grid;
  88. grid-template-columns: repeat(4, 1fr);
  89. border-radius: 0 0 10px 0;
  90. }
  91. main>.main-top>.main-top-bottom>* {
  92. background-color: #fff;
  93. }
  94. /* 课程列表 */
  95. main>.main-courses {
  96. width: 1200px;
  97. height: 646px;
  98. padding: 15px;
  99. background-color: #fff;
  100. display: grid;
  101. grid-template-rows: 50px 1fr;
  102. margin: 30px auto;
  103. border-radius: 10px;
  104. }
  105. main>.main-courses h3 {
  106. color: #444;
  107. text-align: center;
  108. margin-bottom: 30px;
  109. }
  110. main>.main-courses>.main-courses-list {
  111. display: grid;
  112. grid-template-columns: repeat(5, 1fr);
  113. grid-template-rows: repeat(3, 1fr);
  114. gap: 20px;
  115. }
  116. main>.main-courses>.main-courses-list>li:first-of-type {
  117. grid-area: span 2;
  118. }
  119. main>.main-courses>.main-courses-list>li:first-of-type img {
  120. width: 217px;
  121. height: 364px;
  122. }
  123. main>.main-courses>.main-courses-list>li>a>img {
  124. width: 217px;
  125. height: 124px;
  126. }

效果图
效果图
总结:知识点太多,归纳起来三板斧希望能开辟一番天地
display: grid;
grid-template-columns: repeat(5, 1fr);
grid-template-rows: repeat(3, 1fr);
gap: 20px;

grid-area: span 2;

place-content: [start/end/center] [start/end/center];
place-content: [space-between/space-around/space-around] [space-between/space-around/space-around];
place-items: center;
place-self: center start;

布局的时候一定要考虑撑开容器的因素。

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