flex 布局原理

Flex布局原理就是:给父盒子添加flex属性,来控制子盒子的位置排 列方式从而实现flex布局

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

Flex布局又叫伸缩布局、弹性布局、伸缩盒布局、弹性盒布局、flex 布局


flex 布局父项常见属性

改变主轴方向可通过设置flex-direction来改变

row(默认值):主轴为水平方向,起点在左端。 row-reverse:主轴为水平方向,起点在右端。 column:主轴为垂直方向,起点在上沿。 column-reverse:主轴为垂直方向,起点在下沿。


  • Flex布局中默认的主轴是row,x轴
  • 如果想改变主轴方向可通过设置flex-direction来改变
  • flex-direction:column;将主轴改为y轴,纵轴
  • flex-direction:row; 将主轴改为x轴,横轴
  • flex-direction:row- reverse;主轴为x轴,并且翻转
  • flex-direction:column- reverse;主轴为y轴,并且翻转

justify-content设置主轴子元素排列

  • 通过justify-content能够设置主轴子元素排列形式
  • 值为flex-start 所有子元素在主轴头部显示
  • 值为flex-end 所有子元素在主轴尾部显示
  • 值为flex-center 所有子元素在主轴居中对齐
  • 值为space-around 所有子元素平分剩余空间
  • 值为space-between 所有子元素先两边贴边在平分剩余空间

flex-wrap子元素是否换行

  • 它可能取三个值。 (1)nowrap(默认):不换行。 (2)wrap:换行,第一行在上方。 (3)wrap-reverse:换行,第一行在下方。
  • 如果想要换行效果设置flex-wrap:wrap

align-items设置侧轴子元素排列

  • 利用align-items能够设置侧轴元素对齐的方式在子项为单项(单行) 的时候使用
  • align-items的值为flex-start 表示从头开始
  • align-items的值为flex-end 表示从结尾开始
  • align-items的值为center 表示居中显示
  • align-items的值为stretch 会将子元素拉伸

align-content设置侧轴子元素排列

  • Align-content适应于换行(多行)的情况下(单行情况下无效), 可以设置 上对齐、 下对齐、居中、拉伸以及平均分配剩余空间等属 性值

  • Align-item和align-content的区别单行找 align-items 多行找 align-content

flex-flow 就是flex-direction和flex-wrap的合写

flex 布局子项常见属性

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

flex用来设置分配剩余空间的比列的

flex 可以使用 百分比 来进行 标识 flex:20% (配合换行元素 flex-wrap)

  • 剩余空间是指父盒子的宽度减去没有设置flex的盒子的宽度
  • 在将剩余空间按占比分配给各个子盒子
  • 比列计算:当前子盒子的flex数值/所有flex的总和

使用 flex 完成圣杯布局

<style>
    .app {
        width: 100%;
        height: 300px;
        background-color: pink;
        display: flex;
    }

    .ac {
        display: block;
        width: 200px;
        border: 1px solid black;
        height: 100%;
    }
/* 子类选择器  nth-child */
    div span:nth-child(2) {
        flex: 1;
        background-color: #f2f2ff;
        text-align: center;
        font-weight: bold;
        
    }
</style>

<body>

    <div class="app">

        <span class="ac"> 200 px</span>
        <span class="ac">圣杯布局</span>
        <span class="ac">333</span>

    </div>

</body>

align-self 控制子项目自己在侧轴上的排列方式;

  • flex-end
  • flex-start

order 排列顺序 默认为0

  • order: -1;

flex-grow属性

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

.item {
  flex-grow: <number>; /* default 0 */
}

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

flex-shrink属性

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

.item {
  flex-shrink: <number>; /* default 1 */
}

如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。 负值对该属性无效。

容器 父元素

  • 容器的布局方向

  • 容器的排列方向

  • flex-direction 控制主轴是哪一根,控制主轴的方向 row; 从左往右的x轴 row-reverse;从右往左的x轴 column; 从上往下的y轴 column-reverse;从下往上的y轴

  • 富裕空间的管理 只决定富裕空间的位置,不会给项目区分配空间 主轴

  • justify-content flex-start: 在主轴的正方向 flex-end: 在主轴的反方向 center: 在两边 space-between: 在项目之间 space-around: 在项目两边

      侧轴
    
  • align-items flex-start:在侧轴的正方向 flex-end: 在侧轴的反方向 center: 在两边 base#ne 基线对齐 stretch 等高布局(项目没有高度)

项目 子元素

弹性空间管理
    flex-grow:弹性因子(默认值为0)

新增特性

  • 容器 flex-wrap:控制的是侧轴的方向 nowrap 不换行 wrap 侧轴方向由上而下 (flex-shrink失效) wrap-reverse 侧轴方向由下而上 (flex-shrink失效)

align-content:多行/列时侧轴富裕空间的管理(把多行/列看成一个整体)

flex-flow:flex-direction和flex-wrap的简写属性 本质上控制了主轴和侧轴分别是哪一根,以及他们的方向

  • 项目order:控制项目的排列顺序 align-self:项目自身富裕空间的管理 flex-shrink:收缩因子(默认值为1) flex-basis:伸缩规则计算的基准值(默认拿width或height的值)

  • 侧轴富裕空间的管理 单行单列 align-itemsalign-self(优先级高) 多行多列 align-content

  • flex的简写属性flex:1 (flex-basis:0% flex-grow:1 flex-shrink:1) 等分布局