首页 > 其他 > 详细

Grid 布局小心得

时间:2020-07-26 23:38:38      阅读:88      评论:0      收藏:0      [点我收藏+]

1. grid 布局 跟 flex 布局的区别:

1. flex 布局: flex 布局是相对轴线布局,即 flex-direction: column/row 来定义元素在容器里面的排布方向
2. grid 布局: grid 布局是通过定义容器里面的行数跟列数来实现网格布局

2. grid 布局的使用

  a. grid 容器

    1. 通过 display: grid / inline-grid 来定义一个网格容器

    2. 通过 grid-template-rows / grid-template-columns 来设置行数/列数

    3. 通过 grid-template-areas 来设置网格区域

    4. 通过 gap 来定义行间距跟列间距,是 row-gap 跟 column-gap 合并简写,类似于 padding

    5. 通过 grid-auto-flow 来决定是先行后列还是先列后行,默认是 row,如果是column 则先按列排序,类似 flex 布局的 flex-direction

 

技术分享图片
 1 .grid {
 2     display: grid;
 3     // 可使用值: 具体像素,百分比,fr片段, auto, minmax(min, max)
 4     grid-template-rows: 100px 100px 100px;
 5     grid-template-rows: 100px 50px 100px;
 6     /* 
 7         声明网格区域,对应的需要在网格元素里面定义 grid-area (也可用作grid-row-start、grid-column-start、grid-row-end、grid-column-end的合并简写形式)
 8     如果需要创建空白元素,使用小数点.
 9     可联合媒体查询实现响应式布局
10     @media screen and (max-width: 640px) {
11         .container {
12             grid-template-areas: 
13                 "m m m m m m h h h h h h"
14                 "c c c c c c c c c c c c"
15                 "f f f f f f f f f f f f";
16         }
17     }
18     */
19     grid-template-areas:
20         "h h h h h h h h h h h h"
21         "m m c c c c c c c c c c"
22         "f f f f f f f f f f f f";
23     }    
View Code

  b. 网格项(即grid容器里面的元素)

    1. 通过 grid-column 指定元素所占的列。是 grid-column-start 跟 grid-column-end 的合并简写模式: grid-column: 1/13 === grid-column-start: 1; grid-column-end: 13 即该元素从第一列网格线占到第13列网格线,也就是占据12列网格

    2. 通过 grid-row 指定元素所占的行。是 grid-row-start 跟 grid-row-end 的合并简写模式,效果同 grid-column

    3. 通过 grid-area 指定匹配grid容器对应的区域,也可以是grid-row-start、grid-column-start、grid-row-end、grid-column-end的合并简写形式

 

最后贴上简单版的html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <style type="text/css">
        .wrapper {
            display: grid;
            /*grid-template-columns: 100px 100px 100px;*/
            /*grid-template-columns: 30% 35% 35%;*/
            /*grid-template-columns: repeat(2, 1fr, [col1-start]) 1.5fr;*/
            grid-template-columns: 1fr repeat(2, 2fr);
            grid-template-rows: 50px 50px 50px;
        }
        .item1 {
            /*grid-column是按网格线计算,不是按网格,即3个网格应该有4条网格线*/
            /*grid-column-start: 1;
            grid-column-end: 3;*/
            grid-column: 1/3;
        }
        .item3 {
            grid-row-start: 2;
            grid-row-end: 4;
        }
        .item4 {
            grid-column-start: 2;
            grid-column-end: 4;
        }

        .container {
            display: grid;
            grid-template-columns: repeat(12, 1fr);
            grid-template-rows: 50px 350px 50px;
            gap: 5px;
            text-align: center;
            /* 
                声明网格区域,对应的需要在网格元素里面定义 grid-area 
                如果需要创建空白元素,使用小数点.
            */
            grid-template-areas:
        "h h h h h h h h h h h h"
        "m m c c c c c c c c c c"
        "f f f f f f f f f f f f";
        }
        @media screen and (max-width: 640px) {
            .container {
                grid-template-areas: 
                    "m m m m m m h h h h h h"
                    "c c c c c c c c c c c c"
                    "f f f f f f f f f f f f";
            }
        }
        .header {
            background-color: #bbf1bb;
            /* 
                指定该元素从第一列网格线占到第13列网格线,也就是占据12列网格 
                指定该元素从第一行网格线占到第2行网格线,也就是占据1行网格 
            */
            /*grid-column: 1/13;
                grid-row: 1/2;*/
            /* 
                也可以通过grid容器里面定义 grid-template-areas 网格区域,
                然后对应的元素声明所属网格
            */
            /*grid-area: h;*/
            grid-area: 1/1/2/13;
        }
        .menu {
            background-color: #fde886;
            /*grid-column: 1/3;
            grid-row: 2/3;*/
            /*grid-area: m;*/
            grid-area: 2/1/3/3;
        }
        .content {
            background-color: #8afcf9;
            /*grid-column: 3/13;
            grid-row: 2/3;*/
            /*grid-area: c;*/
            grid-area: 2/3/3/13;
        }
        .footer {
            background-color: #dfb8f8;
            /*grid-column: 1/13; 
            grid-row: 3/4;*/
            /*grid-area: f;*/
            grid-area: 3/1/4/13;
        }
    </style>
</head>
<body>
    <!-- <div class="wrapper">
        <div class="item1" style="background-color: #cde1d5; text-align: center;">1</div>
        <div style="background-color: #457d84; text-align: center;">2</div>
        <div class="item3" style="background-color: #9d829a; text-align: center;">3</div>
        <div class="item4" style="background-color: #8b8d8b; text-align: center;">4</div>
        <div style="background-color: #6c7c5d; text-align: center;">5</div>
        <div style="background-color: #95997c; text-align: center;">6</div>
    </div> -->
    <div class="container">
      <div class="header">HEADER</div>
      <div class="menu">MENU</div>
      <div class="content">CONTENT</div>
      <div class="footer">FOOTER</div>
    </div>
</body>
</html>

 

Grid 布局小心得

原文:https://www.cnblogs.com/l-c-blog/p/13382068.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!