博客列表 >Grid利用fr实现栅格12列布局

Grid利用fr实现栅格12列布局

G
G原创
2020年10月31日 14:10:061060浏览

栅格12列布局

原理 、 实现

  • 栅格布局原理:栅格布局其实就是把一个区域等分为多少部分,利用fr单位来实现等分,某个区域来进行调用几分之几。
    假设我将一个区域等分为12份。然后左边我想要10份 右侧我想要2份,就可以利用栅格布局来快速实现这个功能。

    接下来我用一张图片来说明一下原理

  • 实现

    这里我们为了实现栅格布局,要用到相对单位fr。(不一定适用fr来实现栅格布局)

fr:剩余空间分配数。fr单位被用于在一系列长度值中分配剩余空间,如果多个已指定了多个部分,则剩下的空间根据各自的数字按比例分配。
简单来说fr就是讲剩余空间等比例划分,然后将剩余空间按照一定的比例分给容器。

  1. grid-template-columns: repeat(11, 1fr);

可以看到除了1之外的剩余空间被等比例分成11份。每份1fr

实现栅格布局:

  1. 因为容器container下面设置了一个主类row,所以将容器container转化为grid容器。

    1. .container {
    2. display: grid;
    3. min-width: 90vw;
    4. gap: 0.5em;
    5. }

  2. 再将容器container下的类row转为一个grid容器,使内部的item类为每一个网格项目。

    1. .container > .row {
    2. /* 将容器container转为grid */
    3. display: grid;
    4. /* 创建网格模版:并利用fr等分 */
    5. grid-template-columns: repeat(12, 1fr);
    6. /* 考虑到页眉和页脚各占1行,主体和侧边1行,所以还要划分出三行出来 */
    7. gap: 0.5em;
    8. min-height: 3em;
    9. }

  3. 创建每个栅格的类样式,每一个栅格能跨越几行排列。

    1. /* 设置每个可以引用的变量,共12个 */
    2. .col-12 {
    3. /* 跨12列 */
    4. grid-column: span 12;
    5. }
    6. .col-11 {
    7. /* 跨11列 */
    8. grid-column: span 11;
    9. }
    10. .col-10 {
    11. /* 跨10列 */
    12. grid-column: span 10;
    13. }
    14. .col-9 {
    15. /* 跨9列 */
    16. grid-column: span 9;
    17. }
    18. .col-8 {
    19. /* 跨8列 */
    20. grid-column: span 8;
    21. }
    22. .col-7 {
    23. /* 跨7列 */
    24. grid-column: span 7;
    25. }
    26. .col-6 {
    27. /* 跨6列 */
    28. grid-column: span 6;
    29. }
    30. .col-5 {
    31. /* 跨5列 */
    32. grid-column: span 5;
    33. }
    34. .col-4 {
    35. /* 跨4列 */
    36. grid-column: span 4;
    37. }
    38. .col-3 {
    39. /* 跨3列 */
    40. grid-column: span 3;
    41. }
    42. .col-2 {
    43. /* 跨2列 */
    44. grid-column: span 2;
    45. }
    46. .col-1 {
    47. /* 跨1列 */
    48. grid-column: span 1;
    49. }
  4. 在项目之中引用这些变量。买一个容器需要几份,就引用对应的样式。

    这里我想设置一下headerfooter占满顶部一行(12列)
    中间主体main需要10份 aside侧边需要2份。

代码实现:

  1. <body>
  2. <div class="container">
  3. <!-- 页眉 -->
  4. <div class="row">
  5. <div class="item col-12">header</div>
  6. </div>
  7. <!-- 主体 -->
  8. <div class="row">
  9. <div class="item col-10">main</div>
  10. <div class="item -col-2">right-aside</div>
  11. </div>
  12. <!-- 页脚 -->
  13. <div class="row">
  14. <div class="item col-12">footer</div>
  15. </div>
  16. </div>
  17. </body>

  1. 设置主体区域高度,使页面更美观。

    1. .container .row:nth-of-type(2) {
    2. min-height: 65vh;
    3. }

  2. 最终效果

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