美文网首页
CSS阶段五:flex伸缩盒模型,自适应布局

CSS阶段五:flex伸缩盒模型,自适应布局

作者: 蘭小木 | 来源:发表于2020-01-18 15:17 被阅读0次

    flex/inlineflex 伸缩盒模型(快速布局利器)

    该元素即成为伸缩容器(flex container

    伸缩容器的子元素自动升级为伸缩项目(flex item

    display = flex;
    

    特点:

    • 伸缩项目默认在一行排列。

    • 子元素自动升级为块元素。

    • 所有伸缩项目默认在主轴的 start 处排列。

    • 主轴默认从左到右

    • 侧轴默认从上到下

    • 伸缩项目也可以再次设置为flex,即flex可以互相嵌套。

    伸缩容器样式

    justify-content

    设置主轴排列样式

    可选值:

    • flex-start (默认值)
    • flex-end 此时所有的伸缩项目在伸缩容器主轴的end处排列
    • center 所有的伸缩项目位于伸缩容器主轴的中间处
    • space-between 此时伸缩项目沿着伸缩容器的主轴均匀分布
    • space-around 伸缩项目沿着伸缩容器的主轴均匀分布,但是剩余空间会包裹着每个伸缩项目

    align-items

    设置侧轴对齐方式

    • stretch 每个伸缩项目会沿侧轴被拉伸
    • flex-start 所有伸缩项目位于伸缩容器侧轴start处
    • center 所有伸缩项目位于伸缩容器侧轴中部
    • flex-end 所有伸缩项目位于伸缩容器侧轴end处
    • baseline 主轴中伸缩项目基线最大的那个伸缩项目的基线作为所有伸缩项目的对齐基线

    flex-direction

    主轴方向

    • row(默认方向)
    • row-reverse 主轴方向从右到左,侧轴方向从上到下
    • column 主轴从上到下,侧轴从右到左
    • column -reverse 主轴从下到上,侧轴从右到左

    flex-wrap

    伸缩项目在主轴空间不足时是否被压缩

    • nowrap (默认值) 每个伸缩项目都会被按比例被压缩。

        一、需要压缩的宽度
        200 + 200 + 200 – 400 = 200
        二、“总压缩基数”
        200*1 + 200* 1 + 200*1 = 600
        三、每个伸缩项目实际压缩率
        200*1/ 600 =  0.3333
        200*1/ 600 = 0.3333
        200*1/ 600 = 0.3333
        四、每个伸缩项目实际需要压缩空间
        200 * 0.3333 =  66.6
        200 * 0.3333 =  66.6
        200 * 0.3333 =  66.6
        五、每个伸缩项目实际的宽度
        200 – 66.6 = 133.4
        200 – 66.6 = 133.4
        200 – 66.6 = 133.4
      
    • wrap 主轴空间不足时,伸缩项目不会被压缩,自动换行,保持原来的大小。

    • wrap-reverse 让伸缩项目自动换行,保持原来的大小。但此时伸缩项目在主轴flex-start和侧轴flex-end处开始排列

    align-content

    主轴空间不足时,子项目在侧轴分布样式

    • stretch 伸缩项目会沿侧轴被拉伸
    • flex-start 伸缩项目位于伸缩容器侧轴start处
    • center 伸缩项目位于伸缩容器侧轴中部
    • flex-end 伸缩项目位于伸缩容器侧轴end处
    • space-between 项目位于各行之间留有空白的容器内
    • space-around 项目位于各行之前、之间、之后都留有空白的容器内。

    flex-flow

    可以设置 flex-flow 来实现 flex-direction 和 flex-wrap 简写。

    flex-flow : column wrap 
    

    单个伸缩项目样式

    flex-basis

    设置元素高度,使用flex-basis为元素指定宽度,效果与width相同

    align-self

    单个伸缩项目,伸缩容器侧轴的位置

    • stretch 伸缩项目会沿侧轴被拉伸
    • flex-start 伸缩项目位于伸缩容器侧轴start处
    • center 伸缩项目位于伸缩容器侧轴中部
    • flex-end 伸缩项目位于伸缩容器侧轴end处
    • baseline 主轴中伸缩项目基线最大的那个伸缩项目的基线作为所有伸缩项目的对齐基线

    order

    重新设置伸缩项目在主轴方向的排列顺序,

    • 0 --- 默认值,沿着主轴从start -> end
    • 大于0 重新按order设置的数字排序(start -> end)数值越大越靠后

    flex-grow

    设置每个伸缩项目如何分配主轴空间,伸缩项目会按比例分配空间大小

    • n 伸缩项目会按照数值比例来分配主轴空间

    flex-shrink

    设置压缩率,主轴空间不足时伸缩项目会按照压缩率被压缩,默认1

    • n 会按照设置的数值按照比例进行压缩,设置为0是表示项目不会被压缩

    自适应布局

    左边自适应右边固定宽度

     /*
            需求:
            左侧自适应(随着浏览器窗口宽度的变化而变化)
            右侧固定宽度
    
            1.两列都需要设置浮动
            2.第一列设置 100% 宽度,同时设置右侧外边距为负,绝对值 = 第二列的宽度
            3.第一列的内容需要一个正常文档流的块元素承载,设置右侧外边距 = 第二列的宽度
        */
    
    
        .col-1 {
            width: 100%;
            height: 210px;
            background-color: blue;
            font-size: 72px;
            margin-right: -200px;
            float: left;
        }
    
        .col-2 {
            width: 200px;
            height: 200px;
            background-color: orange;
            margin-top: 0px;
    
            float: left;
        }
    
        .col-left{
            margin-right: 200px;
        }
    

    右边自适应左边固定

        需求:
        右侧自适应(随着浏览器窗口宽度的变化而变化)
        左侧固定宽度
    
        1.第一列设置固定的宽度,设置左浮动。
        2.第二列使用overflow: hidden 开启BFC,重新计算元素的宽度,(切记不要设置固定,使用浏览器默认值)
        */
    .col-1 {
        width: 200px;
        height: 200px;
        background-color: blue;
        float: left;
    }
    .col-2 {
       /* width:200px;*/
        height: 210px;
        background-color: orange;
        overflow: hidden;
    }
    

    两边固定中间自适应

    需求:两边固定,中间自适应
    
        .layout {
            height: 200px;
            background-color: orange;
        }
        .col-left{
            width: 100%;
            float: left;
            height: 200px;
            background-color: pink;
            margin-right: -200px;
        }
        .col-right{
            float: left;
            width: 200px;
            height: 200px;
            background-color: #254282;
        }
        .content{
            margin-right: 200px;
        }
    
        .col-left-1{
            width: 200px;
            height: 200px;
            float: left;
            background-color: #ff0000;
        }
    
        .col-left-2{
            height: 210px;
            background-color: #bbbbbb;
            overflow: hidden;
        }
    

    多列等宽

    制作多列等宽自适应布局
    
        1.父元素  display:  table; width: 100%
        2.布局元素(子元素 ) display: table-cell;
        3.子元素之间的空隙,通过一个正常的div分割即可。
        4.如果存在多行,需要在包裹一个 display: table-row(<tr>)
    

    我们推荐在局部布局中使用!不推荐整体布局!

    .table-box{
            display: table;
            width: 100%;
        }
        .box {
            height: 200px;
            width: 33.3333333%;
            display: table-cell;
        }
        .box1{
            background-color: red;
        }
        .box2{
            background-color: blue;
        }
        .box3{
            background-color: gold;
        }
    
        .white-space{
            height: 200px;
            width: 5px;
            background-color: #fff;
        }
    

    相关文章

      网友评论

          本文标题:CSS阶段五:flex伸缩盒模型,自适应布局

          本文链接:https://www.haomeiwen.com/subject/rjikzctx.html