一.弹性盒子(Flex Box)
学习弹性盒子之前,需要认识到2个基本概率:
①容器:需要添加弹性布局的父元素
②项目:弹性布局容器中的每个子元素
认识两个基本方向:
①主轴:弹性布局中,会通过属性规定水平/垂直方向为主轴
②交叉轴:与主轴垂直的另一个方向
任何一个容器都可以指定为flex布局:none、block、inline、inline-block
1.基本概念
①弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器
②容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)
③主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end
④项目默认沿主轴排列,单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size
2.display
①弹性容器通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。弹性容器内包含了一个或多个弹性子元素
②弹性盒子只定义了弹性子元素如何在弹性容器内布局。弹性子元素通常在弹性盒子内一行显示。默认情况每个容器只有一行
3.容器属性
3.1.flex-direction
.box{
/*flex属性决定主轴的方向*/
flex-direction:column-revese;
/*主轴为垂直方向,起点在下沿*/
flex-direction:column;
/*主轴为垂直方向,起点在上沿*/
flex-direction:row-revese;
/*主轴为水平方向,起点在下沿*/
flex-direction:row;
/*主轴为水平方向,起点在上沿*/
}
3.2.flex-wrap
.box{
/*flex-wrap属性定义:如果一条轴线排不下,可以换行*/
flex-wrap:nowrap;
/*默认值,不换行*/
flex-wrap:warp;
/*换行,第一行在上方*/
flex-wrap:wap-reverse;
/*换行,第一行在下方*/
}
3.3.justify-content
.box{
/*justify-content属性定义了项目在主轴上的对齐方式*/
justify-content: flex-start;
/*默认值:左对齐*/
justify-content: flex-end;
/*右对齐*/
justify-content: center;
/*居中*/
justify-content: space-between;
/*两端对齐,项目之间间隔相等*/
justify-content: space-around;
/*每个项目两侧间隔相等*/
justify-content: space-evenly;
/*每个项目之间的距离相等*/
}
3.4.align-content
.box{
/*align-content属性在弹性容器内的各项没有占用交叉轴上所有可用的空间时对齐容器内的各项*/
align-content:flex-start;
/*交叉点的起点对齐*/
align-content:flex-end;
/*交叉轴的终点对齐*/
align-content:center;
/*交叉轴的中点对齐*/
align-content:space-between;
/*与交叉轴两端对齐,轴线之间间隔平局分布*/
align-content:space-around;
/*每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍*/
align-content:strech;
/*默认值:轴线占满整个交叉轴*/
}
当只有一行弹性项目时,此属性不起作用
3.5.align-items
.box{
/*align-items属性定义项目在交叉轴上如何对齐*/
align-items: flex-start;
/*交叉轴的起点对齐*/
align-items: flex-end;
/*交叉轴的终点对齐*/
align-items: center;
/*交叉轴的中点对齐*/
align-items: baseline;
/*项目的第一行文字的基线对齐*/
align-items: strech;
/*默认值:如果项目未设置高度或设为auto,将占满整个容器的高度*/
}
3.6.align-content和align-items的区别
①align-items是针对每一个子项起作用,它的基本单位是每一个子项,在所有情况下都有效果
②align-content属性是将flex子项作为一个整体起作用,它的基本单位是子项构成的行,只在两种情况下有效果:子项多行且flex容器高度固定;子项单行,flex容器高度固定且设置了flex-wrap:wrap
align-content:
align-items:
justfiy-content:
4.项目属性
4.1.flex-grow
.item{
/*flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大*/
flex-grow: <number>; /* default 0 */
}
①如果所有项目的flex-grow属性都为1,则它们将等分剩余空间
②如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍
4.2.flex-shrink
.item{
/*flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小*/
flex-shrink: <number>; /* default 1 */
}
①如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小
②如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
③负值对该属性无效
4.3.align-self
.item{
/*align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性*/
align-self: auto;
/*继承父类的aligen-items属性*/
align-self:flex-start | flex-end | center | baseline | stretch;
/*类同align-items*/
}
4.4.order属性
默认值为0,用于决定项目排列顺序,数值越小,项目排列越靠前。
4.5.flex属性
①flex属性是flex-grow,flex-shrink与flex-basis三个属性的简写,用于定义项目放大,缩小与宽度,默认值0 1 auto
②该属性有两个快捷键值,分别是auto(1 1 auto)等分放大缩小,与none(0 0 auto)不放大不缩小
③flex为一个非负数字n:该数字为flex-grow的值, flex为一个长度或百分比L:视为flex-basis的值,flex为一个非负数字n和一个长度或百分比L:分别为flex-grow和flex-basis的值