Flex布局
flex布局时目前web开发中使用最多的布局方案。
flex布局,flexible布局,弹性布局,都是指的flex布局,IE6-9不可用flex布局。
- 开启flex布局的叫flex-container
- flex-container里面的直接子元素叫做flex-items
两个可以开启flex布局:
- flex:开启后变成块级元素
- inline-flex:开启后变成行内元素
开启后有两种轴:
- 主轴:main axis,主轴开始位置:main start,主轴结束位置:main end,主轴大小:mian size
- 交叉轴:cross axis,交叉轴开始位置:cross start,交叉轴结束位置:cross end,交叉轴大小:cross size
应用在flex container上的css属性:
flex-direction,决定侧轴的方向,取值:row(默认值)、row-reverse、column、column-reverse
row——从左到右
row-reverse——从右到左
column——从上到下
column-reverse——从下到上
flex-wrap
nowrap,默认值,不换行 wrap,换行 wrap-reverse,多行(对比wrap,cross start与cross end相反)
flex-flow
flex-direction或flex-wrap的简写,可以省略其中一个,顺序任意
justify-content决定了flex-items在 main axis上的对齐方式。
flex-start(默认值):与main start对齐 flex-end:与main end对齐 center 居中对齐 space-between a.flex items之间的距离相等 b.与main start、main end两端对齐 space-evenly a.flex items之间的距离相等
b.flex items与main start、main end之间的距离等于flex items之间的距离 c.容器之间以及容器和父同期的距离相等 space-around a. flex items之间的距离相等 b. flex items与main start、main end之间的距离是flex items 之间距离的一半 c.仅是容器之间的距离相等
- align-items,决定了flex items在cross axis上的对齐方式
normal,在弹性布局中,效果跟stretch一样 stretch,当flex items在cross axis方向的size为auto时,会自动拉伸至填充flex container flex-start,与cross start对齐 flex-end,与cross end对齐 center,居中对齐 baseline,与基准线对齐,与flex-start相似,改变第一个容器文字大小就会有不一样的效果
- align-content,决定了多行flex items在cross axis上的对齐方式,用法与justify-content类似
stretch,默认值,与align-items的stretch类似 flex-start,与cross start对齐 flex-end,与cross end对齐 center,居中对齐 space-between a. flex items之间的距离相等 b. 与cross start、cross end两端对齐 space-around a. flex items之间的距离相等 b. flex items与cross start、cross end之间的距离是flex items之间距离的一半 c.容器之间的距离是容器距离边缘的两倍 space-evenly a. flex items之间的距离相等 b. flex items与cross start、cross end之间的距离等于flex items之间的距离
应用在flex items上的css属性:
flex是flex-grow || flex-shrink || flex-basis的简写,flex属性可以指定1个,2个或三个值。 单值语法:值必须为以下其中之一: a. 一个无单位数:它会被当作flex-grow的值 b. 一个有效的宽度值:它会被当做flex-basis的值 c. 关键字none,auto或initial 双值语法:第一个值必须为一个无单位数,并且它会被当作flex-grow的值 第二个值必须为以下之一: 一个无单位数:它会被当作flex-shrink的值 一个有效的宽度值:它会被当作flex-basis的值 三值语法: 第一个值必须为一个无单位数,并且它会被当作flex-grow的值 第二个值必须为一个无单位数,并且它会被当作flex-shrink的值 第三个值必须为一个有效的宽度值,并且它会被flex-basis的值
flex-grow,决定了flex items如何扩展。
可以设置任意非负数字(正小数、正整数、0),默认值是0 当flex container在main axis方向上有剩余size时,flex-grow属性才会有效 如果所有flex items的flex-grow总和sum超过1,每个flex items扩展的size为 flex container的剩余sizeflex-grow / sum 如果所有flex items 的flex-grow总和不超过1,每个flex item扩展的size为 flex container的剩余sizeflex-grow flex items扩展后的最终size不能超过max-width/max-height
- flex-basis用来设置flex items在main axis方向上的base size
auto,默认值 具体的宽度数值,如:100px 决定flex items最终base size的因素,从优先级高到低: max-width/max-height/min-width/min-height flex-basis width/height 内容本身的size
- flex-shrink,可以控制容器不收缩,尤其默认为nowrap情况下,决定了flex items如何收缩
可以设置任意非负数字(正小数、正整数、0),默认值是1 当flex items在main axis方向上超过了flex container的size,flex-shrink属性才会有效 如果所有flex items的flex-shrink总和超过1,每个flex item收缩的size为: a. flex items超出flex container的size收缩比例/所有flex items的收缩比例之和 b. 收缩比例=flex-shrinkflex item的base size c. base size就是flex item放入flex container之前的size flex items收缩后的最终size不能小于min-width\min-height
- order,决定了flex items的排列顺序
可以设置任意整数(正整数、负整数、0)值越小就越排在前面,默认值是0
- align-self,覆盖flex container设置的align-items
auto,默认值,遵从flex container的align-items设置 stretch、flex-start、flex-end、center、baseline,效果跟align-items一致