关于flex弹性盒子的整理

伸缩盒子模型控制的是父子关系

父元素:伸缩容器
子元素:伸缩项目
主轴:start-end
交叉轴(侧轴)

开启弹性盒子,必须在父元素中设置开启弹性布局

display: flex;

稍微低一点的版本需要加上前缀

display: -webkit-flex;

1、当不设置宽度的时候,内容撑开宽度
2、项目沿着主轴一次排列
3、高度默认撑满整个容器

1、当项目的宽度相加没有超过父级的宽度,那么项目不进行压缩
2、当项目的宽度现价超出父级的宽度,项目进行压缩,并且填满父级容器


一、flex容器 主轴方向flex-direction:

row/*row默认值:由左向右*/
row-reverse/*row-reverse:由右向左*/
column:主轴与侧轴发生对调/*colume:主轴由上向下*/
column-reverse/*column-reverse:主轴由下向上*/

flex容器 主轴方向布局方向老版本

-webkit-box-orient: horizontal;
-webkit-box-orient: vertical;
-webkit-box-direction: reverse;
-webkit-box-direction: normal;

老版本如果要实现反向和反方向需要书写两个属性


二、富余空间管理(主轴)

justify-content:   
    flex-start  /*默认 在主轴开始位置 一次排列*/   
    flex-end   /*右对齐到主轴结束位置(不是反转)*/  
    center   /*项目在主轴内居中*/   
    space-around:/*富裕空间包含项目*/   
    space-between:/*伸缩项目包含富裕空间*/

富余空间管理(主轴)老版本

-webkit-box-pack: start; --- 默认值:富裕空间在右边
-webkit-box-pack:end; --- 富裕空间在左边
-webkit-box-pack:center; --- 富裕空间包含伸缩项目的整体,使伸缩项目整体在中


三、富余空间管理(侧轴)

align-items:
    flex-start/*侧轴上对齐*/
    flex-end/*侧轴下对齐*/
    baseline/*基线对齐*/
    center/*侧轴居中*/
    stretch/*默认撑满侧轴*/

富余空间管理(侧轴)老版本

-webkit-box-align:
    start
    end
    center


四、弹性空间

flex-grow:1:
将富裕空间分配到项目上

-webkit-box-flex: 1;


例子:
.outer div:nth-child(1){
    width: 20%;
    /*justify-content: 只是控制富裕空间怎么排列,但是并没有把富裕空间分配给项目使用;*/
    
    /*将富裕空间分配给这个项目*/
    flex-grow: 1;
    background-color: #4c71ff;
}
.outer div:nth-child(2){
    width: 30%;
    flex-grow: 2;
    line-height: 100px;
    background-color: #ce89ff;
}

五、新版本特有

/*项目超出父级宽度换行*/
    flex-wrap: wrap;

    /*超出父级的宽度就压缩,不换行*/
    /*flex-wrap: nowrap;*/

    /*超出父级的宽度 换行并改变侧轴的start和end的的位置*/
    /*flex-wrap: wrap-reverse;*/

六、控制整体侧轴的富裕空间

 /*开启弹性盒子*/
display: flex;

/*项目超出父级宽度换行*/
flex-wrap: wrap;

/*侧轴居中,只在当前项目所在的行居中*/
align-items: center;

/*控制项目整体打包在侧轴的排列*/
/*align-content: flex-start;*/
/*align-content: flex-end;*/
align-content: center;

/*冲突:
    在项目换行后,侧轴的排列优先用align-content
    在项目没有换行时,侧轴的排列优先用align-items*/

/*在主轴居中*/
justify-content: center;

七、flex-flow:;

flex-flow: wrap column; //换行、方向的合写样式

八、项目的排列顺序(flex项目)

order: 1;
order排序,把排序元素先单独拿出来,让剩余元素先正常排列,排完之后,order元素在其后边再进行顺序排列
order是沿着主轴方向进行排序的

九、项目自身侧轴的富裕空间(flex项目)

元素自身侧轴控制.png
每一个项目控制自身的侧轴
    align-self: flex-start;
    align-self: flex-end;
    align-self: center;
    
案例:三个元素各自占一列


<style>
        .outer{
            width: 1000px;
            height: 300px;
            margin: 0 auto;
            border:1px solid #000;
            /*开启弹性盒子*/
            display: flex;
        }
        .outer div:nth-child(1){
            width: 50%;
            background-color: #4c71ff;
            align-self: flex-start;
        }
        .outer div:nth-child(2){
            width: 30%;
            background-color: #ce89ff;
            align-self: center;
        }
        .outer div:nth-child(3){
            width: 60%;
            background-color: #ffaf8a;
            align-self: flex-end;
        }
    </style>
</head>
<body>
<div class="outer">
    <div>11</div>
    <div>22</div>
    <div>33</div>
</div>
</body>

十、收缩率(flex项目)

当伸缩项目设置宽度,比容器宽度还要大时,元素并没有发生溢出的情况,那此时就出现一个东西叫 收缩因子(收缩率)
flex-shrink:拉伸因子 0 ---不拉伸
flex-shrink:收缩因子 默认值:1 --- 收缩

十一、子元素的基准值

flex-basis:0

十二、等分布局,在父级开启了display:flex; 子元素设置flex:1;

方案1:
    设置容器 flex新版本
    设置项目:flex-basis:0;flex-grow:1;
方案2:
    设置容器 flex老版本
    设置项目:width:0;-webkit-box-flex:1;
方案3:
    设置容器 flex新版本
    设置项目:flex:1;
    
flex:
    flex-basis,flex-grow,flex-shrink的缩写
例子:
flex:1 ;
     flex-basis:0;
     flex-grow:1;
     flex-shrink:1;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。