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

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

葡萄枝子
葡萄枝子原创
2020年12月27日 00:02:261202浏览

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个列宽的网格,水平方向也类似绘制,空轨折叠,不占据容器空间。

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

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