博客列表 >实例演示Grid常用的容器与项目属性和仿写PHP中文网首页:最新课程片断

实例演示Grid常用的容器与项目属性和仿写PHP中文网首页:最新课程片断

茂林
茂林原创
2023年04月18日 22:50:13872浏览

1. Grid布局概念:网格布局或栅格布局,是二维布局,可以在水平和垂直方向上同时布局

  1. 容器:`display:grid/inline-grid`
  2. 项目:grid容器的子元素(仅限子元素,可以嵌套)
  3. 单元格:项目载体,多个单元格可构成`网格区域`
  4. 单元格或网格区域,对用户不可见,仅用于存放grid项目

2.Grid必知属性

2.1 容器属性

  1. display: grid: 容器类型(块或行内)
  2. grid-template-row/columns: 创建显式网格
  3. grid-auto-rows/columns: 创建隐式网格
  4. grid-auto-flow: 项目排列方向
  5. gap: 行列间隙
  6. place-content: 项目在容器中的排列方式
  7. place-items: 项目在单元格中的排列方式

2.2 项目属性

  1. grid-row/column: 某项目占据的网格区域
  2. grid-area: grid-row/column语法糖
  3. place-self: 某项目在单元格中的排列方式

3 实例演示Grid属性

  1. <body>
  2. <div class="container">
  3. <div class="item">item</div>
  4. </div>
  5. </body>
  6. <style>
  7. .container {
  8. width: 300px;
  9. height: 150px;
  10. /*转为grid网格容器 */
  11. display: grid;
  12. /* 使用显式网格容器分成3行3列 */
  13. /* grid-template-rows: 50px 50px 50px; */ /* 分成三行 */
  14. /* grid-template-columns: 100px 100px 100px; */ /* 分成三列 */
  15. /* 对相同的且相邻的值,可以用repeat简化 */
  16. /* grid-template-rows: repeat(3, 50px); */ /* 分成三行 */
  17. /* grid-template-columns: repeat(3, 100px); */ /* 分成三列 */
  18. /* 如宽度与高度等分,可单位fr 表示 比例单位fr */
  19. grid-template-rows: repeat(3, 1fr); /* 分成三行 */
  20. grid-template-columns: repeat(3, 1fr); /* 分成三列 */
  21. }
  22. .container > .item {
  23. background-color: bisque;
  24. /* 项目属性 grid-row/grid-column:项目占据的网格区域*/
  25. /* grid-row: 1/2; */ /* grid-row:行开始编号/行结束编号 */
  26. /* grid-column: 1/2; */ /* grid-column:列开始编号/列结束编号 */
  27. /* 一个项目至少要占据一个单元格,一个单元格,默认是跨越1行1列,可以简写 */
  28. /* grid-row: 2; */ /* 行开始编号 2,结束编号不写默认3 */
  29. /* grid-column: 2; */ /* 列开始编号 2,结束编号不写默认3 */
  30. /* grid-row: 1/3; */ /* grid-row:行开始编号/行结束编号 */
  31. /* grid-column: 1/3; */ /* grid-column:列开始编号/列结束编号 */
  32. /* 当跨越多个单元格时,开成一个矩形的空间,称为“网格区域” */
  33. /* grid-area: 2/2/4/4; *//* grid-area:行开始/列开始/行结束/列结束 */
  34. grid-area: 2/2 / span2/span2;/* span表示跨越的意思,span2 表示跨越2行或2列 */
  35. }

  1. <body>
  2. <div class="container">
  3. <div class="item">item1</div>
  4. <div class="item">item2</div>
  5. <div class="item">item3</div>
  6. <div class="item">item4</div>
  7. <div class="item add">item5</div>
  8. <div class="item">item6</div>
  9. <div class="item">item7</div>
  10. <div class="item">item8</div>
  11. <div class="item">item9</div>
  12. </div>
  13. <style>
  14. .container {
  15. width: 450px;
  16. height: 300px;
  17. /* 转为grid网格容器 */
  18. display: grid;
  19. border: 1px solid black;
  20. /* 创建3行3列的容器 */
  21. grid-template-columns: repeat(3, 120px); /* 3列 */
  22. grid-template-rows: repeat(3, 80px); /* 3行 */
  23. /* 容器项目的排列规则,默认是行优先row */
  24. grid-auto-flow: row;
  25. /* grid-auto-flow: column; */
  26. /* 2. 隐式网格 */
  27. /* 超出显式网格数量的项目,创建在隐式网格中(自动生成) */
  28. /* grid-auto-rows: 50px; */
  29. grid-auto-rows: 1fr;
  30. /*
  31. 1.项目在容器中的排列方式 (垂直方向与水平方向) place-content: 垂直的排列方式 水平的排列方式
  32. 2.排列前提:容器中必须存在 "剩余空间"
  33. 3.对齐本质:剩余空间,在"项目"之间的分配方案
  34. 4.剩余空间:Flex(主轴,交叉轴), Grid(容器,单元格)
  35. 5.值包含:start center end(对齐方式)
  36. space-between space-around space-evenly(剩余空间在项目之间的分配)
  37. */
  38. /* 默认方式 垂直与水平都是 start */
  39. place-content: start start;
  40. /* 垂直与水平方向的值相同,可以简写成一个 */
  41. place-content: start;
  42. /* 垂直居中,水平居右 */
  43. place-content: center end;
  44. /* 剩余空间在所有项目之间分配 */
  45. place-content: space-between space-around;
  46. place-content: space-between space-between;
  47. place-content: space-between;
  48. place-content: space-around;
  49. place-content: space-evenly;
  50. /* 项目在单元格的排列方式,值与项目在容器中的一样
  51. place-items:垂直方向 水平方向
  52. 值包含:start center end(对齐方式)
  53. space-between space-around space-evenly(剩余空间在项目之间的分配)
  54. */
  55. /* 垂直和水平方向 都居中 */
  56. place-items: center center;
  57. /* 双值相同,可简写成一个值 */
  58. place-items: center;
  59. /* 垂直末尾对齐,水平居中 */
  60. place-items: end center;
  61. }
  62. .container > .item {
  63. background-color: bisque;
  64. width: 100px;
  65. height: 60px;
  66. }
  67. .container > .item.add {
  68. background-color: aqua;
  69. position: relative;
  70. /* 某个项目的单独排列方法 */
  71. place-self: center;
  72. /* position: absolute;
  73. top: 0; */
  74. }
  75. </style>

排列方式

  1. <body>
  2. <div class="container">
  3. <div class="item">item1</div>
  4. <div class="item">item2</div>
  5. <div class="item">item3</div>
  6. <div class="item">item4</div>
  7. <div class="item">item5</div>
  8. <div class="item">item6</div>
  9. <div class="item">item7</div>
  10. <div class="item">item8</div>
  11. <div class="item">item9</div>
  12. </div>
  13. </body>
  14. <style>
  15. .container {
  16. width: 300px;
  17. height: 150px;
  18. /*转为grid网格容器 */
  19. display: grid;
  20. border: 1px solid black;
  21. padding: 5px;
  22. /* 如宽度与高度等分,可单位fr 表示 比例单位fr */
  23. grid-template-rows: repeat(3, 1fr); /* 分成三行 */
  24. grid-template-columns: repeat(3, 1fr); /* 分成三列 */
  25. /* gap: 行列间隙/轨道间距 */
  26. /* gap: 垂直方向 水平方向 */
  27. gap: 5px 5px;
  28. /* 双值一样,简写成1个值 */
  29. gap: 5px;
  30. }
  31. .container > .item {
  32. background-color: bisque;
  33. }

gap属性

4 仿写PHP中文网首页:最新课程片断

html代码

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  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>Grid布局作业-仿首页最新课程</title>
  8. <link rel="stylesheet" href="css/reset.css" />
  9. <link rel="stylesheet" href="css/base.css" />
  10. <link rel="stylesheet" href="css/font-icon.css" />
  11. </head>
  12. <body>
  13. <!-- New Course 整体看成1行2列 -->
  14. <div class="newcourse">
  15. <div class="top">
  16. <h2>最新课程</h2>
  17. <a href="">更多> </a>
  18. </div>
  19. <!-- ul 2行 5列 -->
  20. <div class="course">
  21. <ul class="list">
  22. <li class="item1">
  23. <a href="">
  24. <img src="/0209/img/midjourneyAI.png" alt="MidjourneyAI" />
  25. </a>
  26. <div class="detail">
  27. <span>初级</span>
  28. <a href="">Midjourney初级课程</a>
  29. </div>
  30. <div class="desc iconfont">
  31. <span>1234次学习</span>
  32. <span class="icon-shoucang"> 收藏</span>
  33. </div>
  34. </li>
  35. <li class="item2">
  36. <a href="">
  37. <img src="/0209/img/Midjourney2.png" alt="Midjourney10分钟创作" />
  38. </a>
  39. <div class="detail">
  40. <span>初级</span>
  41. <a href="">10分钟--Midjourney创作自己的漫画</a>
  42. </div>
  43. <div class="desc iconfont">
  44. <span>121次学习</span>
  45. <span class="icon-shoucang"> 收藏</span>
  46. </div>
  47. </li>
  48. <li class="item3">
  49. <a href="">
  50. <img
  51. src="/0209/img/Midjourney3.png"
  52. alt="Midjourney高手之路--关键词"
  53. />
  54. </a>
  55. <div class="detail">
  56. <span>初级</span>
  57. <a href="">Midjourney关键词系列整合</a>
  58. </div>
  59. <div class="desc iconfont">
  60. <span>1234次学习</span>
  61. <span class="icon-shoucang"> 收藏</span>
  62. </div>
  63. </li>
  64. <li class="item4">
  65. <a href="">
  66. <img src="/0209/img/AI4.png" alt="AI绘画简单上手" />
  67. </a>
  68. <div class="detail">
  69. <span>初级</span>
  70. <a href="">AI绘画教程</a>
  71. </div>
  72. <div class="desc iconfont">
  73. <span>1234次学习</span>
  74. <span class="icon-shoucang"> 收藏</span>
  75. </div>
  76. </li>
  77. <li class="item5">
  78. <a href="">
  79. <img src="/0209/img/Midjourney5.png" alt="Midjourney入门到精通" />
  80. </a>
  81. <div class="detail">
  82. <span>初级</span>
  83. <a href="">【Midjourney】入门到精通</a>
  84. </div>
  85. <div class="desc iconfont">
  86. <span>1234次学习</span>
  87. <span class="icon-shoucang"> 收藏</span>
  88. </div>
  89. </li>
  90. <li class="item6">
  91. <a href="">
  92. <img
  93. src="/0209/img/Midjourney6.png"
  94. alt="成为PHP架构师自制PHP框架"
  95. />
  96. </a>
  97. <div class="detail">
  98. <span>中级</span>
  99. <a href="">成为PHP架构师-自制PHP框架</a>
  100. </div>
  101. <div class="desc iconfont">
  102. <span>1234次学习</span>
  103. <span class="icon-shoucang"> 收藏</span>
  104. </div>
  105. </li>
  106. <li class="item7">
  107. <a href="">
  108. <img src="/0209/img/Gin7.png" alt="Gin框架实战开发课程" />
  109. </a>
  110. <div class="detail">
  111. <span>初级</span>
  112. <a href="">Go语言课程Gin框架实战</a>
  113. </div>
  114. <div class="desc iconfont">
  115. <span>1234次学习</span>
  116. <span class="icon-shoucang"> 收藏</span>
  117. </div>
  118. </li>
  119. <li class="item8">
  120. <a href="">
  121. <img src="/0209/img/Golang8.jpg" alt="Golang深入理解GPM模型" />
  122. </a>
  123. <div class="detail">
  124. <span>中级</span>
  125. <a href="">Golang深入理解GPM模型</a>
  126. </div>
  127. <div class="desc iconfont">
  128. <span>1234次学习</span>
  129. <span class="icon-shoucang"> 收藏</span>
  130. </div>
  131. </li>
  132. <li class="item9">
  133. <a href="">
  134. <img src="/0209/img/Golang9.jpg" alt="公益直播PHP你究竟想干啥" />
  135. </a>
  136. <div class="detail">
  137. <span>初级</span>
  138. <a href="">公益直播:PHP8,究竟有啥野心..!?</a>
  139. </div>
  140. <div class="desc iconfont">
  141. <span>1234次学习</span>
  142. <span class="icon-shoucang"> 收藏</span>
  143. </div>
  144. </li>
  145. <li class="item10">
  146. <a href="">
  147. <img src="/0209/img/linux10.jpg" alt="Linux运维小白入行详解" />
  148. </a>
  149. <div class="detail">
  150. <span>中级</span>
  151. <a href="">Linux运维基础课程【全程干货详解】 </a>
  152. </div>
  153. <div class="desc iconfont">
  154. <span>1234次学习</span>
  155. <span class="icon-shoucang"> 收藏</span>
  156. </div>
  157. </li>
  158. </ul>
  159. </div>
  160. </div>
  161. </body>
  162. </html>

css代码

  1. /* body背景色 */
  2. body {
  3. background-color: #f3f5f7;
  4. }
  5. /* 定义整个框架的大小与自动居中 */
  6. .newcourse {
  7. width: 1200px;
  8. margin-left: auto;
  9. margin-right: auto;
  10. overflow: hidden;
  11. position: relative;
  12. top: 20px;
  13. }
  14. /* 把top定义为弹性容器,项目两端对齐排列 */
  15. .top {
  16. display: flex;
  17. flex-flow: row nowrap;
  18. place-content: space-between;
  19. place-items: center;
  20. }
  21. /*设置"更多"样式 */
  22. .top a {
  23. background-color: #f0f1f4;
  24. width: 78px;
  25. height: 32px;
  26. text-align: center;
  27. border-radius: 100px;
  28. color: #999999;
  29. text-decoration: none;
  30. padding-top: 4px;
  31. }
  32. /* "更多" 鼠标悬停的样式*/
  33. .top a:hover {
  34. background-color: red;
  35. color: white;
  36. }
  37. /* list标签转为grid布局,将li放入2行5列的项目中 */
  38. .list {
  39. height: 530px;
  40. display: grid;
  41. grid-template-columns: repeat(5, 224px);
  42. grid-template-rows: repeat(2, 235px);
  43. gap: 15px;
  44. place-content: center space-between;
  45. }
  46. /* grid中的每个li项目转为flex布局 */
  47. .list li {
  48. display: flex;
  49. flex-flow: column nowrap; /* 主轴方向(垂直)和 主轴不换行 */
  50. place-content: space-between; /* 项目在主轴上的排列方式 (两端对齐)*/
  51. border-radius: 6px; /* 边框4个圆角 */
  52. background-color: white; /* 背景色 */
  53. }
  54. /* flex 第1项目充满flex盒子 */
  55. li.list a {
  56. flex: auto;
  57. }
  58. /* flex第一个项目中-图片的样式 */
  59. a img {
  60. width: 224px;
  61. height: 134px;
  62. border-top-right-radius: 6px;
  63. border-top-left-radius: 6px;
  64. }
  65. /* flex第二个项目中span标签的样式 */
  66. .detail span {
  67. font-size: 12px;
  68. padding: 2px 4px;
  69. color: #298afd;
  70. text-align: center;
  71. background-color: #e0e8fc;
  72. }
  73. /* flex第二个项目中a标签的样式 */
  74. .detail a {
  75. font-size: 14px;
  76. text-decoration: none;
  77. color: #333333;
  78. }
  79. /* flex第二个项目中a标签的悬停样式 */
  80. .detail a:hover {
  81. color: red;
  82. cursor: pointer;
  83. }
  84. /* flex第2个项目的样式 */
  85. .detail {
  86. margin: 10px;
  87. width: 204px;
  88. height: 21px;
  89. }
  90. /* flex第3个项目的样式 */
  91. .desc {
  92. position: relative;
  93. margin: 10px;
  94. width: 204px;
  95. height: 21px;
  96. font-size: 12px;
  97. color: #b7b7b7;
  98. }
  99. /* flex第3个项目span1的样式 */
  100. .desc span:first-child {
  101. position: absolute;
  102. left: 0;
  103. }
  104. /* flex第3个项目span2的样式 */
  105. .desc span:first-child + * {
  106. position: absolute;
  107. right: 0;
  108. cursor: pointer;
  109. }
  110. /* 中级课程span样式 */
  111. .item6 > .detail > span,
  112. .item8 > .detail > span,
  113. .item10 > .detail > span {
  114. background-color: #fce7e0;
  115. color: lightcoral;
  116. }

结果
仿写首页最新课程片断

总结:
上课老师讲的没怎么听懂,基础不扎实,反复观看上课视频,动手慢慢消化;
图片点击动态没有实现

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