Blogger Information
Blog 70
fans 1
comment 0
visits 53071
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
grid项目对齐属性|实例演示-组件布局-媒体查询
葡萄枝子
Original
1201 people have browsed it

grid项目对齐属性|实例演示-组件布局-媒体查询

  1. 将项目在网格单元和容器中对齐的相关属性全部实例演示;
  2. 快速实现php.cn首页主要组件的布局,并理解为什么?
  3. 理解grid的媒体查询与专业的媒体查询有什么区别?

1. 项目在网格单元和容器中的对齐属性

1.1 项目在网格单元中对齐

对齐需要 网格单元 中需要存在剩余空间

属性 描述
place-items 容器中所有项目在网格单元中的对齐
place-self 某个项目在网格单元(含网格区域)中的对齐

1.2 网格单元在网格容器中的对齐

对齐需要 网格容器 中存在剩余空间

属性 描述
place-content 网格单元在网格容器中的对齐方式

1.3 全部实例演示项目在网格单元和容器中的对齐

  • body 中一个container容器
  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>
  • style 中将container转grid容器
  1. /* grid 容器 */
  2. .container {
  3. /* 转grid容器 */
  4. display: grid;
  5. /* 3列2行 */
  6. grid-template-columns: repeat(3, 1fr);
  7. grid-template-rows: repeat(2, 5em);
  8. /* 行列轨道间距 */
  9. gap: .5em;
  10. /* 隐式轨道行高,与显式轨道相同 */
  11. grid-auto-rows: 5em;
  12. }
  13. /* grid 项目 */
  14. .container>.item {
  15. background-color: lightcyan;
  16. border: 1px solid gray;
  17. padding: .5em;
  18. /* 设置宽度和高度,为项目在网格单元中腾出剩余空间 */
  19. width: 3em;
  20. height: 1.5em;
  21. }

1.3.1 place-items 项目在网格单元中的对齐

对齐的意义需要 网格单元 中存在剩余空间

  1. /* place-items 项目在单元格中的对齐 */
  2. .container {
  3. /* 默认值,垂直居上,水平居左 */
  4. place-items: initial;
  5. place-items: auto;
  6. place-items: unset;
  7. /* 拉伸(取消项目固定尺寸,生效) */
  8. place-items: stretch;
  9. /* 垂直水平都居中 */
  10. place-items: center;
  11. /* 继承初始值,垂直居上,水平居左 */
  12. place-items: inherit;
  13. /* 垂直居上,水平居左 */
  14. place-items: start auto;
  15. /* 垂直居上,水平正常居左(取消项目固定尺寸则拉伸) */
  16. place-items: start normal;
  17. /* 垂直居上,水平居右 */
  18. place-items: start end;
  19. /* 垂直居下,水平居左 */
  20. place-items: end start;
  21. }

项目在网格单元中的对齐

1.3.2 place-self 某个项目在网格单元中的对齐

网格单元,可以指某个单元格,也可以是多个单元格组成的网格区域

  • 1.3.2.1 place-self 某个项目在 单元格 中的对齐
  1. /* place-self 某个项目在单元格中的对齐 */
  2. .container>.item:nth-of-type(2) {
  3. /* 项目2在网格单元中,垂直居上,水平居右 */
  4. place-self: start end;
  5. }

某个项目在单元格中的对齐

  • 1.3.2.2 place-self 某个项目在 网格区域 中的对齐
  1. /* place-self 某个项目在网格区域中的对齐 */
  2. .container>.item:nth-of-type(2) {
  3. /* 项目2在跨两行两列,在网格区域中 */
  4. grid-area: span 2 / span 2;
  5. /* 项目2在网格区域中垂直水平都居中 */
  6. place-self: center;
  7. }

某个项目在网格区域中的对齐

1.3.3 place-content 网格单元在容器中的对齐

对齐的意义需要在 网格容器 中存在剩余空间

  • 容器中为垂直和水平两个方向腾出剩余空间
  1. /* place-content 网格单元在容器中的对齐 */
  2. .container {
  3. border: 1px solid gray;
  4. /* 定义高度和宽度,为容器腾出剩余空间 */
  5. /* 定义高度,垂直方向腾出剩余空间 */
  6. height: 25em;
  7. width: 25em;
  8. /* 更改为3个列宽为6em,水平方向腾出剩余空间 */
  9. grid-template-columns: repeat(3, 6em);
  10. }

腾出剩余空间

  • 1.3.3.1 网格单元作为整体在容器中的对齐
  1. /* place-content 网格单元作为整体在容器中对齐 */
  2. .container {
  3. /* 水平垂直都居中 */
  4. place-content: center;
  5. /* 继承初始值,垂直居上,水平居左 */
  6. place-content: inherit;
  7. /* 垂直居上,水平居左 */
  8. place-content: start auto;
  9. /* 垂直居上,水平正常居左(取消项目固定尺寸则拉伸) */
  10. place-content: start normal;
  11. /* 垂直居上,水平居右 */
  12. place-content: start end;
  13. /* 垂直居下,水平居左 */
  14. place-content: end start;
  15. }

网格单元作为整体在容器中对齐

  • 1.3.3.2 网格单元之间在容器中的对齐
  1. /* place-content 网格单元之间在容器中的对齐 */
  2. .container {
  3. /* 网格单元之间垂直方向两端对齐,水平方向分散对齐 */
  4. place-content: space-between space-around;
  5. /* 网格单元之间垂直方向两端对齐,水平方向平均对齐 */
  6. place-content: space-between space-evenly;
  7. }

网格单元之间在容器中的对齐

2. 快速实现php.cn首页主要组件的布局,并理解为什么?

2.1 基本架构

  • 页眉顶部菜单 header
    • 12列布局
  • 中间主体 main
    • 2列3行布局,第1列跨两行
    • 广告条1列布局
    • 头条开始3列布局
    • 3列2行布局,第2列和第3列跨两行
    • 词典分类2列2行布局
    • 入门精品课程5列4行布局,标题跨5列,然后第一个项目跨2行
    • 进阶学习,同上一条
    • 资源下载2列2行布局,第2行第1列分2列3行(最后一行跨两列)布局,第2行第2列分2列3行布局
    • 手册大全5列4行布局,第1列第2项目跨3行
    • 友情链接l列2行布局
  • 页脚 footer
    • 2列布局

2.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>php.cn首页主要组件的布局</title>
  7. <link rel="stylesheet" href="static/css/php-cn.css">
  8. </head>
  9. <body>
  10. <!-- 页眉 -->
  11. <header>
  12. <div class="logo">Logo</div>
  13. <div class="topmenu">顶部导航菜单</div>
  14. <div class="bulletin">公告图标</div>
  15. <div class="user-avatar">用户图像</div>
  16. </header>
  17. <!-- 主体 -->
  18. <main>
  19. <!-- 顶部导航2列3行布局,第1列跨两行 -->
  20. <div class="main-top">
  21. <!-- 左侧菜单列表 -->
  22. <ul class="menus-left">
  23. <li class="menu-left">菜单1</li>
  24. <li class="menu-left">菜单2</li>
  25. <li class="menu-left">菜单3</li>
  26. <li class="menu-left">菜单4</li>
  27. <li class="menu-left">菜单5</li>
  28. <li class="menu-left">菜单6</li>
  29. <li class="menu-left">菜单7</li>
  30. <li class="menu-left">菜单8</li>
  31. </ul>
  32. <!-- 顶部菜单 -->
  33. <ul class="menus-top">
  34. <li class="menu-top">菜单1</li>
  35. <li class="menu-top">菜单2</li>
  36. <li class="menu-top">菜单3</li>
  37. <li class="menu-top">菜单4</li>
  38. <li class="menu-top">菜单5</li>
  39. <li class="menu-top">菜单6</li>
  40. <li class="menu-top">菜单7</li>
  41. <li class="menu-search">搜索框</li>
  42. </ul>
  43. <div class="slider">轮播图</div>
  44. <!-- 底部4个图片 -->
  45. <ul class="course">
  46. <li>图1</li>
  47. <li>图2</li>
  48. <li>图3</li>
  49. <li>图4</li>
  50. </ul>
  51. </div>
  52. <!-- 广告条1列布局 -->
  53. <div class="main-banner">顶部通栏广告</div>
  54. <!-- 头条3列布局 -->
  55. <div class="message">
  56. <!-- 左侧头条 -->
  57. <div class="news">
  58. <h2>头条</h2>
  59. <ul class="news-list">
  60. <li class="news-item">消息1</li>
  61. <li class="news-item">消息2</li>
  62. <li class="news-item">消息3</li>
  63. <li class="news-item">消息4</li>
  64. <li class="news-item">消息5</li>
  65. <li class="news-item">消息6</li>
  66. <li class="news-item">消息7</li>
  67. <li class="news-item">消息8</li>
  68. <li class="news-item">消息9</li>
  69. <li class="news-item">消息10</li>
  70. <li class="news-item">消息11</li>
  71. <li class="news-item">消息12</li>
  72. </ul>
  73. </div>
  74. <!-- 中间课程 -->
  75. <div class="courses">
  76. <h2>最新课程</h2>
  77. <ul class="courses-list">
  78. <li class="courses-item">课程1</li>
  79. <li class="courses-item">课程2</li>
  80. <li class="courses-item">课程3</li>
  81. <li class="courses-item">课程4</li>
  82. <li class="courses-item">课程5</li>
  83. <li class="courses-item">课程6</li>
  84. </ul>
  85. </div>
  86. <!-- 右侧手册 -->
  87. <div class="books">
  88. <h2>常用手册</h2>
  89. <ul class="books-list">
  90. <li class="books-item">手册1</li>
  91. <li class="books-item">手册2</li>
  92. <li class="books-item">手册3</li>
  93. <li class="books-item">手册4</li>
  94. <li class="books-item">手册5</li>
  95. <li class="books-item">手册6</li>
  96. </ul>
  97. </div>
  98. </div>
  99. <!-- 3列2行布局,第2列和第3列跨两行 -->
  100. <!-- 词典分类2列2行布局 -->
  101. <!-- 入门精品课程5列4行布局,标题跨5列,然后第一个项目跨2行 -->
  102. <!-- 进阶学习,同上一条 -->
  103. <!-- 资源下载2列2行布局,第2行第1列分2列3行(最后一行跨两列)布局,第2行第2列分2列3行布局 -->
  104. <!-- 手册大全5列4行布局,第1列第2项目跨3行 -->
  105. <!-- 友情链接l列2行布局 -->
  106. </main>
  107. <!-- 页脚 footer -->
  108. <footer>
  109. <div class="footer-left">footer-left</div>
  110. <div class="footer-right">footer-right</div>
  111. </footer>
  112. </body>
  113. </html>
  • 引入的外部css样式为
  1. /* 初始化 */
  2. * {
  3. margin: 0;
  4. padding: 0;
  5. box-sizing: border-box;
  6. }
  7. li {
  8. list-style: none;
  9. }
  10. a {
  11. text-decoration: none;
  12. }
  13. /* 测试 */
  14. body * {
  15. border: 1px solid grey;
  16. }
  17. /* 页眉顶部菜单 header */
  18. header {
  19. width: 100%;
  20. height: 6em;
  21. background-color: black;
  22. display: grid;
  23. /* 4列布局,Logo + 导航菜单 + 公告 + 头像 */
  24. grid-template-columns: 200px 1fr 80px 120px;
  25. /* 网格单元居中 */
  26. place-content: center;
  27. }
  28. header > div {
  29. color: lightgray
  30. }
  31. header > div > .topmenu {
  32. /* 顶部导航菜单垂直居中,水平居左 */
  33. place-self: auto start;
  34. }
  35. /* 中间主体 main */
  36. main {
  37. width: 1200px;
  38. /* 上下间距1em,水平居中 */
  39. margin: 2em auto;
  40. }
  41. /* 顶部导航2列3行布局,第1列跨两行 */
  42. main > .main-top {
  43. display: grid;
  44. height: 300px;
  45. grid-template-columns: 200px 1fr;
  46. grid-template-rows: 5em 1fr 50px;
  47. border-radius: 1em;
  48. }
  49. /* 左侧菜单列表 */
  50. main > .main-top > .menus-left {
  51. /* 左侧菜单跨3列 */
  52. grid-area: span 3;
  53. display: grid;
  54. grid-template-rows: repeat(8, 1fr);
  55. padding-left: 20px;
  56. /* 垂直居中,水平居左 */
  57. place-items: center start;
  58. }
  59. /* 顶部菜单 */
  60. main > .main-top > .menus-top {
  61. display: grid;
  62. grid-template-columns: repeat(7, 80px) 1fr;
  63. place-items: center;
  64. }
  65. /* 轮播图 */
  66. main > .main-top > .slider {
  67. text-align: center;
  68. width: 100%;
  69. height: 100%;
  70. }
  71. /* 课程 */
  72. main > .main-top > .course {
  73. display: grid;
  74. grid-template-columns: repeat(4, 1fr);
  75. place-items: center;
  76. }
  77. /* 广告条1列布局 */
  78. main > .main-banner {
  79. margin-top: 20px;
  80. border-radius: .5em;
  81. height: 90px;
  82. text-align: center;
  83. line-height: 90px;
  84. }
  85. /* 头条3列布局 */
  86. main > .message {
  87. margin-top: 20px;
  88. border-radius: .5em;
  89. display: grid;
  90. grid-template-columns: 300px 1fr 250px;
  91. gap: .5em;
  92. }
  93. /* 标题字号 */
  94. main > .message h2 {
  95. font-size: 1em;
  96. font-weight: normal;
  97. height: 35px;
  98. padding: 5px 10px 0 30px;
  99. margin-bottom: 15px;
  100. border-bottom: 1px solid #ddd;
  101. }
  102. /* 左侧头条 */
  103. main > .message > .news > .news-list {
  104. display: grid;
  105. height: 350px;
  106. grid-template-rows: repeat(12, 1fr);
  107. padding-left: 10px;
  108. place-items: center left;
  109. }
  110. /* 中间课程 */
  111. main > .message > .courses > .courses-list {
  112. display: grid;
  113. height: 350px;
  114. grid-template-columns: repeat(3, 1fr);
  115. grid-template-rows: repeat(2, 1fr);
  116. gap: 1em;
  117. place-items: center;
  118. }
  119. /* 右边手册 */
  120. main > .message > .books > .books-list {
  121. display: grid;
  122. height: 350px;
  123. grid-template-rows: repeat(6, 1fr);
  124. place-items: center left;
  125. padding-left: .5em;
  126. }
  127. /* 3列2行布局,第2列和第3列跨两行 */
  128. /* 词典分类2列2行布局 */
  129. /* 入门精品课程5列4行布局,标题跨5列,然后第一个项目跨2行 */
  130. /* 进阶学习,同上一条 */
  131. /* 资源下载2列2行布局,第2行第1列分2列3行(最后一行跨两列)布局,第2行第2列分2列3行布局 */
  132. /* 手册大全5列4行布局,第1列第2项目跨3行 */
  133. /* 友情链接l列2行布局 */
  134. /* 页脚 footer */
  135. footer {
  136. width: 100%;
  137. height: 8em;
  138. background-color:#393D49;
  139. display: grid;
  140. /* 2列布局 */
  141. grid-template-columns: auto 500px;
  142. }
  143. footer > div {
  144. color: ghostwhite;
  145. }
  • 实验主要组件的布局附图

实验主要组件的布局附图

2.3 理解为什么?

  • 方便元素转 grid 网格布局和嵌套布局

3. 理解grid的媒体查询与专业的媒体查询有什么区别?

  • grid的媒体查询,根据grid容器的宽度,除以最小最大值之间的项目宽度,获得auto-fit的值,垂直方向绘制auto-fit个列宽的网格,水平方向也类似绘制,空轨折叠,不占据容器空间。

  • 专业的媒体查询,不是依据某元素的父级容器宽度计算,以屏幕宽度查询。

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