Flex布局和Grid布局

好久以前就用过flex布局,以为很好用,可是因为兼容性,因此并无常常用,所以在用flex布局的时候应该考虑其兼容性,flex对移动端的兼容性比较高。
flex布局是一个网页布局
1、兼容性以下
2、容器的属性
1.display:flex/inline-flex
2.flex-direction 决定主轴的方向(即项目的排列方向)
flex - direction :  row  |  row - reverse  |  column  |  column - reverse ;
  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。 
3.flex-wrap 决定换不换行,默认不换行
flex - wrap :  nowrap  |  wrap  |  wrap - reverse ;
4.flex-flow 是flex-direction和flex-wrap的简写方式
flex - flow :   < flex - direction >   ||   < flex - wrap >;
5.justify-content 决定了项目在主轴上的对齐方式
justify-content: flex-start | flex-end | center | space-between | space-around;
  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每一个项目两侧的间隔相等。因此,项目之间的间隔比项目与边框的间隔大一倍。
6.align-item 定义垂直位置,能够经过这个定义垂直居中
align-items: flex-start | flex-end | center | baseline | stretch;
  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):若是项目未设置高度或设为auto,将占满整个容器的高度。
7.align-content  定义了多根轴线的对齐方式。若是项目只有一根轴线,该属性不起做用。
 align-content: flex-start | flex-end | center | space-between | space-around | stretch;
  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。因此,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。

grid布局很好,可是兼容性如今并非很好,测试了几个浏览器,支持谷歌、火狐、Opera,不支持safari,IE10如下,360,QQ浏览器

1、网格容器
1.display:grid/grid-inline
2. grid-template-columns和grid-template-rows属性能够显式的设置一个网格的列和行 
    fr单位能够帮助咱们建立一个弹列的网格轨道。它表明了网格容器中可用的空间(就像Flexbox中无单位的值)
grid-template-columns: 1fr 1fr 2fr
    minmax()函数来建立网格轨道的最小或最大尺寸。minmax()函数接受两个参数:第一个参数定义网格轨道的最小值,第二个参数定义网格轨道的最大值。能够接受任何长度值,也接受auto值。auto值容许网格轨道基于内容的尺寸拉伸或挤压
grid-template-rows: minmax(100px, auto);
grid-template-columns: minmax(auto, 50%) 1fr 3em;
   repeat()能够建立重复的网格轨道。这个适用于建立相等尺寸的网格项目和多个网格项目。repeat()接受两个参数:第一个参数定义网格轨道应该重复的次数,第二个参数定义每一个轨道的尺寸。
grid-template-rows: repeat(3, 1fr);   
grid-template-columns: 30px repeat(3, 1fr) 30px;
2、间距
1. grid-column-gap  建立列与列之间的间距
2. grid-row-gap  建立行与行之间的间距
3. grid-gap  
    grid-gap是grid-row-gap和grid-column-gap两个属性的缩写,若是它指定了两个值,那么第一个值是设置grid-row-gap的值,第二个值设置grid-column-gap的值。若是只设置了一个值,表 示行和列的间距相等,也就是说grid-row-gap和grid-column-gap的值相同。
3、网格线
1.【grid-row-start】【grid-row-end】【grid-column-start】【grid-column-end】
    经过网格线能够定位网格项目。网格线其实是表明线的开始、结束,二者之间就是网格列或行。每条线是从网格轨道开始,网格的网格线从1开始,每条网格线逐步增长1
grid-row-start: 2;
grid-row-end: 3; 
grid-column-start: 2; 
grid-column-end: 3;
2.【grid-row】【grid-column】
     grid-row是grid-row-start和grid-row-end的简写。grid-column是grid-column-start和grid-column-end的简写。若是只提供一个值,则指定了grid-row-start(grid-column-start)值;若是提供两个值,第一个值是grid-row-start(grid-column-start)的值,第二个值是grid-row-end(grid-column-end)的值,二者之间必需要用/隔开
grid-row: 2; 
grid-column: 3 / 4;
3. 关键词span后面紧随数字,表示合并多少个列或行
grid-row: 1 / span 3;
grid-column: span 2;
4. 【grid-area】 指定四个值,第一个值对应grid-row-start,第二个值对应grid-column-start,第三个值对应grid-row-end,第四个值对应grid-column-end
grid-area: 2 / 2 / 3 / 3;
5.网格线命名
   分配网格线名称必须用方括号[网格线名称],而后后面紧跟网格轨道的尺寸值。
grid-template-rows: [row-1-start] 1fr [row-2-start] 1fr [row-2-end];
grid-template-columns: [col-1-start] 1fr [col-2-start] 1fr [col-3-start] 1fr [col-3-end];
    使用repeat()函数能够给网格线分配相同的名称。
grid-template-rows: repeat(3, [row-start] 1fr [row-end]);
grid-template-columns: repeat(3, [col-start] 1fr [col-end]);
   使用repeat()函数能够给网格线命名,这也致使多个网格线具备相同的网格线名称。相同网格线名称指定网格线的位置和名称,也且会自动在网格线名称后面添加对应的数字,使其网格线名称也是惟一的标识符
  使用相同的网格线名称能够设置网格项目的位置。网格线的名称和数字之间须要用空格分开 
grid-row: row-start 2 / row-end 3;
grid-column: col-start / col-start 3;
6.网格区域命名
    grid-template-areas  引用网格区域名称也能够设置网格项目位置
grid-template-areas:   "header header"   "content sidebar"    "footer footer";
grid-template-rows:    150px 1fr 100px;
grid-template-columns: 1fr 200px;
   
7. grid-auto-flow  网格默认流方向是row,能够经过grid-auto-flow属性把网格流的方向改变成column   
grid-auto-flow: column
4、对齐

【网格项目对齐方式(Box Alignment)】浏览器

  CSS的Box Alignment Module补充了网格项目沿着网格行或列轴对齐方式。ide

【justify-items】函数

【justify-self】布局

  justify-items和justify-self指定网格项目沿着行轴对齐方式;align-items和align-self指定网格项目沿着列轴对齐方式。测试

  justify-items和align-items应用在网格容器上flex

【align-items】spa

【align-self】orm

  align-self和justify-self属性用于网格项目自身对齐方式域名

  这四个属性主要接受如下属性值:it

auto | normal | start | end | center | stretch | baseline | first baseline | last baseline