zoukankan      html  css  js  c++  java
  • grid网格布局使用

    定义

    grid布局是指对网页进行划分成一个一个网格,然后根据自己的要求,可以任意组合。

    以前写类似的功能,很麻烦,需要写很多的CSS去控制,有了grid就很方便了,可以随意进行组合。

    跟flex有很多地方相似,包括有部分属性。不同的地方也很突出,尤其是flex是一维,只有横向。而grid是有横向和纵向。另外grid功能要更强大点。

    基本属性

    display

    通过对父元素进行设置display:grid,表示里面包裹的元素全是网格布局。

    display:grid
    

    grid-template-columns/grid-template-cols

    grid-template-columns:表示每行的宽度,有几个表示每行有几列,多出部分会往下排列

    grid-template-cols:表示每列的宽度

    .grid{
        display: grid;
        grid-template-columns: 50px 50px 50px 50px;
        grid-template-rows:  50px 50px 50px 50px;
    }
    

    以上的代码表示横向的每个item宽度和高度是50px,多出一个就会被自动排布下去。

    单位

    单位既可以是px,也可以是百分比,或者用auto

    • px
    .grid{
        display: grid;
        grid-template-columns: 50px 50px 50px 50px;
        grid-template-rows:  50px 50px 50px 50px;
    }
    

    • 百分比
    .grid{
        display: grid;
        grid-template-columns: 33.33% 33.33% 33.33%;
        grid-template-rows: 33.33% 33.33% 33.33%;
    }
    

    • auto 表示宽度或高度是剩余的部分
    .grid{
        display: grid;
        grid-template-columns:  33.33% 10% auto;
        grid-template-rows:  33.33% 20% auto;
    }
    

    repeat()

    repeat()用来处理几个item宽度相同的时候,避免写相同的数值,或者是重复某种模式

    .grid{
        display: grid;
        grid-template-columns: repeat(3,20%);
        grid-template-rows: repeat(3,20%);
    }
    

    .grid{
        display: grid;
        grid-template-columns: repeat(3,100px 50px 100px);
        grid-template-rows: repeat(3,100px 50px 100px);
    }
    

    auto-fill

    当容器的宽度不确定,但是item的宽度确定,一行尽可能多的容纳item,这时可以使用auto-fill

    .grid{
        display: grid;
        grid-template-columns: repeat(auto-fill,100px);
    }
    

    fr

    方便表示比例关系,使用fr来表示

    .grid{
        display: grid;
        grid-template-columns: 1fr 2fr;
    }
    

    这表示后者是前者的2倍

    fr也可跟px结合,会更方便

    .grid{
        display: grid;
        grid-template-columns:100px 1fr 2fr;
    }
    

    上面代码表示第一列是100px,第二列是第三列的一半。

    minmax

    表示最大值最小值

    .grid{
        display: grid;
        grid-template-columns:1fr 2fr minmax(100px,1fr);
    }
    

    上面代码表示,最小值不小于100px,最大值不大于1fr

    row-gap,column-gap,gap

    row-gap:每行之间的间距

    column-gap:每列之间的间距

    gap:缩写行/列间距

    .grid{
        display: grid;
        grid-template-columns:1fr 2fr 1fr;
        row-gap: 10px;
        column-gap: 10px;
    }
    

    或者简便的写法:gap

    .grid{
        display: grid;
        grid-template-columns:1fr 2fr 1fr;
        gap: 10px;
    }
    

    上面代码表示行/列之间的间隔是10px

    grid-area/grid-template-area

    grid-area和grid-template-area,用来划分区域,grid-area用来指定item的名称,grid-template-area根据子区域的名称来排布,表示展现的方式

    .grid{
        display: grid;
        grid-template-columns:100px 100px 100px;
        grid-template-rows: 100px 100px 100px;
        grid-template-areas:    "div1 div1 div1"
                                "div2 div3 div4"
                                "div5 div6 div7"
                                "div8 div9 div9";
    }
    .div1{
        grid-area: div1;
        background-color: tan;
    }
    

    上面代码表示div区域指代的grid的div1,整个页面想展示的布局是如下图:

    grid-auto-flow

    网格布局一般根据横向依次排布,如果想竖向排序,可以设置grid-auto-flow

    .grid{
        display: grid;
        grid-template-columns:100px 100px 100px;
        grid-template-rows: 100px 100px 100px;
        grid-auto-flow: column;
    }
    

    上面的代码表示按照竖向排序。

    justify-items/align-items/place-items

    justify-items/align-items类似,一个是水平方向上的展示,一个是垂直方向上的展示,属性一致

    start:对齐起始位置
    end:对齐结束位置
    center:居中展示
    stretch:拉伸至整个宽度
    

    justify-items:设置的是item的水平方向展现方式。

    .grid{
        display: grid;
        grid-template-columns:100px 100px 100px;
        grid-template-rows: 100px 100px 100px;
        justify-items: center;
    }
    

    上面代码表示每个item居中展示

    align-items:设置的是垂直方向上的展现方式。

    .grid{
        display: grid;
        grid-template-columns:100px 100px 100px;
        grid-template-rows: 100px 100px 100px;
        align-items: center;
    }
    

    上面代码表示item在垂直方向上居中展示

    place-items是align-items和justify-items的结合

    place-items:<align-items><justify-items>
    

    justify-content/align-content/place-content

    justify-content/align-content类似,一个是展示水平方向上,一个是展示垂直方向

    justify-content:是指整个grid在整个容器中的水平方向展示位置

    .grid{
        display: grid;
        grid-template-columns:100px 100px 100px;
        grid-template-rows: 100px 100px 100px;
        justify-content: center;
    }
    

    上面代码表示整个grid水平展现方式

    grid-column-start/grid-column-end/grid-row-start/grid-row-end

    可以指定项目的位置,通过控制左右上下的网格线

    grid-column-start:左边框的网格线
    grid-column-end:右边框的网格线
    grid-row-start:上边框的网格线
    grid-row-end:下边框的网格线
    
    .div1{
        grid-column-start: 2;
        grid-column-end: 4;
        grid-row-start: 1;
        grid-row-end: 3;
        background-color: tan;
    }
    

    上面代码表示第一个item的位置,开始位置是2,结束位置是4,上面的位置是1,下的位置是3,其他的item根据浏览器排布,由grid-auto-flow来决定,默认是先行后竖

    tips:参考阮一峰的文章CSS Grid网格布局教程

  • 相关阅读:
    jsp报源码
    c#简单写售票系统
    linux常用命令大全[转]
    【转载】大型网站渗透思之信息收集
    Ajax初窥
    屏蔽win10中文输入法
    win10禁止更新的方法
    win10进入到安全模式的三种方法
    7代CPU安装win7的方法
    python的输出问题
  • 原文地址:https://www.cnblogs.com/zdping/p/13426048.html
Copyright © 2011-2022 走看看