flex

239 阅读5分钟

Flex是Flexible Box的缩写,顾名思义为“弹性布局”,用来为盒装模型提供最大的灵活性。

flex有四大概念:容器 项目 主轴 交叉轴

容器:采用Flex布局的元素,称为Flex容器(flexcontainer),简称“容器”。

例如:
        <div class="container" style=" display:flex;">
        </div>
    给这个div加上一个display:flex,它就变成了容器

容器默认存在两个轴:主轴、交叉轴

主轴:在容器中,项目默认是按主轴方向排列,默认是从左向右排列

交叉轴:与主轴垂直的那个轴

项目:容器的直接子元素自动成为容器成员,成为flex项目(flex item),简称“项目”。

例如:
        <div class="container" style=" display:flex;">
            <div class="son"></div>
            <div class="son"></div>
            <div class="son"></div>
        </div>
       其中的三个直接子元素div就是项目 

容器的相关属性:

    1、flex-direction:改变主轴方向
        column-reverse:表示列的反方向作为主轴的正方向,主轴为垂直方向,起点在下沿
        column:表示列作为主轴,主轴为垂直方向,起点在上沿
        row:表示行作为主轴,主轴为水平方向,起点在左端
        row-reverse:表示行的反方向作为主轴的正方向,主轴为水平方向,起点在右端

    2、flex-wrap:项目足够多的时候,是否换行。  
        换行:wrap  不换行:nowrap  换行反转:wrap-reverse
        不换行的情况:

    换行的情况:

    换行反转的情况:

    3、* flex-flow:flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
    4、justify-content:处理富余空间,项目在主轴上的对齐方式              flex-start:默认左对齐 
       flex-end:右对齐   
       center:居中
       space-between:两端对齐,项目之间的间隔相等  
       space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
       
       flex-start的情况:

       flex-end的情况:

       center的情况:

       space-between的情况:

       space-around的情况:

    5、align-items: 定义项目在交叉轴上如何对齐  
       flex-start:交叉轴的起点对齐 
       flex-end:交叉轴的终点对齐 
       center:交叉轴的中点对齐
       baseline:项目的第一行文字的基线对齐。
       stretch:如果项目未设置高度或设为auto,将占满整个容器的高度。
       
       flex-start的情况:

       flex-end的情况:

       center的情况:

       baseline的情况:

       stretch的情况:
       例如:
       .container{
        display:flex;
        width: 500px;
        height: 500px;
        border: 1px solid red;
        align-items: stretch;
       }
       .son{
        width: 100px;
        height: auto;
       }
        <div class="container">
            <div class="son" style="background-color: royalblue;">d</div>
            <div class="son" style="background-color: palegreen;">e</div>
            <div class="son" style="background-color: gainsboro;">f</div>
        </div>

    6、align-content:当有多根主轴时,多根主轴的对齐方式。相当于处理垂直方向上的富余空间。
        flex-start:与交叉轴的起点对齐。
        flex-end:与交叉轴的终点对齐。
        center:与交叉轴的中点对齐。
        space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
        space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
        stretch(默认值):轴线占满整个交叉轴。
        
        flex-start的情况:

        flex-end的情况:

        center的情况:

        space-between的情况

        space-around的情况:

项目的相关属性:

    1、order:是用来改变项目的顺序的,数值越小,排列越靠前,默认为0.
    例如:
    <div class="son" style="background-color: royalblue;order: 1">1</div>
    <div class="son" style="background-color: palegreen;order: 3">3</div>
    <div class="son" style="background-color: gainsboro;order: 2">2</div>
    <div class="son" style="background-color: peru;">d</div>

    2、flex-grow:让某个项目生长,定义项目的放大比例,默认值为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目为1,则牵着占据的剩余空间将比其他项多一倍
    例如:
        默认值为0的情况

        flex-grow=1的情况:

    3、flex-shrink:让某个项目压缩,定义了项目的缩小比例,默认为1,即如果空间不足,
    该项目将缩小。
    如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。
    如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
    
    默认为1的情况(容器宽度为500px,5个宽度为100px的项目):

    默认为1的情况(容器宽度为500px,6个宽度为100px的项目):

    一个项目的flex-shrink属性为0,其他项目都为1的情况:

    4、flex-basis:项目在主轴上占据的大小,flex-basis属性定义了在分配多余空间之前,
    项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。
    它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如
    350px),则项目将占据固定空间。
    例如:
    <div class="son" style="background-color: plum;">b</div>
    <div class="son" style="background-color: rosybrown;flex-basis: 200px;">c</div>
    <div class="son" style="background-color: rebeccapurple;">c</div>

    5、flex:上面几个属性的简写方式
    6、align-self:单独设置某个项目的对齐方式,单独一个项目在交叉轴的对齐方式。
    允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,
    表示继承父元素的align-items属性,
    如果没有父元素,等同于stretch。
    auto | flex-start | flex-end | center | baseline | stretch
    flex-start的情况:

    flex-center的情况:

    flex-end的情况: