flex布局

150 阅读2分钟
转载http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
    
页面布局

	布局的传统解决方案,基于盒模型,依赖display属性+position属性+float属性,对于特殊布局非常不方便,比如垂直居中.
	2009年提出了flex布局,得到所有的浏览器的支持
	
一. flex布局是什么
		一个容器设置为flex布局
			.box{
				display: flex;
			}
		行内元素也可以使用flex
			.box{
				display: inline-flex;
			}
		Webkit内核的浏览器,必须加上-webkit-前缀
			.box{
				display: -webkit-flex; /* Safari*/
				display: flex;
			}
		设为flex布局后,float,cleat和vertical-align属性将失效.
		
二. 容器的属性
		1.flex-direction:
		2.flex-wrap
		3.flex-flow
		4.justify-content
		5.align-items
		6.align-content
		
		1.1 flex-direction 决定主轴的方向,项目的排列方向
			.box{
				flex-direction: row| row-reverse | column | column-reverse
			}
			分为对应水平方向,起点在左端;水平方向,起点右端;垂直方向,起点在上;垂直广向,起点在下;

        2.1 flex-wrap属性 一条轴线,一条轴线排不完,如何换行
            .box{
                flex-wrap: nowrap | wrap | wrap-reverse
            }
            (1)nowrap (默认) 不换行

            (2)wrap 换行

            (3)wrap-reverse 换行,第一行在下方

        3.1 flex-flow 是felx-direction和flex-wrap 的简写
        
        4.1 justify-content 项目在主轴上的对齐方式
            .box{
                justify-content: flex-start | flex-end | center | space-between | space-around
            }

        5.1 align-items 在交叉轴的对齐
            .box{
                align-items: flex-start | flex-end | center | baseline | stretch
            }

        6.1 align-content 定义多根轴线的对齐方式
            .box{
                align-content: flex-start | flex-end | center | space-between | space-around | stretch
            }

    三. 项目的属性
        1. order
        2. flex-grow 
        3. flex-shrink
        4. flex-basis
        5. flex
        6. align-self
        
        1.1 order 项目的排列顺序数值越小,排列越靠前,默认为0
            .item{
                order: <integer>
            }

        2.1 flex-grow 项目的放大比例,默认为0,如果存在剩余空间,也不入大
            .item{
                flex-grow: <number>
            }

            如果flex-grow 属性为1,则它们将等分空间,如果有一个2,其实为1,则等分空间
            
        3.1 flex-shrink 定义了项目的缩小比例,默认1 ,如果空间不足,则该项目缩小
            .item{
                flex-shrink:<number>
            }

            如果属性为1,空间不足时,都等比例缩小,如果一个项上的flex-shrink 的属性为0,其他项目为1,则空间不足时,前者不缩小,负值无效
            
        4.1 flex-basis 属性分配多余空间之前,项目占据主轴空间.浏览器根据这个属性是否有多余空间,默认为auto,既项目的本来大小
        
        5.l flex 属性是flex-grow ,flex-shrink和flex-basis的简写&emsp;默认值为0 1 auto 后两个属性可以选
        
        6. align-self属性 
            align-self允许单个项目与其他项目不一样的对齐方式,可覆盖align-items属性,默认值为auto,表示继承父元素align-items属性,如果没有父元素,则等同于stretch