Skip to content

伸缩盒模型flexbox

伸缩盒模型也叫弹性盒模型,或flexBox。它决定一个盒子在其它盒子中的分布,以及如何处理可用的空

间。使用该模型,==可以轻松的创建“自适应”浏览器窗口的流动布局==。

flexbox是一个很新的东西,在w3c希望可以使用flexbox实现一些更复杂的布局和应用。传统盒模型基于

HTML文档流排列,使用弹性盒模型可以规定特定的顺序。要开启弹性盒模型,只需要设置display的属性值

flex,因为它是CSS3中为display新添加的值类型。

==目的:在浏览器窗口变化时,盒子相应改变大小。==

==当我们为父盒子设为flex布局以后,子元素的float,clear和vertical-align属性将失效。==

注:但是设置了flex的本元素的float等属性不会失效!

flexbox的基础知识

由于 flexbox是一个整体的模块,它们之中一些属性是在父容器上设置,而一些是在子容器上设置。

一个flexbox的基本结构:

css
.box{ 
        display: flex;
    }    /*最外层的父容器,在父容器中定义此容器为弹性布局*/
.item1{ 
        flex-grow: 1; 
        background:pink
      }       /*flex-grow占1比例*/
.item2{ 
        flex-grow: 2; 
        background:orange
      }     /*占2比例*/
.item3{ 
        flex-grow: 3; 
        background:red
      }        /*占3比例*/
html
<div class="box">
    <div class="item1">1</div>
    <div class="item2">2</div>
    <div class="item3">3</div>
</div>

![image-20220408151620687](D:\downloads\typora picture\image-20220408151620687.png)

1.首先规定哪个是父容器,父容器中包含多个“项目”(每个子div),==项目是可以在父容器中弹性布局==

的。

2.其次还可以==规定父容器中要怎么来显示它里面的项目,如是否换行、项目排列方向等。==

一、父容器常用属性

1.display

display: flex; 定义一个flex容器

新弹性盒:设置父元素是一个弹性盒,==子元素会自动水平排列==(就不需要float了)

2.justify-content

justify-content: flex-end;

设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式(也就是左对齐,右对齐,居中)

image-20220408152311776

space-between:相当于自动水平均分排列,但是顶着左右两边

space-around:相当于自动水平均分排列,但是不顶着左右两边

3.align-items

align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式(垂直对齐方式)

image-20220408152728039

4.flex-wrap

flex-wrap: wrap; 让弹性盒元素在必要的时候拆行(换行)

也就是元素里面的内容太多放不下时,大小不够用时,就会自动拆行

5.min-width

默认伸缩盒是随着窗口大小来缩小比例的

还可以设置一个min-width:,当达到这个值时,盒子就不会随着窗口伸缩了,显示不出来的就直接被覆盖

image-20220408160533279
css
#box1{
    width:100%;
    min-width:960px;
    /*height:80px;*/
    border:1px solid blue;
    display: flex;
    /*水平对齐方式*/
    /*justify-content: center;*/
    /*justify-content: space-between;*/
    justify-content: space-around;
    /*垂直对齐方式*/
    align-items:center;
    /*折行*/
    flex-wrap: wrap;
}

6.flex-direction

因为默认的是水平布局,如果不加这个就是水平布局

可以设置子项目垂直布局

css
/*flex-direction 设置子容器垂直布局   取值 column 列(垂直布局效果)*/
flex-direction: column;

7.align-content

决定在次轴方向的排列的效果

和justify-content在主轴上面的效果是一样的

相当于比align-items对于垂直方向的布局更加强大,align-items只能指定对齐方式(即开始的位置)

二、子容器常用属性

1.flex-grow

伸缩盒中的每一个元素称为一个项目。

flex-grow: number; ==number就是这个项目所占的份量,最后会算一个所占的比例进行分配==

注:要理解按照比例:并不是加起来等于多少,而是互相之间的一个比例!!

一个数字,规定项目将相对于其他灵活的项目进行扩展的量。默认值是 0。

.item1

.item2

.item3

这样就不需要写子元素的width了

css
#box1>div{
    /*width: 35%;*/
    height:60px;
    border:1px solid green;
}
#box1>div:first-child{
    flex-grow: 1;
}
#box1>div:nth-child(2){
    flex-grow: 5;
}
#box1>div:last-child{
    flex-grow: 2;
}

2.扩展:旧的伸缩盒

伸缩盒从被提出到如今一直在修改,所以这里涉及到了新老写法

bash
伸缩盒最老版本
display:box;  
将对象作为弹性伸缩盒显示(火狐和webkit内核都支持display:-webkit-box;或display:-moz-box;
子元素   box-flex:;

伸缩盒过渡版本
display:flexbox;  
将对象作为弹性伸缩盒显示

伸缩盒最新版本
display:flex;  
将对象作为弹性伸缩盒显示

3.总结

1.flex只能对它子元素起作用,不论是块级还是行内。 但是一定不能对它的子元素的子元素起作用。

2.当我们为父盒子设为flex布局以后,子元素的float,clear和vertical-align属性将失效。

注:但是设置了flex的本元素的float等属性不会失效!

image-20221016231253896