深度解析flexbox 布局
在CSS flexbox布局出现以前,如果要控制HTML元素的布局,要用到很多种奇萌的方式。
在水平方向.上得用f1oat控制左右对齐,稍-不注意,就会有浮动的元素飞来飞去~。
在垂直方向上就更是百家争鸣了:要么手动计算高度然后算出中心点,要么用line-
height和height的结合,要么用十之八九不生效的vertica1-align属性等等等等。
自从flex-box出现以后,一切似乎就豁然开朗了,水平垂直各种花式对齐,空间分配由你
做主。
当然,要用好它,用对它也不是一件容易的事,今天就给你说说flex-box布局,看
完之后你也能熟练的运用它!
开启Flexbox布局
假设有下边这么一-个html结构:
<style>
.flex1,
.flex2,
.flex3 {
background-color: #4fc08d;
}
</style>
<body>
<div class="flex">
<div class="flex1">flex 1</div>
<div class="flex2">flex 2</div>
<div class="flex3">flex 3</div>
</div>
</body>
一个div容器包含了三个div子元素,按照默认的布局方式进行排列。因为div是块级元
素,每个div占了整个一行的空间:
如果要开启容器的flex 布局,只需要在CSs里边给. f1ex设置display: flex 属性,同!
时为了演示效果,我给它加上了100px的高度:
.flex{
display: flex;
height: 100px;
}
可以看到里边的三个元素自动变成了一-行,因为flex默认是按行进行排列的。Flexbox 布
局是一维布局方式,要么按行排列,要么按列排列。
对齐方式:
Flex布局有-个隐式的坐标空间,水平方向有一条主轴(main-axis),垂直方向上有一条交
叉轴(cross-axis):
justify-content
控制主轴(即水平方向)对齐方式使用justi fy-content属性,它有下边几种对齐方式:
flex-start
flex-start是默认值,如果是从左到右的文字阅读习惯(LTR),就是靠左对齐。因为默认
的对齐方式,所以跟上边的例子没有什么区别:
center
居中对齐,此时整个flex被居中到了页面中间
flex-end
向右对齐
space-between
两端对齐,这种方式是第一个和最后一个元素贴边,中间元素平分剩余空间
space-evenly
分散对齐,所有元素都平分空间
space-around
跟space-evenly类似,但是左右两边留白为平分空间的1/2
align-items
控制交叉轴方向(即垂直方向).上的对齐方式使用align-items属性, 有下边几种对齐方
式:
stretch
stretch是align- items的默认值,它会自动把子元素拉伸成容器的高度,所以之前的例
子里子元素在垂直方向。上都占满了容器,只要改变容器的a1i gn-i tems的值,它就会变成内
容的高度。stretch 对齐效果如下:
flex-start
靠上对齐,在交叉轴开始的最上方,可以看到子元素不再占满容器宽度:
center
居中对齐
flex-end
靠下对齐
baseline
基线对齐,如果子元素文字尺寸和行高不同,则子元素会按照文字的基线进行对齐:
align-content
子元素可以通过设置align-self来控制自己在交叉轴上的对齐方式,例如把. f1ex3子元
素在垂直方向上靠下对齐:
.flex{
display: flex;
align- items: flex-start;
}
.flex3 {
align-self: flex-end;
}
在水平方向.上控制子元素对齐并没有justify-se1f属性,而是使用margin属性,通过把左
或右边距设置为auto来控制水平对齐,比如把flex3放到最右边:
.flex3 {
margin-left:auto;
}
排列方式
flex支持按行排布,也支持按列排布。按列排布时,主轴和交叉轴换了方向,但是align-
items和justify-content控制的轴线不变,即ali gn-items还是控制交叉轴,justify-
content控制主轴:
所以说,在水平方向.上对齐变成了使用align-items,垂直方向则用justify-content ,
。
要使flex按列排布,只需要设置:
flex-direction: column;
来看几个例子:
水平居中对齐
.flex{
display: flex;
flex-direction: column;
align-items: center;
}
垂直居中对齐
.flex{
display: flex;
flex-direction: column;
justify-content: center;
}
另外flex布局也可以支持反向按行和列布局,相当于按容器中心线进行180度翻转:
row-reverse
.flex{
display: flex;
flex-direction: row-reverse;
}
列模式下会垂直翻转
.flex{
display: flex;
flex-direction: column-reverse;
}
以上就是对flexbox布局的一个详细演示
注:本文转自极客·Geek社团公众号,如有侵权联系删除