flex布局是一种无论对于块级元素还是行内元素都可以被采用的布局,且它使用起来也是十分的方便
首先是要指定flex布局
当我们指定flex布局方式的时候,其属性值 float、clear、vertical-align就失效了
无论是块级元素还是行内元素,当他们指定使用flex布局的时候,就被称为“ 容器 ”(flex container)
他们的子元素自动成为容器成员,被称为“ 项目 ”(flex item)。
flex布局是通过两根轴决定的,其实现方式其实和直角坐标系很像,都是通过轴来进行定位
每个容器都有两根轴,分别为水平的 主轴 (main axis)和垂直的 交叉轴 (cross axis)。主轴开始位置为main start,结束位置为main end。交叉轴的开始位置为cross start,结束位置为cross end
容器内的项目都是沿着主轴排列的,这点和块级元素有较大的不同,因为每个块级元素默认是占有一整行的,且排列方式为由上到下排列。
每个项目都占有一定的主轴空间和交叉轴空间,分别被称为main size和cross size
flex布局下,容器和项目都有其各自的属性
决定主轴的方向,即决定项目的排列方向,其属性值有
决定了当一行放不下所有的项目时,其换行与否以及换行方式
定义了项目在主轴上的对齐方式,假设主轴是从左向右的水平排列
定义了项目在交叉轴上的对齐方式,假设交叉轴是从上到下排列
在这里重点说一下上面这两个属性。
这样可以很方便的设置水平垂直居中
另外说一下align-items:baseline这个属性值。如描述,这个属性值是通过文字来进行对齐,而不是每个项目的边界或是中心
在容器内具有多根主轴线时,可以定义这些轴线的对齐方式
align-content属性和justify-content属性,这两者的属性值有较大的相似之处,这是因为,justify-content属性定义的是多个项目在主轴上的对齐方式,而align-content属性定义的是多根主轴在交叉轴上的对齐方式,这两者描述的对象就几乎一致
定义了多个项目的排列顺序,其使用方式和z-index属性值有异曲同工之处,都是指定属性值,属性值为整数。对于order属性,属性值越小,则排列越靠前;对于z-index属性,则属性值越小,就越在底层
设置了项目的放大比例,其默认值为1。
设置了项目的缩小比例,默认值为1。
在分配多余空间之前,为项目定义其占据的主轴空间
用来设置单个项目与其他项目不同的对齐方式,其属性值和align-items的属性的属性值基本一致,不过其默认值为auto,表示继承父元素的属性值。
最近老是遇到布局问题,尤其是在垂直居中布局上。之前不了解display:flex最近看了看书,简单的整理了下,于是就产生了这篇文章flex弹性布局可以简便,完整,响应式的实现各种页面的布局,而且现在也得到了所有浏览器的支持,实在是布局很便利的工具呢。
一、flex布局的基本概念
1.任何一个元素使用display:flex属性后都可以看做一个flex容器;2.它的子元素变成flex容器中的项目,称为flex item;3.flex容器里面默认存在两根主轴:水平的主轴和垂直的轴
,用这两根轴将容器分成多行
二、flex容器的基本属性
1.flex-direction属性:表示项目的排列方式或者说主轴的方向,有以下四个值
row:默认值,主轴为水平方向,从左向右排列
row-reverse:主轴为水平方向,从右向左排列
column:主轴为垂直方向,从上往下排列
column-reverse:主轴为垂直方向,从下往上排列
2.flex-wrap属性:默认情况,所有的子元素都在一行,此属性主要定义如果不在一行时子元素如何排列,有如下三个值:
nowrap:不换行
wrap:换行
wrap-reverse:换行,第一行在下方,第二行在第一行上面依次类推
3.flex-flow:集1.和2.属性于一身,意思就是这个属性可以直接指定上面两个属性的值,默认值为:row nowrap
4.justify-content:定义子元素在主轴上的对齐方式,有以下五个值:
flex-start:左对齐
flex-end:右对齐
center:居中
space-between:两端对齐
space-around:每个项目两侧间隔相等
5.align-items属性:定义子元素在水平轴和垂直轴的交叉轴上如何对齐,有以下五个值:
flex-start:交叉轴的起点对齐
flex-end:交叉轴的终点对齐
center:交叉轴的中点对齐
baseline:项目的第一行文字基线对齐
strecth:默认
6.algin -content属性:定义多根轴线的对齐方式,如果项目只有一根轴线,则该属性不起作用,该属性有以下六个值:
flex-start:交叉轴的起点对齐
flex-end:交叉轴的终点对齐
center:交叉轴的中点对齐
space-between:与交叉轴的两端对齐,轴线间的间隔平均分布
space-around:每根轴线的两侧的间隔都相等
strecth:默认,轴线占满整个交叉轴
三、子元素(项目)的属性
1.order属性:定义子元素的排列顺序,数值越小,排列越靠前,默认为0
2.flex-grow属性:定义项目的放大比例,默认值是0,就是如果存在剩余空间,也不放大。
若所有子元素的flex-grow值为1,则子元素等分剩下的空间
若一个元素的属性值为N,剩下值为1,则属性值为N的元素等分的空间是1的N倍
3.flex-shrink属性:定义了项目的缩小比例,默认为1,就是如果空间不足,该项目将缩小
若所有子元素此属性为1,空间不足时,将会被等比缩小,
若有元素属性值为0,即使空间不足,也不会被缩小
4.flex-basis属性:定义了在分配多余空间之前,项目占据的主轴空间。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto原本的大小,也可以设置px结尾固定大小
5.flex属性:是2.3和4属性的简写,默认值为:0 1 auto,可以只写第一个值,后面两个是可选参数;该属性的两个快捷值:auto(1 1 auto)和none(0 0 auto)
6.align-self属性:此属性允许单个子元素与其他子元素不一样的对齐方
auto:默认值,表示继承父元素的属性,
其他:align-items值相同
四、一起来试一试