弹性盒子(display:flex)详解

目录

1.什么是弹性盒子

2.弹性盒子的特点

3.flex模型说明

4.弹性盒子的属性

4.1 flex-direction 排序方向

4.1.1 row  从左到右排序

4.1.2 row-reverse  从右到左排序

4.1.3 column  从上到下垂直排序

4.1.4 column-reverse  从下到上垂直排序

4.2 flex-wrap 换行

4.2.1  nowrap 不换行

4.2.2  wrap 换行

4.2.3  wrap-reverse 翻转换行

4.2.4 flex-dirction和flex-wrap的组合简写模式

4.3 justify-content:用于控制元素在主轴(X轴)上的排序方式:

4.3.1  flex-start 紧靠主轴起点

4.3.2  flex-end 紧靠主轴终点

   4.3.3 center 居中

 4.3.4 space-between 两端对齐,元素之间的间隔相等

4.3.5 space-around 元素两侧的间距相同,元素之间的间距比两侧的间距大一倍

4.3.6 space-evenly 元素间距离平均分配

4.4 align-items用于控制容器元素在交叉轴(y轴)上的排序方式

4.4.1 flex-start 交叉轴起点对齐

4.4.2 flex-end 交叉轴终点对齐

4.4.3 center 交叉轴中点对齐

 4.4.4 baseline 元素的第一行文字的基线对齐

4.4.5 stretch 默认值,如果元素未设置高度或者auto,将占满整个容器的高度

4.5 align-content只适用于多行显示的弹性容器,用于控制行(而不是元素)在交叉轴(y轴)上的排序方式,如果项目只有一根轴线,那么该属性不起作用

4.5.1 flex-start 交叉轴的起点

4.5.2  flex-end 交叉轴的终点

4.5.3 center 交叉轴的中点

4.5.4 space-between 交叉轴两端对齐之间间隔平分

 4.5.5  space-around 元素两侧的间距相同,元素之间的间距比两侧的间距大一倍

4.5.6 stretch 默认值,轴线占满整个交叉轴

4.5.7 space-evenly 在交叉轴上平均分配空间

4.6 单个对齐方式align-self

 4.7 排序order

  4.8 放大比例flex-grow

4.9 缩小比例flex-shrink

 5.0 综合属性flex

ps



1.什么是弹性盒子

在css中我们使用display大多都是用来转换元素类型的,这种方法在我们实现页面布局中大部分地方都很好用,但难免还是会有一定的局限性,那么弹性盒子就有可能帮助我们更好的去进行批量改变子元素的布局。

2.弹性盒子的特点

当我们在初学前端页面时可能都要接触一些购物之类的页面,其中的布局啊,样式啊什么的只能用什么浮动还有边距之类的一个一个调,但当我们使用弹性盒子之后,用几句话就可以直接搞定。

那么弹性盒子的特点有哪些呢:

1.灵活性:弹性盒子可以根据容器的大小和内容的变化自动调整布局,使得页面在不同的屏幕尺寸和设备上都能够适应。

2. 方便的对齐和分布:弹性盒子提供了多种对齐和分布元素的方式,包括沿主轴和交叉轴对齐、等间距分布和自适应分布等。

3. 简化布局:弹性盒子可以让开发者更方便地实现复杂的布局,减少了使用传统布局方式所需要的代码量和复杂度。

4. 可读性和可维护性:弹性盒子的语法简单明了,易于理解和修改,使得代码更易于阅读和维护

3.flex模型说明

在弹性盒子的使用中不可避免的要用到一些官方术语,下面就是flex模型的官方术语。

  • 主轴(main axis):是水平flex元素放置的方向延伸的轴;
    该轴的开始和结束被称为 main start 和 main end。
  • 交叉轴(cross axis):是垂直于flex元素放置方向的轴;
    该轴的开始和结束被称为 cross start 和 cross end。

4.弹性盒子的属性

下面我们开始介绍弹性盒子的属性

4.1 flex-direction 排序方向

这是没有添加弹性盒子的

css: 

<style>
        .a{
            width: 1000px;
            height: 1000px;
        }
        .b{
            width: 100px;
            height: 100px;
            background-color: red;
        }
        .b1{
            width: 100px;
            height: 100px;
            background-color: blue;
        }
        .b2{
            width: 100px;
            height: 100px;
            background-color: green;
        }
        .b3{
            width: 100px;
            height: 100px;
            background-color: gray;
        }
    </style>

html:

<body>
    <div class="a">
        <div class="b">1</div>
        <div class="b1">2</div>
        <div class="b2">3</div>
        <div class="b3">4</div>
    </div>
</body>

当添加属性时:

4.1.1 row  从左到右排序

css:

        .a{
            width: 1000px;
            height: 1000px;
            display: flex;
            flex-direction: row;
        }

4.1.2 row-reverse  从右到左排序

css:

        .a{
            width: 1000px;
            height: 1000px;
            display: flex;
            flex-direction: row-reverse;
        }

row:主轴对齐,也可以说是水平对齐,也就是从左到右对齐;
row-reverse:主轴对齐,reverse(翻转),所以这里是从右到左对齐;

4.1.3 column  从上到下垂直排序

        .a{
            width: 1000px;
            height: 1000px;
            display: flex;
            flex-direction: column;
        }

4.1.4 column-reverse  从下到上垂直排序

        .a{
            width: 1000px;
            height: 1000px;
            display: flex;
            flex-direction: column-reverse;
        }

column:交叉轴对齐,也可以说是垂直对齐,也就是从上到下对齐;
column-reverse:交叉轴对齐,同理这里是从下到上对齐;

4.2 flex-wrap 换行

flex-wrap规定flex容器是单行或多行的,同时横轴的方向决定了新行堆叠的方向(换行)

换行中有三种属性值分别是nowrap 不换行,wrap自动进行换行,wrap-reverse是翻转换行。

4.2.1  nowrap 不换行

css:

        .a{
            width: 300px;
            height: 200px;
            display: flex;
            flex-wrap: nowrap;
        }

4.2.2  wrap 换行

        .a{
            width: 300px;
            height: 200px;
            display: flex;
            flex-wrap: wrap;
        }

4.2.3  wrap-reverse 翻转换行

css:

        .a{
            width: 300px;
            height: 200px;
            display: flex;
            flex-wrap: wrap-reverse;
        }

nowrap :默认值,不换行;不换行的话,如果所有子元素的宽/高总值大于父元素的宽/高,那么为了子元素不溢出,会把内容挤压变形到自适应的宽高;
warp:对齐方向不溢出的自动换行;

弹性盒子的特点中有一点是简化布局所以我们还可以把排序和换行组合在一起写:

4.2.4 flex-dirction和flex-wrap的组合简写模式

css

        .a{
            width: 300px;
            height: 200px;
            display: flex;
            flex-flow: row wrap;
        }

可以看到两者样式结合在一起正常使用,两者的其他属性值也可像这种格式一起使用

4.3 justify-content:用于控制元素在主轴(X轴)上的排序方式:

属性值含义
flex-start紧靠主轴起点
flex-end紧靠主轴终点
center居中
space-between两端对齐,元素之间的间隔相等
space-around元素两侧的间距相同,元素之间的间距比两侧的间距大一倍
space-evenly 元素间距离平均分配

4.3.1  flex-start 紧靠主轴起点


css:

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            justify-content: flex-start;
            border: 1px solid black;
        }

4.3.2  flex-end 紧靠主轴终点

css:

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            justify-content: flex-end;
            border: 1px solid black;
        }

   4.3.3 center 居中

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            justify-content:center;
            border: 1px solid black;
        }

 4.3.4 space-between 两端对齐,元素之间的间隔相等

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            justify-content:space-between;
            border: 1px solid black;
        }

4.3.5 space-around 元素两侧的间距相同,元素之间的间距比两侧的间距大一倍

css

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            justify-content:space-around;
            border: 1px solid black;
        }

4.3.6 space-evenly 元素间距离平均分配

css

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            justify-content:space-evenly;
            border: 1px solid black;
        }

以上是六种在主轴上的排序方式

align中的属性有两种,第一种是align-items,第二种是align-content。

4.4 align-items用于控制容器元素在交叉轴(y轴)上的排序方式

属性值含义
flex-start元素位于交叉轴的起点
flex-end元素位于交叉轴的终点
center元素位于交叉轴的中点
baseline元素的第一行文字的基线对齐
stretch(默认值)如果元素未设置高度或者auto,将占满整个容器的高度

4.4.1 flex-start 交叉轴起点对齐

css

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            align-items: flex-start;
            border: 1px solid black;
        }

4.4.2 flex-end 交叉轴终点对齐

css

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            align-items: flex-end;
            border: 1px solid black;
        }

4.4.3 center 交叉轴中点对齐

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            align-items: center;
            border: 1px solid black;
        }

 4.4.4 baseline 元素的第一行文字的基线对齐

css

        .a{
            width: 500px;
            height: 200px;
            display: flex;
            align-items: baseline;
            border: 1px solid black;
        }

4.4.5 stretch 默认值,如果元素未设置高度或者auto,将占满整个容器的高度

在上面的样式中,前两个盒子并没有设置高度,那么使用stretch就会自动填满父元素容器,而后两个盒子设置了高度则不会变

css

    <style>
        .a{
            width: 500px;
            height: 200px;
            display: flex;
            align-items: stretch;
            border: 1px solid black;
        }
        .b{
            width: 100px;
            background-color: red;
        }
        .b1{
            width: 100px;
            background-color: blue;
        }
        .b2{
            width: 100px;
            height: 100px;
            background-color: green;
        }
        .b3{
            width: 100px;
            height: 100px;
            background-color: gray;
        }
    </style>

容器的填充方向是按照侧轴方向填充的

4.5 align-content只适用于多行显示的弹性容器,用于控制行(而不是元素)在交叉轴(y轴)上的排序方式,如果项目只有一根轴线,那么该属性不起作用

属性值含义
flex-start位于交叉轴的起点
flex-end位于交叉轴的终点
center位于交叉轴的中点
space-between两端对齐,元素之间的间隔相等
space-around元素两侧的间距相同,元素之间的间距比两侧的间距大一倍
stretch默认值,轴线占满整个交叉轴

space-evenly

在交叉轴上平均分配空间

4.5.1 flex-start 交叉轴的起点

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: flex-start;
            flex-wrap: wrap;
            border: 1px solid black;
        }

4.5.2  flex-end 交叉轴的终点

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: flex-end;
            flex-wrap: wrap;
            border: 1px solid black;
        }

4.5.3 center 交叉轴的中点

css

     .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: center;
            flex-wrap: wrap;
            border: 1px solid black;
        }

4.5.4 space-between 交叉轴两端对齐之间间隔平分

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: space-between;
            flex-wrap: wrap;
            border: 1px solid black;
        }

 4.5.5  space-around 元素两侧的间距相同,元素之间的间距比两侧的间距大一倍

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: space-around;
            flex-wrap: wrap;
            border: 1px solid black;
        }

4.5.6 stretch 默认值,轴线占满整个交叉轴

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: stretch;
            flex-wrap: wrap;
            border: 1px solid black;
        }

4.5.7 space-evenly 在交叉轴上平均分配空间

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: space-evenly;
            flex-wrap: wrap;
            border: 1px solid black;
        }

4.6 单个对齐方式align-self

属性值含义
stretch将空间平均分配给元素
flex-start元素紧靠主轴起点
flex-end元素紧靠主轴终点
center元素从弹性容器中心开始

align-self属性可以使单个元素有与其他元素不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

​​​​​​​​​​​​​​

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-items: flex-start;
            flex-wrap: wrap;
            border: 1px solid black;
        }

接下来为b写入align-self属性: align-self: flex-end;,效果如下:

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-items: flex-start;
            flex-wrap: wrap;
            border: 1px solid black;
        }
        .b{
            width: 100px;
            height: 100px;
            align-self: flex-end;
            background-color: red;
        }

 4.7 排序order

order:项目的排列顺序,数字越小排列越靠前,默认为0。

正常的效果是这样的:

排序后的效果:

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: stretch;
            flex-wrap: wrap;
            border: 1px solid black;
        }
        .b{
            width: 100px;
            height: 100px;
            background-color: red;
            order: 3;
        }
        .b1{
            width: 100px;
            height: 100px;
            background-color: blue;
            order:1;
        }
        .b2{
            width: 100px;
            height: 100px;
            background-color: green;
            order: 0;
        }
        .b3{
            width: 100px;
            height: 100px;
            background-color: gray;
            order: 2;
        }

  4.8 放大比例flex-grow

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

css

    .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: stretch;
            flex-wrap: wrap;
            border: 1px solid black;
        }
        .b{
            width: 100px;
            height: 100px;
            background-color: red;
            flex-grow: 2;
        }
        .b1{
            width: 100px;
            height: 100px;
            background-color: blue;
            flex-grow: 2;
        }
        .b2{
            width: 100px;
            height: 100px;
            background-color: green;
        }
        .b3{
            width: 100px;
            height: 100px;
            background-color: gray;
        }

4.9 缩小比例flex-shrink

缩小比例是指在空间不够时会将元素进行压缩 

未压缩时的效果

压缩1,2,后的效果

css

        .a{
            width: 500px;
            height: 600px;
            display: flex;
            align-content: stretch;
            border: 1px solid black;
        }
        .b{
            width: 200px;
            height: 100px;
            background-color: red;
            flex-shrink: 3;

        }
        .b1{
            width: 200px;
            height: 100px;
            background-color: blue;
            flex-shrink: 3;
        }
        .b2{
            width: 200px;
            height: 100px;
            background-color: green;
        }
        .b3{
            width: 200px;
            height: 100px;
            background-color: gray;
        }

 5.0 综合属性flex

flex是flex-grow, flex-shrink, flex-basis缩写组合,默认值为0,1,auto;

ps

内容有一点点长,所以宝子们按照需要的看哈,真的太长了!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值