好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Grid 布局简介

Grid 与 Flex 布局有一定的相似性,但是 功能 更加强大,学习起来也有不少难度,不过相信下面的 内容 会帮你更快的掌握 Grid。

1. 官方定义

通过设置 dis play: grid; 可以定义 一个 CSS 网格。然后使用 grid-template-rows 和 grid-template-columns 属性 来定义网格的 columns 和 rows 。
使用这些 属性 定义的网格被描述为 显式网格 (explicit grid)。
参考文献:MDN

2. 解释

Grid 是 一个 二维网格布局,它有行 grid-template-rows (横排)、 列 grid-template-columns (竖排),内部的项目就分布在其中,而网格线就是行和列划分出来的。

基本属于解释:

容器:上面 代码 中,最外层的<div>元素 demo 就是容器。
项目:内层的三个<div>元素 item 就是项目。
行:把 row 即横向称为行,
列:把 column 即纵向称为列。
单元格:它们的交叉区域 cell 也就是单元格。
网格线: grid line 网格线就是由行和列划分出来的。

3. 语法

块级的网格。

   .demo   { 
      dis play  : grid
 } 
 

内联级的网格。

   .demo   { 
      dis play  : inline-grid ; 
 } 
 

容器包含 属性 如下

属性 名 值 说明 grid-template-columns length 列和每列宽度 grid-template-rows length 行和每行的高度 grid-row-gap length 行和行之 间的 距离 grid-column-gap length 列与列之间距离 grid-gap row column 行、列间距的合并写法 grid-template-areas string 用来指定区域 grid-auto-flow row | column 默 认是 row ,用来指定排列优先级 justify-items start | end | center | stretch 水平方向 内容 的位置 align-items start | end | center | stretch 垂直方向 内容 的位置 place-items align justify 垂直和水平位置合并写法 justify-content start | end | center | stretch | space-around | space-between | space-evenly 水平方向整个 内容 区域的位置 align-content start | end | center | stretch | space-around | space-between | space-evenly 垂直方向整个 内容 区域的位置 place-content align justify 垂直和水平方向的合并写法 grid-auto-columns length 多于的网格列宽定义 grid-auto-rows length 多于的网格行高的定义

grid-template 是 grid-template-columns 、 grid-template-rows 、 grid-template-areas 缩写。

grid 是 grid-template-rows 、g rid-template-columns 、 grid-template-areas 、 grid-auto-rows 、 grid-auto-columns 、 grid-auto-flow 的合并缩写。

提示 :gird 属性 很复杂因此不推荐 grid 的缩写

项目包含 属性 介绍

属性 名 值 说明 grid-column-start number | areaName | span number 项目开始位置在左边框所在的第几根垂直网格线 grid-column-end number | areaName | span number 项目开始位置在右边框所在的第几根垂直网格线 grid-row-start number | areaName | span number 项目开始位置在上边框所在的第几根水平网格线 grid-row-end number | areaName | span number 项目开始位置在下边框所在的第几根水平网格线 grid-column number / number grid-column-start 和 grid-column-end 的合并 grid-area areaName 指定项目放在哪 一个 区域 justify-self start | end | center | stretch 单元格 内容 的水平方向位置 align-self start | end | center | stretch 单元格 内容 的垂直方向位置 place-self align-self justify-self 单元格 内容 的垂直和水平位置缩写

4. 兼容性

IE Edge Firefox Chrome Safari Opera ios android No 16+ 52+ 57+ 10.1+ 44+ 10.3+ 81

5. 实例

本小节暂时不对 父容器 和子容器内的 属性 进行详细的实例使用展示,仅对 dis play 属性 进行 效果 区分,可以从下一小节开始其他 内容 的学习。

创建 一个 块级的 Gird 布局。

    < div   class   =  " demo "   >  
       < div   class   =  " item "   >  1   </ div  >  
       < div   class   =  " item "   >  2   </ div  >  
       < div   class   =  " item "   >  3   </ div  >  
       < div   class   =  " item "   >  4   </ div  >  
   </ div  >  
 

通过下面的设置:

   .demo   { 
      dis play  :  grid ; 
     grid-template-columns  : px px ; 
     grid-template-rows  : px px ; 
     border  : px solid  #eee 
 } 
  .item  :nth-of-type(1)   { 
     background  :  red ; 
 } 
  .item  :nth-of-type(2)   { 
     background  :  green ; 
 } 
  .item  :nth-of-type(3)   { 
     background  :  purple ; 
 } 
 

效果 图

块级 Grid 布局 效果 图

  <!DOCTYPE html> 
   < html   lang   =  " en "   >  
   < head  >  
       <  Meta    charset   =  " UTF-8 "   >  
       <  Meta    name   =  " viewport "    content   =  " width=device-width, initial-scale=1.0 "   >  
       < title  >  Document   </ title  >  
       < style  >   
          .demo   { 
              dis play  :  grid ; 
             grid-template-columns  : px px ; 
             grid-template-rows  : px px ; 
             border  : px solid  #eee 
         } 
          .item  :nth-of-type(1)   { 
             background  :  red ; 
         } 
          .item  :nth-of-type(2)   { 
             background  :  green ; 
         } 
          .item  :nth-of-type(3)   { 
             background  :  purple ; 
         } 
        </ style  >  
   </ head  >  
   < body  >  
       < div   class   =  " demo "   >  
           < div   class   =  " item "   >  1   </ div  >  
           < div   class   =  " item "   >  2   </ div  >  
           < div   class   =  " item "   >  3   </ div  >  
           < div   class   =  " item "   >  4   </ div  >  
       </ div  >  
    网学习
    
   </ body  >  
   </ html  >  
 

创建内联级的 Gird 布局。

    < div   class   =  " demo "   >  
       < div   class   =  " item "   >  1   </ div  >  
       < div   class   =  " item "   >  2   </ div  >  
       < div   class   =  " item "   >  3   </ div  >  
       < div   class   =  " item "   >  4   </ div  >  
   </ div  >      
网学习
 

   .demo   { 
      dis play  :  inline-grid ; 
     grid-template-columns  : px px ; 
     grid-template-rows  : px px ; 
     border  : px solid  #eee 
 } 
  .item  :nth-of-type(1)   { 
     background  :  red ; 
 } 
  .item  :nth-of-type(2)   { 
     background  :  green ; 
 } 
  .item  :nth-of-type(3)   { 
     background  :  purple ; 
 } 
 

效果 图

内联 Grid 布局 效果 图

  <!DOCTYPE html> 
   < html   lang   =  " en "   >  
   < head  >  
       <  Meta    charset   =  " UTF-8 "   >  
       <  Meta    name   =  " viewport "    content   =  " width=device-width, initial-scale=1.0 "   >  
       < title  >  Document   </ title  >  
       < style  >   
          .demo   { 
              dis play  :  inline-grid ; 
             grid-template-columns  : px px ; 
             grid-template-rows  : px px ; 
             border  : px solid  #eee 
         } 
          .item  :nth-of-type(1)   { 
             background  :  red ; 
         } 
          .item  :nth-of-type(2)   { 
             background  :  green ; 
         } 
          .item  :nth-of-type(3)   { 
             background  :  purple ; 
         } 
        </ style  >  
   </ head  >  
   < body  >  
       < div   class   =  " demo "   >  
           < div   class   =  " item "   >  1   </ div  >  
           < div   class   =  " item "   >  2   </ div  >  
           < div   class   =  " item "   >  3   </ div  >  
           < div   class   =  " item "   >  4   </ div  >  
       </ div  >      
    网学习
    
   </ body  >  
   </ html  >  
 

6. 小结

Grid 布局是二维布局原因就是项目所在的单元格是由行和列产生的。 网格线的开始位置在容器的最顶端和最左边。 使用区域命名之后会影响网格线的 名称 会变成 区域名-star 、 区域名-end 可以把 columns 理解为高度, rows 理解为宽度这样便于理解。

Grid 行和列 ? ?align-content

查看更多关于Grid 布局简介的详细内容...

  阅读:38次

上一篇

下一篇

第1节:CSS3简介    第2节:border 边框    第3节:borderImage 边框图片    第4节:border-radius 圆角    第5节:box-shadow 阴影    第6节:box-sizing 盒类型    第7节:gradients 渐变    第8节:text-justify 对齐    第9节:text-overflow 文字超出    第10节:text-shadow 文本阴影    第11节:word-break 文本打断    第12节:word-wrap 文本换行    第13节:letter-spacing 字间距    第14节:perspective 透视    第15节:transform 2D 空间转换    第16节:transform 3D 空间转换    第17节:transition 过渡    第18节:animation 动画    第19节:columns 字符分割    第20节:flex 弹性盒子布局    第21节:flex order 顺序    第22节:flex: grow、shrink、basis    第23节:flex-direction 排列方向    第24节:justify-content (轴内)对齐方式    第25节:flex-wrap 换行    第26节:align-items 竖直方向对齐方式    第27节:align-content    第28节:Grid 布局简介    第29节:Grid 行和列    第30节:media 媒体查询    第31节:only 元素选择    第32节:before && after 位置    第33节:nth 类型元素选择器    第34节:calc 计算属性