很早以前,做小程序的时候我便开始接触这种布局方式,开始时主要看了网上几篇关于 FlexBox 布局的讲解,但是看完还是比较模糊,我一直寻找比较官方的介绍,直到学前端的时候才找到了 MDN,看完 MDN 上的介绍使我对 FlexBox有了深刻的理解。学习这种布局方式建议以官方文档为主,其它教程为辅。
.main {
background-color: antiquewhite;
display: flex;
width: 400px;
height: 60px;
flex-direction: row;
margin-bottom: 10px;
}
.space-around {
justify-content: space-around;
}
.center {
justify-content: center;
}
.end {
justify-content: flex-end;
}
<div class="main">
<div>前端小课</div>
<div>FlexBox布局</div>
<div>公众号:素燕</div>
</div>
flex-container :布局容器,使用 display:flex 的标签;
flex-item : 容器中的直接子元素;
main-axis :主轴,布局方向为 row 或者 row-reverse 时它是水平方向。布局方向为 column 或者 column-reverse 时它是垂直方向。
cross-axis : 纵轴,与主轴垂直的轴;
main-start : 主轴的起点,布局方向为 row 时它的起点在左侧,row-reverse 为右侧。布局方向为 column 时起点在顶部,column-reverse 时起点为底部。
main-end : 主轴结束的点,与 main-start 相反;
cross-start : 纵轴的起点;
cross-end :纵轴的结束点,与 cross-start 相反;
flex-container 和 flex-item 都有自己的属性,容器的属性是用来控制所有 flex-item 的布局,以「组」的形式来控制 item 的排列方式。而 item 的属性是用来「单独」控制自己该如何显示。常用的属性:
容器属性
1.flex-direction: 布局方向,它决定 flex-item 是从左到右、从右到左、从上到下、还是从下到上进行布局,它会影响主轴的方向,以及items 的布局起点位置。它主要包含 4 个值:
row(默认):从水平方向的左侧开始布局;
row-reverse:从水平方向的右侧开始布局;
column:从垂直方向的顶部开始布局;
column-reverse: 从垂直方向的底部开始布局;
.main {
display: flex;
flex-direction: row;
}
2. justify-content : 它决定「 主轴 」items 的对齐方式,flex-direction 会影响主轴的方向,这一点需要注意,主轴不一定是水平方向,不能把 justify-content 看做是控制水平方向的对齐方式。它主要有以下几个值:
flex-start(默认):与主轴的起始位置(main start)对齐;
flex-end:与主轴的结束位置(main end)对齐;
center:居中于主轴;
space-around: 左右边距是中间的 1/2;
space-evenly: 每个 item 的间距相等;
space-between: 左右无边距;
下图是 flex-direction: row 的情况:
3.align-items: 它决定「纵轴」items 的对齐方式,flex-direction 会影响纵轴的方向,这一点需要注意,纵轴不一定是垂直方向,不能把 align-items 看做是控制垂直方向的对齐方式。它主要有以下几个值:
flex-start(默认):与纵轴的起始位置(cross start)对齐;
flex-end:与纵轴的结束位置(cross end)对齐;
center:居中与纵轴;
baseline:与基线对齐;
stretch:扩展满纵轴;
nowrap(默认):单行显示;
wrap:多行显示;
wrap-reverse:多行显示;
6.align-content: 如果为「多行」时,它表示在「 纵轴 」方向的对齐方式。它的值与 justify-content 值相同。
前端下课的 demo 以后都统一放到这里,star 以备忘 :
https://github.com/lefex/FE/tree/master/%E7%AC%AC%E4%BA%8C%E9%98%B6%E6%AE%B5/demo/flex
BAT前端团队
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox