博客列表 >2019-12-30 CSS中Grid布局的属性实操 PHP培训十期

2019-12-30 CSS中Grid布局的属性实操 PHP培训十期

ys899
ys899原创
2020年01月06日 10:02:21587浏览

Grid 网格布局

1. Grid中的术语

  • 网格线(grid lines): 编号, 命名
  • 轨道(grid tracks): 二条线中间的空间, px, %, fr,auto
  • 单元格(grid cell): 四条网格线包起来的封闭空间
  • 网格区域(grid area): 多个单元格形成的矩形区域
  • 网格间距(grid gap): 行或列之间的间隙

2. Grid容器属性

2.1 创建显式网格轨道

  • grid-template-colums: 基于,定义网络线的名称与与轨道大小
  • grid-template-rows: 基于,定义网络线的名称与与轨道大小
  • grid-template-areas: 命名网格区域(配合gird项目的grid-area属性)

2.2 创建隐式网格轨道

  • grid-auto-flow: 网格中项目的流动方/排列方向(默认先行后列)
  • grid-auto-columns: 隐式网格的列宽
  • grid-auto-rows: 隐式网格的行高

2.3 创建轨道间距

  • grid-column-gap | grid-row-gap | grid-gap | gap: 行/列间隙

2.4 所有项目在网络容器中的对齐方式

  • justify-contens: 设置所有项目在网格容器中的水平对齐方式
  • align-content: 设置所有项目在网格容器中的垂直对齐方式
  • place-content: justify-contentalign-content的属性简写

2.5 所有项目在单元格中的对齐方式

  • justify-items: 设置所有项目在单元格内的水平对齐方式
  • align-items: 设置所有项目在单元格内的垂直对齐方式
  • place-items: justify-itemsalign-items的属性简写

3. Grid项目属性

3.1 将项目放置到单元格中

  • grid-column-start: 起始列编号
  • grid-column-end: 终止列编号
  • grid-column: 上面二属性缩写

  • grid-row-start: 起始行编号

  • grid-row-end: 终止行编号
  • grid-row: 上面二属性编写

3.2 将项目放置到网格区域中

  • grid-area: top/left/bottom/right: 将项目按逆时针顺序放置
  • grid-area: area-name: 将项目放置到已命名的网格区域中

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

  • justify-self: 设置项目在单元格中的水平对齐方式
  • align-self: 设置项目在单元格中的垂直对齐方式
  • place-self: justify-selfalign-self的属性简写
    ```CSS Code

    初识grid

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>网格区域填充与隐式网格</title>
    6. <style>
    7. * :not(body) {
    8. outline: 1px dashed red;
    9. }
    10. .container {
    11. width: 600px;
    12. font-size: 2rem;
    13. `display`: grid;
    14. /* 划分网格 */
    15. `grid-template-columns`: repeat(3, 1fr);
    16. `grid-template-rows`: repeat(3, 1fr);
    17. }
    18. .container > .item:first-of-type {
    19. /* 用网格线命名来快速填充: grid-area */
    20. /* 注意顺序是顺时针: 上左下右, 与传统的上右下左的逆时针是完全相反的, 也很记忆 */
    21. /* 上:第一行线,左:第一列线,下:第二行线,右:第三列线 */
    22. /* 简单记忆: 第一个项目占据网格中的1行1列到2行3列之间的区域空间 */
    23. `grid-area`: 1/1/2/3;
    24. background-color: lightgreen;
    25. }
    26. /* 新名称: 由浏览器自动根据项目数据创建的网格空间叫: 隐式网格,对应属性是grid-auto-rows/columns */
    27. .container {
    28. /* 行的方向是可扩展的, 所有行高是有效的 */
    29. `grid-auto-rows`: 150px;
    30. /* 列在沿水平扩展,空间是有限的,以显示网格的设置为准,这里设置不必设置,设置也是无效的 */
    31. /* `grid-auto-columns`: 100px; */
    32. /* 那么什么时候这个隐式的列宽会有效呢,在项目排列顺序发生变化时,即项目流动方向不再是默认的:先行后列,而先列后行,且在水平方向有剩余空间时 */
    33. /* `grid-auto-flow`: column; */
    34. }
    35. </style>
    36. </head>
    37. <body>
    38. <div class="container">
    39. <div class="item">1</div>
    40. <div class="item">2</div>
    41. <div class="item">3</div>
    42. <div class="item">4</div>
    43. <div class="item">5</div>
    44. </div>
    45. </body>
    46. </html>

    布局实操

    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>创建网格区域模板与项目填充</title>
    6. <style>
    7. * :not(body) {
    8. outline: 1px dashed red;
    9. }
    10. .container {
    11. width: 600px;
    12. height: 300px;
    13. font-size: 2rem;
    14. display: grid;
    15. /* 给每一个单元格命名 */
    16. `grid-template-areas`:
    17. 'a b c'
    18. 'd e f'
    19. 'g h i';
    20. }
    21. .container > .item:first-of-type {
    22. /* 项目命名: grid-area */
    23. grid-area: a;
    24. background-color: lightgreen;
    25. }
    26. /* 注意: 被命名的网格区域的位置, 与它在源码的书写无关 */
    27. .container > .item:nth-of-type(2) {
    28. /* 虽然它在html源码中是第二个子元素项目,但是在网格中却在第二行第二列 */
    29. grid-area: e;
    30. background-color: lightblue;
    31. }
    32. /* 单元格的合并: 相同名称的项目单元,会将所占空间进行合并,形成网络区域 */
    33. .container > .item:nth-of-type(7) {
    34. /* `grid-column-start`: 1; */
    35. /* `grid-column-end`: -1; */
    36. /* `grid-row-start`: 3; */
    37. /* `grid-row-end`: 4; */
    38. /* 以上项目填充与单元格合并操作可以简写 */
    39. /* `grid-column`: 1 / span 3; */
    40. /* 默认跨一行/列 */
    41. /* `grid-row`: 3; */
    42. /* 如果仍觉得代码太多,还可以用grid-area进一步简化 */
    43. /* 将项目填充到从3行1列开始到3行4列为止的网格区域内 */
    44. /* `grid-area` 3 / 1 / 3 / 4; */
    45. /* 也可直接指定跨越的列数 */
    46. grid-area: 3 / 1 / 3 / span 3;
    47. background-color: lightgray;
    48. }
    49. /* 但现在咱们有了一种更直观的设置方式: 命名区域 */
    50. /* 因为每一个单元格都有了一个名称, 只需要将需要合并的单元格, 起一个相同的名称即可 */
    51. /* 第一步: 将需要合并的单元格的名称, 设置为相同名称*/
    52. .container {
    53. grid-template-areas: 'a b c'
    54. 'd e f'
    55. 'g g g';
    56. }
    57. /* 第二步: 为需要占据一个或多个单元格的项目进行命名 */
    58. .container > .item:nth-of-type(7) {
    59. `grid-area`: g;
    60. background-color:wheat;
    61. }
    62. </style>
    63. </head>
    64. <body>
    65. <div class="container">
    66. <div class="item">1</div>
    67. <div class="item">2</div>
    68. <div class="item">3</div>
    69. <div class="item">4</div>
    70. <div class="item">5</div>
    71. <div class="item">6</div>
    72. <div class="item">7</div>
    73. </div>
    74. </body>
    75. </html>
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Grid网格所有项目的整体对齐方式</title>
    6. <style>
    7. * :not(body) {
    8. outline: 1px dashed red;
    9. }
    10. .container {
    11. width: 600px;
    12. height: 400px;
    13. font-size: 2rem;
    14. display: grid;
    15. /* 划分网格 */
    16. grid-template-columns: repeat(3, 100px);
    17. grid-template-rows: repeat(3, 80px);
    18. `grid-gap: 10px;`
    19. /* 1. 设置所有项目在网格容器中的对齐方式*/
    20. /* 水平方向 */
    21. /* 默认start */
    22. `justify-content`: start;
    23. justify-content: end;
    24. justify-content: center;
    25. /* 垂直方向 */
    26. /* 默认start */
    27. `align-content`: start;
    28. align-content: end;
    29. align-content: center;
    30. /* 简化 */
    31. /* place-content: 垂直 水平 */
    32. `place-content`: end end;
    33. /* 2. 设置所有项目在单元格内的对齐对齐 */
    34. /* 默认水平与垂直都是自动扩展/拉伸的 */
    35. /* 水平方向 */
    36. `justify-items`: stretch;
    37. justify-items: start;
    38. justify-items: end;
    39. justify-items: center;
    40. /* 垂直方向 */
    41. `align-items`: stretch;
    42. align-items: start;
    43. align-items: end;
    44. align-items: center;
    45. /* 简化 */
    46. /* place-content: 垂直 水平 */
    47. `place-items`: end center;
    48. }
    49. .container > .item {
    50. background-color: wheat;
    51. }
    52. </style>
    53. </head>
    54. <body>
    55. <div class="container">
    56. <div class="item">1</div>
    57. <div class="item">2</div>
    58. <div class="item">3</div>
    59. <div class="item">4</div>
    60. <div class="item">5</div>
    61. <div class="item">6</div>
    62. <div class="item">7</div>
    63. <div class="item">8</div>
    64. <div class="item">9</div>
    65. </div>
    66. </body>
    67. </html>
    1. <!DOCTYPE html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>模拟Bootstrap/layUI等框架的12列栅格布局</title>
    6. <style>
    7. .container {
    8. width: 1000px;
    9. margin: auto;
    10. }
    11. .row {
    12. display: grid;
    13. /* 平均等比分成12份 */
    14. 'grid-template-columns': repeat(12, 1fr);
    15. 'grid-column-gap': 8px;
    16. height: 50px;
    17. margin-bottom: 10px;
    18. background-color: #eeeeee;
    19. }
    20. .col-1 {
    21. /*起始列编号省略,则为auto, 由容器根据剩余空间自动分配*/
    22. /*grid-column-start: auto;*/
    23. 'grid-column-end': span 1;
    24. }
    25. .col-2 {
    26. grid-column-end: span 2;
    27. }
    28. .col-3 {
    29. grid-column-end: span 3;
    30. }
    31. .col-4 {
    32. grid-column-end: span 4;
    33. }
    34. .col-5 {
    35. grid-column-end: span 5;
    36. }
    37. .col-6 {
    38. grid-column-end: span 6;
    39. }
    40. .col-7 {
    41. grid-column-end: span 7;
    42. }
    43. .col-8 {
    44. grid-column-end: span 8;
    45. }
    46. .col-9 {
    47. grid-column-end: span 9;
    48. }
    49. .col-10 {
    50. grid-column-end: span 10;
    51. }
    52. .col-11 {
    53. grid-column-end: span 11;
    54. }
    55. .col-12 {
    56. grid-column-end: span 12;
    57. }
    58. .item {
    59. background-color: lightcyan;
    60. outline: 1px dashed red;;
    61. }
    62. </style>
    63. </head>
    64. <body>
    65. <div class="container">
    66. <!-- 二等份 -->
    67. <div class="row">
    68. <span class="item col-6">6列</span>
    69. <span class="item col-6">6列</span>
    70. </div>
    71. <!-- 三等份 -->
    72. <div class="row">
    73. <span class="item col-4">4列</span>
    74. <span class="item col-4">4列</span>
    75. <span class="item col-4">4列</span>
    76. </div>
    77. <!-- 三列 -->
    78. <div class="row">
    79. <span class="item col-2">2列</span>
    80. <span class="item col-8">8列</span>
    81. <span class="item col-2">2列</span>
    82. </div>
    83. <!-- 未占满 -->
    84. <div class="row">
    85. <span class="item col-3">3列</span>
    86. <span class="item col-3">3列</span>
    87. </div>
    88. <!-- 12列 -->
    89. <div class="row">
    90. <div class="item col-1">1列</div>
    91. <div class="item col-1">1列</div>
    92. <div class="item col-1">1列</div>
    93. <div class="item col-1">1列</div>
    94. <div class="item col-1">1列</div>
    95. <div class="item col-1">1列</div>
    96. <div class="item col-1">1列</div>
    97. <div class="item col-1">1列</div>
    98. <div class="item col-1">1列</div>
    99. <div class="item col-1">1列</div>
    100. <div class="item col-1">1列</div>
    101. <div class="item col-1">1列</div>
    102. </div>
    103. </div>
    104. </body>
    105. </html>

    心得体会

    Grid提供了类似table的布局技术,在处理复杂页面结合flex发挥更好的效果。

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