flex布局原理
1.flex是flexible Box的缩写.意为弹性布局 ,用来为盒装模型提供最大的灵活性,任何一个容器都可以指定为flex布局
2.当我们为父盒子设为flex布局以后,子元素的float , clear和vertical-align属性将失效
因为flex布局可以让子元素一行内显示,不需要浮动,所以就不需要清除浮动
flex布局还可以设置盒子垂直居中,之前只能设置水平居中
3.flex布局又叫伸缩布局,弹性布局,伸缩盒布局,弹性盒布局
4.采用flex布局的元素,称为flex容器 (flex container) 简称 容器
5.它的所有子元素自动称为容器成员,称为flex项目 (flex item) 简称项目
总结: 就是通过给父盒子添加display:flex属性.来控制盒子的位置和排列方式
父项常见属性
flex-direction : 设置主轴的方向 (direction: 方向)
justify-content :设置主轴上的子元素排列方式,
flex-wrap :设置子元素是否换行
align-content : 设置侧轴上的子元素的排列方式 (多行)
align-items : 设置侧轴 上的子元素排列方式 (单行)
flex-flow : 复合属性,相当于同时设置了 flex-direction 和 flex-wrap
flex-direction 设置主轴的方向
在 flex 布局中,是分为主轴和侧轴两个方向,同样的叫法有 : 行和列、x 轴和y 轴
默认主轴方向就是 x 轴方向,水平向右
默认侧轴方向就是 y 轴方向,水平向下
注意: 主轴和侧轴是会变化的,就看 flex-direction 设置谁为主轴,剩下的就是侧轴。而我们的子元素是跟着主轴来排列的
flex-direction可以设置的值:
row 默认值:从左到右
row-reverse 从右到左 (倒着排列,子盒子顺序会变.)
column 从上到下
column-reverse 从下到上 (倒着排列,子盒子顺序会变.)
justify-content 设置主轴上的子元素排列方式
介绍 :
1.justify-content 属性定义了项目在主轴上的对齐方式(项目就是子元素)
2.注意: 使用这个属性之前一定要确定好主轴是哪个
属性值 说明
flex-start (start:开始) 默认值,从头部开始,如果主轴是X轴,则从左到右
flex-end (end:结束) 从尾部开始排列,如果主轴是X轴,则贴着右边对齐. 主轴是Y轴,则贴着底部对齐.
center (center:中间) 在主轴居中对齐(如果主轴是X轴则水平居中)
space-around (空间-周围: 周围空间一致 平分) 平均分配剩余空间(不贴边)
space-between (空间-中间) 再平均分配剩余空间 (重要) (先两边贴边)
flex-wrap 设置是否换行
默认情况下,项目都排在一条线(又称”轴线”)上。
flex-wrap属性定义,flex布局中默认是不换行的。
nowrap : 不换行
wrap : 换行
align-items 设置侧轴上的子元素排列方式 (单行)
1.该属性是控制子项在侧轴(默认是y轴)上的排列方式 在子项为单项(单行)的时候使用
2.该属性在控制盒子水平居中和垂直居中时使用
flex-start 从头部开始 (默认侧轴为Y时,顶部对齐 从左往右)
flex-end 从尾部开始 (默认侧轴为Y时,底部对齐 从左往右)
center 居中显示
stretch 拉伸 ( 默认值) (默认侧轴为Y时,子盒没有高度时,将和父级一样高)
效果 :
默认x主轴时 -水平垂直居中:
justify-content: center;
align-items: center;
y主轴时 - 水平垂直居中:
flex-direction: column;
justify-content: center;
align-items: center;
align-content 设置侧轴上的子元素的排列方式(多行)
设置子项在侧轴上的排列方式,并且只能用于子项出现换行的情况(多行) 在单行下是没有效果的
属性值 说明
flex-start 默认值:在侧轴的头部开始排列 第二行紧贴第一行
flex-end 在侧轴的尾部开始排列 (同上)
center 在侧轴中间显示
space-around 子项在侧轴平分剩余空间
space-between 子项在侧轴先分布在两头,再平分剩余空间
stretch 设置子项元素高度平分父元素高度
注意 :
我们需要多添加几个元素,然后换行: flex-wrap:wrap
因为有了换行,此时我们侧轴上控制子元素的对齐方式我们用align-content
align-content 和align-items区别
1.align-items适用于单行情况下,只有上对齐,下对齐,居中和拉伸
2.align-content 适应与换行(多行)的情况下 (单行情况下无效) , 可以设置上对齐,下对齐,居中,拉伸以及
平均分配剩余空间等属性值
3.总结: 单行找align-items 多行找align-content
flex-flow属性是flex-direction和flex-wrap属性的复合属性
语法 :flex-flow : row wrap ;
flex布局子项常见属性 :
1.flex子项目占的分数
2.align-self控制子项自己再侧轴的排列方式
3.order属性定义子项的排列顺序(前后顺序)
flex属性
flex属性定义子项目分配剩余空间,用flex来表示占多少份数
align-self 控制子项自己在侧轴上的排列方式
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性
默认值为auto , 表示继承父元素的align-items属性,如果没有父元素,则等同于stretch
语法:
span : nth-child (2) { align-self : flex-end; }
总结: align-items 是控制所有的子项,而align-self是控制单个子项
order属性定义项目的排列顺序
数值越小,排列越靠前,默认为0
注意 : 和 z-index不一样
语法 : .item { order: