博客列表 >1224 grid布局及常用属性

1224 grid布局及常用属性

老衲法号
老衲法号原创
2020年12月26日 01:55:22681浏览

一 术语

  • 网格容器

    基于二维网格布局的容器,由若干个矩形网格单元构成,其子元素默认为块元素
    网格容器

  • 网格项目

    网格容器中的子元素,必须放在网格单元中

  • 网格单元

    多种组成方式,有单元格和网格区域两种表现形式
     网格单元

  • 网格轨道

    水平方向(行轨)和垂直方向(列轨),由多个网格单元组成,就是轨道
    轨道

  • 轨道间距 gap:行 列;

    容器中轨道之间的间距,行规间距和列轨间距

二 设置网格单元尺寸的新单位: fr

  1. auto: 只能等分,如果列宽或行高不统一的时候 就需要用fr,两者不要一起用,一旦混用 auto 会被压缩为内容大小
    auto
  2. fr(fraction) :类似于flex布局中的收缩因子,类似于百分比,fr 可以识别轨道间距 但是 百分比不能识别,两者可以共存,计算方式是总宽度-百分比的宽度,然后将剩下的全部给fr .
    fr
  3. auto fr % 都是相对单位,均可触发自动计算机制,尽可能不要同时出现
  4. 如果fr 与 em px 等混合用,计算方式 与百分比 计算方式相同

三 设置网格单元尺寸的新函数

1 repeat(数量,尺寸,尺寸) :重复设置后面的尺寸,尺寸可多值,有几个值就是重复一次的时候设置几个尺寸,见图片
单值
多值
2 minmax(min,max) 最小尺寸是min,最大尺寸是max

四 显式轨道与隐式轨道及项目的排列

当声明的网格单元数量不够存入所有的网格项目时,多出的网格项目会放入到自动生成的网格空间中
原来声明的网格单元 叫 显示轨道
自动生成的网格单元 叫 隐式轨道

1 显示轨道的声明:例:两行三列

  1. .container{
  2. grid-template-columns: 1fr 1fr 1fr;
  3. grid-template-rows: 5em 5em;
  4. }

2 项目排列顺序:

  • 行优先(默认)

    1. .container{
    2. grid-auto-flow:row;
    3. }

    行优先

  • 列优先

    1. .container{
    2. grid-auto-flow:column;
    3. }

    列优先

3 隐式轨道的设置:

  • 行优先时,要设置隐式轨道的行高

    1. .container{
    2. grid-auto-flow: row;/*行优先*/
    3. grid-auto-rows: 10em; /*设置隐式轨道的行高*/
    4. }

  • 列优先时,要设置隐式轨道的列宽

    1. .container{
    2. grid-auto-flow: column;/*列优先*/
    3. grid-auto-columns: 1fr; /*设置隐式轨道的列宽*/
    4. }

    列优先

五 自定义项目在容器中显示的位置

编号指的是基线的编号,可分为行编号 和 列编号 ,编号从左上角开始(1,1)到右下角递增,反之负数为右下角(-1,-1)向左上角递减,具体见图示:

设置项目所在网格单元的区域的属性为: grid-area
属性格式为:

  • grid: 行开始编号 / 列开始编号 / 行结束编号 / 列结束编号
  • grid: 行开始编号 / 列开始编号 / 跨几行(span 1) / 跨几列 (span 2)

根据参数个数的不同 所代表的意义也不同

1. 完整的语法(四值) 选中第3个元素

  • 全是编号,默认展示位置
    1. .container > .item:nth-of-type(3){
    2. background:red;
    3. grid-area:1/3/2/4;
    4. }
  • 编号和span 共存 , 默认展示位置 效果如上图
    1. .container > .item:nth-of-type(3){
    2. background:red;
    3. grid-area:1/3/span 1 / span 1;
    4. }
  • 全是编号, 放在第一第二个单元格组成的网格区域
    1. .container > .item:nth-of-type(3){
    2. background:red;
    3. grid-area:1/1/2/4;
    4. }
  • 编号和span 共存 , 放在第一,二,四,五单元格组成的网格区域,即跨两行两列
    1. .container > .item:nth-of-type(3){
    2. background:red;
    3. grid-area:1/1/span 2 / span 2;
    4. }

2 三值写法 即 省了列结束编号或跨的数量 意味着默认跨了一列

  1. .container > .item:nth-of-type(3){
  2. background:red;
  3. grid-area:1/1/span 2;/*跨了两行*/
  4. }

等同于

  1. .container > .item:nth-of-type(3){
  2. background:red;
  3. grid-area:1/1/3;/*跨了两行*/
  4. }

3 两值写法

  • 没有span 则默认跨一行一列 ,表示所放的位置

    1. .container > .item:nth-of-type(3){
    2. background:red;
    3. grid-area:1/1;/*放在第一单元格,跨一行一列*/
    4. }

  • 有span 则表示从默认的起始位置起算,跨几行几列,

    1. .container > .item:nth-of-type(3){
    2. background:red;
    3. grid-area:span 2 / span 2;/*当前位置,跨两行一列*/
    4. }


    如果只想设置列数,则第一个参数可以设置为 auto ,但不可不设
    例2 :将第二个元素在当前位置 跨两列 行不设置

    1. .container > .item:nth-of-type(2){
    2. background:hotpink;
    3. grid-area:auto / span 2;/*当前位置,跨两列*/
    4. }

4 单值写法

  • 不带span 表示 开始的行起点,而列起点默认为1 ,
    即等于 行起点 / 1 / span 1 / span 1
    例:将第二个元素 放在第7个单元格

    1. .container > .item:nth-of-type(2){
    2. background:hotpink;
    3. grid-area:3;/* 等同于 3 / 1 */
    4. }

  • 带span 则仅代表跨的行数(默认起始位置)
    例:让第二个元素跨5行

  1. .container > .item:nth-of-type(2){
  2. background:hotpink;
  3. grid-area:span 5;/* 等同于 auto / auto/ span 5 */
  4. }

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