四、(3)网格布局+媒体查询

(1)网格布局

<!DOCTYPE html>
<head>
    <meta charset="utf-8" name="viewport"  content="width=device-width,initial-scale=1.0">
    <title>网格布局</title>
    <style>
        *{
            box-sizing: border-box;
        }
        body{ margin: 0;padding: 0;}
        
        .grid-container{
            background-color: #2196F3;padding: 10px;height: 400px;/*搭配7做测试用*/

            display: grid;  /*3(搭配1用)、设置display的属性值为grid,使得这个div成为网格布局容器grid-container。
                                                                1>display 属性设置为 inline-grid,以生成行内的网格容器。
                                                                2>网格容器的所有直接子元素将自动成为网格项目grid-item。
                                                                3>网格项的垂直线(和边框重合)被称为列: 网格列grid-column。
                                                                4>网格项的水平线(和边框重合)被称为行: 网隔行grid-row。
                                                                5>每列/行之间的间隔称为间隙: 网格间隙的简写grid-gap(grid-row-gap grid-column-gap)。
                                                                6>列之间的线(和边框不重合)称为列线(column lines)
                                                                7>行之间的线(和边框不重合)称为行线(row lines)。
                                                                */
            grid-template-columns: auto auto auto auto; /*4、定义网格布局中的列数,并可定义每列的宽度。
                                                                1>网格布局包含 4 列,请指定这 4 列的宽度;
                                                                2>所有列都应当有相同的宽度,则设置为 "auto";
                                                                */
            /*grid-template-rows: 80px 200px; /*5、定义每行的高度。值是以空格分隔的列表,其中每个值定义相应行的高度。*/
            
            /*justify-content: end; /*6、用于在容器内对齐整个网格。(网格的总宽度必须小于容器的宽度,这样 justify-content 属性才能生效)
                                                                1>space-evenly : 在列之间以及列周围,留出相等的空间;
                                                                2>space-around : 在列周围,留出相等的空间;
                                                                3>space-between : 在列之间,留出相等的空间;
                                                                4>center : 在容器中间,对齐网格;
                                                                5>start : 在容器开头,对齐网格;
                                                                6>end : 在容器末端,对齐网格;
                                                                 */
            /*align-content: end; /*7、用于垂直对齐容器内的整个网格。(网格的总高度必须小于容器的高度,这样 align-content 属性才能生效)
                                                                1>space-evenly :使行之间以及行周围,具有相等的空间;
                                                                2>space-around :使行周围,具有相等的空间;
                                                                3>space-between :使行之间,具有相等的空间;
                                                                4>center : 对齐容器,中间的行;
                                                                5>start :对齐容器,开头的行;
                                                                6>end :对齐容器,末端的行;
                                                                */

            /*grid-gap: 10px 20px; /*8、调整(每列/行之间的)间隙大小。是 grid-row-gap 和 grid-column-gap 属性的简写属性*/
        }

        .grid-item{
            background-color: #D3EAFD;border: 1px solid black;
            text-align: center;padding: 5px 10px;
        }
       
        .item1{ /*10(搭配9用)、个性化设置单个网格项目的位置。把网格项目放在列线 1,并在列线 3 结束它。(注意,会覆盖前面网格容器的grid-template-columns属性 =>4)*/
            
            /*grid-column-start: 1;  代码1
              grid-column-end: 3;    代码2  */
              
              grid-column: 1 / 3;        /*(代码1和2的简写)使 "item1" 从第 1 列开始并在第 3 列之前结束*/
              grid-column: 1 / span 2;   /*(代码1和2的简写)使 "item1" 从第 1 列开始,并跨越 2 列*/

        }
        .item1 { /*11(搭配9用)、个性化设置单个网格项目的位置。把网格项目放在行线 1,并在行线 3 结束它。(注意,会覆盖前面网格容器的grid-template-rows属性 =>5)*/
            
            /*grid-row-start: 1;     代码3
              grid-row-end: 3;       代码4  */

              grid-row: 1 / 3;                    /*(代码3和4的简写)在 row-line 1 开始,在 row-line 3 结束*/
              grid-row: 1 / span 2;               /*(代码3和4的简写)使 "item1" 从第 1 行开始并跨越 2 行*/
        }
        
        .item4{ /*12(搭配9用)、个性化设置单个网格项目的位置。(注意:可以通过使用媒体查询来重新排列某些屏幕尺寸的顺序)*/

            /* grid-row-start: 2;     代码5
               grid-column-start: 3;  代码6
               grid-row-end: 4;       代码7
               grid-column-end: 5;    代码8  */

               grid-area: 2 / 3 / 4 / 5;             /*(代码5和6和7和8的简写)*/
               grid-area: 2 / 3 / span 2 / span 2;   /*(代码5和6和7和8的简写)*/
        }

    </style>
</head>
<body>
    <div class="grid-container"><!--1、设置网格布局容器的div,class=grid-container-->
        <!--2、设置网格项目的div, class=grid-item-->
        <div class="grid-item item1">1</div><!--9、给单个网格项目取类名itemX-->
        <div class="grid-item item2">2</div>
        <div class="grid-item item3">3</div>
        <div class="grid-item item4">4</div>
        <div class="grid-item item5">5</div>
        <div class="grid-item item6">6</div>
        <div class="grid-item item7">7</div>
        <div class="grid-item item8">8</div>
        <div class="grid-item item9">9</div>
    </div>
</body>
View Code

(2)网格布局_命名网格项目

<!DOCTYPE html>
<head>
    <meta charset="utf-8" name="viewport"  content="width=device-width,initial-scale=1.0">
    <title>网格布局(命名网格项目)</title>
    <style>
        *{
            box-sizing: border-box;
        }
        body{ margin: 0;padding: 0;}

        .grid-container1 > div{
            background-color: #D3EAFD;color: black;padding: 5px;border: 1px solid white;
            text-align: center;
        }

        .item1{ /*1、grid-area也可以用于为网格项目分配名称。表示item1 的名称是 "myArea"*/
            grid-area: myArea;
        }

        .grid-container1{
            background-color: #2196F3;padding: 5px;margin: 20px 0 20px 0;

            display: grid;

            /*2(搭配1用)、设置grid-template-areas属性,属性值必须加''单引号。 
                                                      1>'myArea myArea myArea myArea myArea' : 名称是 "myArea"的网格项目,跨越五列网格布局中的所有五列;
                                                      2>'myArea myArea . . .' : 名称是 "myArea"的网格项目,跨越五列网格布局中的两列(句号代表没有名称的项目);
                                                      3>'myArea myArea . . .' 'myArea myArea . . .' : 名称是 "myArea"的网格项目,跨越两列和两行;
                                                      */
            grid-template-areas: 'myArea myArea . . .' 'myArea myArea . . .';
        }


       
        /*3、命名所有项目,并制作一张随时可用的网页模板。*/
        .grid-container > div{
            background-color: #D3EAFD;color: black;padding: 5px;border: 1px solid white;
            text-align: center;
        }

        .grid-container{
            background-color: #2196F3;padding: 5px;margin: 20px 0 20px 0;

            display: grid;
            /*grid-template-columns: auto auto auto auto auto;*/

            /*5(搭配4用)、其实就是一个三行六列的矩阵*/
            grid-template-areas: 'header header header header header header'
                                 'menu main main main right right'
                                 'menu footer footer footer footer footer'
                                  ;
        }
         /*4、命名所有网格项目*/
        .item7{ grid-area: header;}
        .item8{ grid-area: menu;}
        .item9{ grid-area: main;}
        .item10{ grid-area: right;}
        .item11{ grid-area: footer;}
      
      
    </style>
</head>
<body>
    <div class="grid-container1">
        <div class="item1">1</div>
        <div class="item2">2</div>
        <div class="item3">3</div>
        <div class="item4">4</div>
        <div class="item5">5</div>
        <div class="item6">6</div>
    </div>
    <!--3、命名所有项目,并制作一张随时可用的网页模板。-->
    <div class="grid-container">
        <div class="item7">Header</div>
        <div class="item8">Menu</div>
        <div class="item9">Main</div>
        <div class="item10">Right</div>
        <div class="item11">Footer</div>
    </div>
</body>
View Code

(3)网格布局+媒体查询

<!--
    适用:IE16以上包括16
    优点:无需使用浮动或定位。
    例如:网格布局允许我们将项目放置在我们喜欢的任意位置。只需设置网格项目的grid-area属性即可。
          应用在可以通过使用媒体查询来重新排列网格项目的顺序。
-->
<!DOCTYPE html>
<head>
    <meta charset="utf-8" name="viewport"  content="width=device-width,initial-scale=1.0">
    <title>媒体查询+网格视图</title>
    <style>
        *{
            box-sizing: border-box;
        }
        body{ margin: 0;padding: 0;}

        .item1{ grid-area: asideLeft;height: 300px;}
        .item2{ grid-area: main;height: 500px;}
        .item3{ grid-area: asideRight; height: 400px;}

        .grid-container{
            background-color: #2196F3; padding: 5px;

            display: grid;
            /*grid-template-columns: auto auto auto;*/
            grid-template-areas: 'asideLeft' 
                                 'main'
                                 'asideRight';
        }
        .grid-container > div{
            background-color: #D3EAFD;color: black;border: 1px solid white;
            text-align: center;
        }

        /*针对平板*/
        @media  only screen and (min-600px) {
            .grid-container{
                grid-template-areas: 'asideLeft   asideRight'
                                     'main main';
            }
        }

        /*针对桌面*/
        @media  only screen and (min-769px) {
            .grid-container{
                grid-template-areas: 'asideLeft  main asideRight';
            }
        }
    </style>
</head>
<body>
    <div class="grid-container">
        <div class="item1">asideLeft</div>
        <div class="item2">main</div>
        <div class="item3">asideRight</div>
    </div>
</body>
View Code
原文地址:https://www.cnblogs.com/Strugglinggirl/p/15792726.html