弹性布局和grid布局

了解

在学习弹性布局之前首先就要明白其概念
flex 就是flexible box的缩写,意为弹性布局,用来为盒装模型提供最大的灵活性
任何一个容器都可以指定为flex布局

.box{ display: flex; }

行内元素当然也可以使用flex布局

.box{ display: inline-flex; }

注意一下:Webkit设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。

基础概念

采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

弹性布局和grid布局_第1张图片


容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

容器属性(container)

  • flex-direction
  • justify-content
  • align-items
  • flex-wrap
  • align-content
  • flex-flow

1.flex-direction

row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。

2.justify-content

justify-content决定了flex item在main axis上的对齐方式
    

flex-start(默认值):与main start对齐
  

 flex-end:与main end对齐
    

center:居中
  

 space-between:flex items 之间的距离相等,与main start、main end两端对齐
  

 space-evenly: flex items 之间的距离相等,flex items与main start 、main end 之间的距离等于flex items之间的距离
  

 space-around :flex items 之间的距离相等,flex items与main start 、main end 之间的距离等于flex items之间的距离的一半

属性的目的主要就是为了排列main axis的item位置

 弹性布局和grid布局_第2张图片

3.align-items

决定flex items在cross axis上的对齐方式
   
    normal:在弹性布局中,效果和stretch一样


    stretch:前提是items不设置高度,当flex items 在cross axis 方向的size为auto时,会自动拉伸至填充flex container(或者换句话说:如果项目未设置高度或设为auto,将占满整个容器的高度。)


    flex-satrt:与cross start 对齐


    flex-end:与cross end 对齐


    center:居中对齐


    baseline:与基准线对齐

 4. align-content

决定了多行flex items 在cross axis的对齐方式 用法与justify-content相似 一个是横轴。一个控制竖轴


    stretch(默认值):与align-items的stretch类似,当items有高度的时候,无效果


    flex-start:与cross start 对齐


    flex-end :与cross end 对齐


    center:居中对齐


    space-between:flex items 之间的距离相等,与cross start、cross end两端对齐


    space-evently: flex items 之间的距离相等,flex items与cross start 、cross end 之间的距离等于flex items之间的距离


    space-around :flex items 之间的距离相等,flex items与cross start 、cross end 之间的距离等于flex items之间的距离的一半

5.flex-wrap

决定了flex container 是单行还是多行

nowrap(默认):单行

wrap:多行

(这个比较少用 wrap-reverse:多行(对比wrap,cross start 与cross end相反))

6 flex-flow 是flex-direction与flex-wrap的简写

flex 项目属性(item属性)

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • align-self
  • flex

1 order

order 决定flex items的排布顺序 (用的不多)

可以设置为任意整数(正整数、负整数、0),值越小越排在前面

默认值为0

2 align-self

   可以通过align-self 覆盖flex container 设置的align-items
    auto(默认值):遵从flex container的align-items设置
    stretch、flex-start、flex-end、center、baseline效果与align-items一致


3 flex-grow

 决定了flex items如何扩展
 可以设置为任意非父数字(小数,整数 0),默认为0
 当flex container 在main axis方向上有剩余得size时,flex-grow属性才会有效  
 如果所有flex items 的flex-grow 综合sum不超过1,这直接乘以剩余size就是扩展大小、
 如果超过1 扩展size=剩余size*flex-grow/sum

4.flex-shrink

lex-shrink (shrink 缩小,收缩)与flex-grow相似,一个扩展,一个伸缩 
可以设置为任意非父数字(小数,整数 0),默认为1
当flex items在main axis 方向上超过了flex container 的size flex-shrink属性才会生效、
如果所有flex items 的flex-shrink 总和sum超过1,每个flex item 收缩的size为:

flex item 超出flex container 的size*收缩比例/每个flex items 的收缩比例之和
如果sum不超过1,每个flex item 收缩的size为:
size = 超出的size * flex-shrink值
flex items收缩后的最终size不能小于min-widthmin-height

5 flex-basis

用来设置flex items 在 main axis方向上的base size
默认为auto,可以设置具体的宽度数值
    
决定flex items最终base size 的因素,优先级从高到低
 max-widthmax-heightmin-widthmin-height
 flex-basis
 widthheight
 内容本身的size

6 flex

flex 是flex-grow || flex-shink||flex-basis的简写

可以指定1 2 3个值 依次按照上述顺序!默认值为 0 1 auto

Grid布局

网格容器(Grid Container) 属性

  • display
  • grid-template-columns
  • grid-template-rows
  • grid-template-areas
  • grid-template
  • grid-column-gap
  • grid-row-gap
  • grid-gap
  • justify-items
  • align-items
  • place-items
  • justify-content
  • align-content
  • place-content
  • grid-auto-columns
  • grid-auto-rows

网格项(Grid Items) 属性

  • grid-column-start
  • grid-column-end
  • grid-row-start
  • grid-row-end
  • grid-column
  • grid-row
  • grid-area
  • justify-self
  • align-self
  • place-self

display

将元素定义为网格容器,并为其内容建立新的 网格格式上下文。
grid :生成一个块级网格
inline-grid :生成一个内联网格

grid-template-columns / grid-template-rows

使用空格分隔的值列表,用来定义网格的列和行。这些值表示 网格轨道(Grid Track) 大小,它们之间的空格表示网格线。

grid-template-areas

通过引用 grid-area 属性指定的 网格区域(Grid Area) 名称来定义网格模板。重复网格区域的名称导致内容跨越这些单元格。一个点号(.)代表一个空单元格。这个语法本身可视作网格的可视化结构

grid-template

用于定义 [grid-template-rows],[grid-template-columns],[grid-template-areas]简写属性。

  • none:将所有三个属性设置为其初始值
  • / :将 [grid-template-columns]和 [grid-template-rows] 设置为相应地特定的值,并且设置[grid-template-areas]

grid-column-gap / grid-row-gap

指定网格线(grid lines)的大小。你可以把它想象为设置列/行之间间距的宽度。

grid-gap

grid-column-gap和 grid-row-gap 的简写语法

值:

:长度值

justify-items

沿着 inline(行)轴线对齐网格项(grid items)(相反的属性是 align-items 沿着 block(列)轴线对齐)。此值适用于容器内的所有网格项。

  • start:将网格项对齐到其单元格的左侧起始边缘(左侧对齐)
  • end:将网格项对齐到其单元格的右侧结束边缘(右侧对齐)
  • center:将网格项对齐到其单元格的水平中间位置(水平居中对齐)
  • stretch:填满单元格的宽度(默认值)

align-items

沿着 block(列)轴线对齐网格项(grid items)(相反的属性是 justify-items沿着 inline(行)轴线对齐)。此值适用于容器内的所有网格项。

  • start:将网格项对齐到其单元格的顶部起始边缘(顶部对齐)
  • end:将网格项对齐到其单元格的底部结束边缘(底部对齐)
  • center:将网格项对齐到其单元格的垂直中间位置(垂直居中对齐)
  • stretch:填满单元格的高度(默认值)

place-items

place-items 是设置 align-items 和 justify-items 的简写形式。

:第一个值设置 align-items 属性,第二个值设置 justify-items 属性。如果省略第二个值,则将第一个值同时分配给这两个属性。

justify-content

有时,你的网格合计大小可能小于其 网格容器(grid container) 大小。 如果你的所有 网格项(grid items) 都使用像 px 这样的非灵活单位设置大小,就可能出现这种情况。在这种情况下,您可以设置网格容器内的网格的对齐方式。 此属性沿着 inline(行)轴线对齐网格(相反的属性是 align-content ,沿着 block(列)轴线对齐网格)。

值:

  • start:将网格对齐到 网格容器(grid container) 的左侧起始边缘(左侧对齐)
  • end:将网格对齐到 网格容器 的右侧结束边缘(右侧对齐)
  • center:将网格对齐到 网格容器 的水平中间位置(水平居中对齐)
  • stretch:调整 网格项(grid items) 的宽度,允许该网格填充满整个 网格容器 的宽度
  • space-around:在每个网格项之间放置一个均匀的空间,左右两端放置一半的空间
  • space-between:在每个网格项之间放置一个均匀的空间,左右两端没有空间
  • space-evenly:在每个网格项目之间放置一个均匀的空间,左右两端放置一个均匀的空间

align-content

有时,你的网格合计大小可能小于其 网格容器(grid container) 大小。 如果你的所有 网格项(grid items) 都使用像 px 这样的非灵活单位设置大小,就可能出现这种情况。在这种情况下,您可以设置网格容器内的网格的对齐方式。 此属性沿着 block(列)轴线对齐网格(相反的属性是 justify-content,沿着 inline(行)轴线对齐网格)。

值:

  • start:将网格对齐到 网格容器(grid container) 的顶部起始边缘(顶部对齐)
  • end:将网格对齐到 网格容器 的底部结束边缘(底部对齐)
  • center:将网格对齐到 网格容器 的垂直中间位置(垂直居中对齐)
  • stretch:调整 网格项(grid items) 的高度,允许该网格填充满整个 网格容器 的高度
  • space-around:在每个网格项之间放置一个均匀的空间,上下两端放置一半的空间
  • space-between:在每个网格项之间放置一个均匀的空间,上下两端没有空间
  • space-evenly:在每个网格项目之间放置一个均匀的空间,上下两端放置一个均匀的空间

place-content

place-content 是设置 align-content 和 justify-content 的简写形式。

:第一个值设置 align-content 属性,第二个值设置 justify-content 属性。如果省略第二个值,则将第一个值同时分配给这两个属性。

grid-auto-columns / grid-auto-rows

指定任何自动生成的网格轨道(grid tracks)(又名隐式网格轨道)的大小。当网格中的网格项多于单元格时,或者当网格项位于显式网格之外时,就会创建隐式轨道。

track-size>:可以是长度值,百分比,或者等份网格容器中可用空间的分数(使用 fr 单位)

子元素 网格项(Grid Items) 属性

注意:float,display: inline-block,display: table-cell,vertical-align 和 column-* 属性对网格项无效。

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

通过引用特定网格线(grid lines) 来确定 网格项(grid item) 在网格内的位置。 grid-column-start / grid-row-start是网格项开始的网格线,grid-column-end/ grid-row-end 是网格项结束的网格线。

值:

  • :可以是一个数字引用一个编号的网格线,或者一个名字来引用一个命名的网格线
  • span :该网格项将跨越所提供的网格轨道数量
  • span :该网格项将跨越到它与提供的名称位置
  • auto:表示自动放置,自动跨度,默认会扩展一个网格轨道的宽度或者高度

grid-column / grid-row

分别为 grid-column-start + grid-column-endgrid-row-start) + grid-row-end 的简写形式。

  • / :每个网格项都接受所有相同的值,作为普通书写的版本,包括跨度

grid-area

为网格项提供一个名称,以便可以 被使用网格容器 grid-template-areas 属性创建的模板进行引用。 另外,这个属性可以用作grid-row-start+ grid-column-start + grid-row-end+ grid-column-end 的简写。
值:

  • :你所选的名称
  • / / / :数字或分隔线名称

justify-self

沿着 inline(行)轴线对齐网格项( 相反的属性是 align-self,沿着 block(列)轴线对齐)。此值适用于单个网格项内的内容。

值:

  • start:将网格项对齐到其单元格的左侧起始边缘(左侧对齐)
  • end:将网格项对齐到其单元格的右侧结束边缘(右侧对齐)
  • center:将网格项对齐到其单元格的水平中间位置(水平居中对齐)
  • stretch:填满单元格的宽度(默认值)

align-self

沿着 block(列)轴线对齐网格项(grid items)( 相反的属性是 justify-self,沿着 inline(行)轴线对齐)。此值适用于单个网格项内的内容。

值:

  • start:将网格项对齐到其单元格的顶部起始边缘(顶部对齐)
  • end:将网格项对齐到其单元格的底部结束边缘(底部对齐)
  • center:将网格项对齐到其单元格的垂直中间位置(垂直居中对齐)
  • stretch:填满单元格的高度(默认值)

place-self

place-self 是设置 align-self 和 justify-self 的简写形式。

值:

auto – 布局模式的 “默认” 对齐方式。
:第一个值设置 align-self 属性,第二个值设置 justify-self 属性。如果省略第二个值,则将第一个值同时分配给这两个属性。

你可能感兴趣的:(css,html5,css3)