Skip to content
On this page

flex布局总结(老版本)

介绍

弹性盒子是 CSS3 的一种新的布局模式。

CSS3 弹性盒子 Flexible Box ,是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局方式。引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列、对齐和分配空白空间。

flex有两个版本 display: box (老版本) 和 display: flex (新版本)

设为 Flex 布局以后,子元素的floatclearvertical-align属性将失效。

接下来我们来看看老版本的flex布局是怎么样的.

轴的概念

我们先来看一个简单的flex布局:

html
<style>
#wrap{
    width: 300px;
    height: 300px;
    border: 1px solid black;
    margin: 50px auto;
    display: -webkit-box; /* 老版本flex */
}
.box{
    width: 50px;
    height: 50px;
    background: pink;
    text-align: center;
    line-height: 50px;
}
</style>
<div id="wrap">
    <div class="box">1</div>
    <div class="box">2</div>
    <div class="box">3</div>
    <div class="box">4</div>
</div>

这个结构中 #wrap 称为容器, .box 称为容器里的项目.

注意:老版本flex当项目总width超过容器时不会自动换行而是直接溢出!

flex老版本

如上图所示,flex布局中的有一个横向轴 X轴 和纵向轴 Y轴 箭头所指的方向为正方向, X轴 默认为主轴,所有的项目都是按主轴的正方向排列的,所以div虽然是块级标签依然可以同行显示.

项目在X轴上多出来的空间长度我们叫他 X轴富裕空间; 项目在Y轴上多出来的空间长度我们叫他 Y轴富裕空间;

容器的属性

1. -webkit-box-orient

控制主轴是 X轴 还是 Y轴 .

属性值是 horizontal 主轴则为 X轴 ; 属性值是 vertical 主轴则为Y轴

依然采用上面的布局方案,在 #wrap 上添加 -webkit-box-orient: vertical; ,我们发现项目沿Y轴排列,因为这时Y轴是主轴:

webkit-box-orient

2. -webkit-box-direction

控制主轴的方向

normal 为默认方向; reverse 为反方向.我们再在 #wrap 上添加 -webkit-box-direction: reverse; ,发现项目从下往上排列,因为主轴Y的正方向已经改成向上了.

-webkit-box-direction

3. -webkit-box-pack

分配 主轴富裕空间 的位置

start 在所有项目整体的(主轴为X轴:右边;主轴为Y轴:下边); end 在所有项目整体的(主轴为X轴:左边;主轴为Y轴:上边) ;center 在所有项目整体的(主轴为X轴:左右;主轴为Y轴:/上下); justify 在每个项目之间平均分配, 可以自己动手试试看有什么效果,我在这就测试一下继续在 #wrap 上添加 -webkit-box-pack: justify;:

-webkit-box-pack

4. -webkit-box-align

分配 侧轴富裕空间 的位置

start 在所有项目整体的(主轴为X轴:下边;主轴为Y轴:右边); end 在所有项目整体的(主轴为X轴:上边;主轴为Y轴:左边); center 在所有项目整体的(主轴为X轴:上下两边;主轴为Y轴:左右两边); 在 #wrap 上添加 -webkit-box-align: end;:

-webkit-box-align

项目的属性

-webkit-box-flex

将主轴上的富裕空间按比例分配到项目的width上

重新布局:

html
<style>
#wrap{
    width: 300px;
    height: 300px;
    border: 1px solid black;
    margin: 50px auto;
    display: -webkit-box; 
}
.box{
    width: 50px;
    height: 50px;
    background: blue;
    text-align: center;
    line-height: 50px;
    -webkit-box-flex: 1;
}
</style>
<div id="wrap">
    <div class="box">1</div>
    <div class="box">2</div>
    <div class="box">3</div>
    <div class="box">4</div>
</div>

在项目中添加 -webkit-box-flex: 1; 这里主轴富裕空间一共有300-50*4= 100 px ;一共有4个项目则每个项目分 1/4100*(1/4)= 25 px ,最终项目占的位置为 50+25=75 px ,看看效果:

-webkit-box-flex

项目分配了 主轴富裕空间 所以占满了主轴.

也可以单独给一个项目设置更多的比例,在css中添加

css
#wrap> .box:nth-child(1){
    -webkit-box-flex: 7;
}

这样第一个 .box 占了主轴富裕空间的 7/10 (一共把富裕空间分成了10分,第一个项目占七份,其它的各占一份) ,最终第一个项目占的位置为 50+100*(7/10)= 120 px ,看看效果:

flex