CSS3伸缩盒

一、基本使用

1、设置伸缩容器

1.1、设置元素为伸缩容器
.wrap {
    display: flex;
}
1.2、设置内联级伸缩容器
.wrap {
    display: inline-flex
}

2、主轴方向和换行

2.1、flex-direction
  • 概念

    flex-direction属性决定主轴的方向(即项目的排列方向)。

  • 语法

.box {
  flex-direction: row | row-reverse | column | column-reverse;
}
  • 参数说明

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

    情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。

  • 语法

    .box{
      flex-wrap: nowrap | wrap | wrap-reverse;
    }
    
  • 参数说明

    • nowrap (默认值):伸缩容器为单行。该情况下伸缩项目可能会溢出容器
    • wrap:伸缩容器为多行。该情况下伸缩项目溢出的部分会被放置到新行,伸缩项目会发生断行
    • wrap-reverse:反转 wrap 排列。
2.3、flex-flow
  • 概念

    flex-flow 属性是 flex-direction 属性和 flex-wrap 属性的简写形式,默认值为 row nowrap

  • 语法

    .box {
      flex-flow: <flex-direction> || <flex-wrap>;
    }
    

3、主侧轴对齐

3.1、justify-content

主轴对齐

  • 概念

    justify-content属性定义了伸缩项目在主轴上的对齐方式。

  • 语法

    .box {
      justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly;
    }
    
  • 参数说明

    • flex-start(默认值):左对齐
    • flex-end:右对齐
    • center: 居中
    • space-between:两端对齐,项目之间的间隔都相等。
    • space-around:每个伸缩项目两侧的间隔相等。所以,伸缩项目之间的间隔比伸缩项目与边框的间隔大一倍。
    • space-evenly: 伸缩项目之间的间隔以及缩项目与伸缩容器边框的间隔相等。 (新增属性值,兼容性稍差)。
3.2、align-items

侧轴对齐

  • 概念

    align-items属性定义伸缩项目在侧轴上如何对齐。

  • 语法

    .box {
      align-items: flex-start | flex-end | center | baseline | stretch;
    }
    
  • 参数说明

    • flex-start:侧轴的起点对齐。
    • flex-end:侧轴的终点对齐。
    • center:侧轴的中点对齐。
    • baseline: 伸缩项目的第一行文字的基线对齐。
    • stretch(默认值):如果伸缩项目未设置高度或设为auto,将占满整个容器的高度。
3.3、align-content
  • 概念

    align-content属性定义了侧轴方向上有多根轴线的对齐方式。如果侧轴方向上只有一根轴线,该属性不起作用。

  • 语法

    .box {
      align-content: flex-start | flex-end | center | space-between | space-around | stretch;
    }
    
  • 属性说明

    • flex-start:与侧轴的起点对齐。
    • flex-end:与侧轴的终点对齐。
    • center:与侧轴的中点对齐。
    • space-between:与侧轴两端对齐,轴线之间的间隔平均分布。
    • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
    • stretch(默认值):轴线占满整个侧轴。
    • space-evenly: 轴线的间隔以及轴线与伸缩容器边框的间隔相等。 (新增属性值,兼容性稍差)。

4、元素水平垂直居中

4.1、方式一
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        html,body {
            width: 100%;
            height: 100%;
        }
        body {
            margin: 0;

            /* 设置为伸缩容器 */
            display: flex;

            /* 主轴方向居中 */
            justify-content: center;
            /* 侧轴方向居中 */
            align-items: center;
        }
        .box {
            width: 400px;
            height: 300px;
            background-color: cyan;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

4.2、方式二
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        html,body {
            width: 100%;
            height: 100%;
        }
        body {
            margin: 0;

            /* 设置为伸缩容器 */
            display: flex;
        }
        .box {
            margin: auto;
            width: 400px;
            height: 300px;
            background-color: cyan;
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

5、伸缩项目的伸缩性

5.1、flex-basis
  • 概念

    flex-basis 属性定义了在分配多余空间之前,伸缩项目占据的主轴空间(main size)。

    浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为 auto ,即伸缩项目的本来大小。

    用于设置伸缩项目在主轴方向上的长度,如果设置了 flex-basis,会导致伸缩项目的宽或者高失效,按照 flex-basis 的设置。

  • 语法

    .item {
      flex-basis: <length> | auto; /* 默认值 auto */
    }
    
    
5.2、flex-grow
  • 概念

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

  • 语法

    .item {
      flex-grow: <number>; /* 默认值 0 */
    }
    
    

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

5.3、flex-shrink
  • 概念

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

  • 语法

    .item {
      flex-shrink: <number>; /* 默认值 1 */
    }
    
    

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

5-4、收缩比例计算
        /*
         计算收缩多少:
            分母: 150*1 + 300*2 + 250*3
            box01要补:  150*1 / 1500		0.1*200
            box02要补:  300*2 / 1500		0.4*200
            box03要补:  250*3 / 1500		0.5*200
		计算收缩多少:
		   所有项目宽度乘收缩比相加
		   各项目 * 收缩比 /	所有项目宽度乘收缩比相加
		   该比值*超出值
        */


5.4、flex
  • 概念

    flex 是复合属性,是 flex-grow , flex-shrinkflex-basis 的简写,默认值为 0 1 auto

  • 语法

    .item {
      flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
    }
    
    
  • 特殊情况

    • 如果缩写为 flex: 1 , 则其计算值为 1 1 0%
    • 如果缩写 flex: auto , 则其计算值为 1 1 auto
    • 如果flex: none , 则其计算值为0 0 auto
    • 如果 flex: 0 auto 或者 flex: initial , 则其计算值为0 1 auto,即 flex 初始值

6、伸缩项目排序

  • 概念

    order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

  • 语法

    .item {
      order: <integer>;
    }
    
    

7、align-self

伸缩项目独自对齐方式

  • 概念

    align-self 属性允许单个伸缩项目有与其他伸缩项目不一样的对齐方式,可覆盖 align-items 属性。默认值为 auto,表示继承父元素的 align-items 属性。

  • 语法

    .item {
      align-self: auto | flex-start | flex-end | center | baseline | stretch;
    }
    
    
  • 属性值

    • auto(默认值): 表示继承父元素的 align-items 属性。
    • flex-start:侧轴的起点对齐。
    • flex-end:侧轴的终点对齐。
    • center:侧轴的中点对齐。
    • baseline: 伸缩项目的第一行文字的基线对齐。
    • stretch:如果伸缩项目未设置高度或设为auto,将占满整个容器的高度。

8、总结

8.1、设置给伸缩容器的属性
  • display 设置伸缩容器;值: flex、inline-flex
  • flex-direction设置主轴方向;值:row、row-reverse、column、column-reverse
  • flex-wrap设置换行方式;值: nowrap、wrap、wrap-reverse
  • flex-flow同时设置主轴方向和换行方式,复合 flex-direction 和 flex-wrap
  • justify-content主轴方向对齐方式;值 flex-start、flex-end、center、space-between、space-around、space-evenly
  • align-items设置侧轴对齐方式; 值: stretch、flex-start、flex-end、center、baseline
  • align-content 设置侧轴对齐方式(适合多条主轴); 值:stretch、flex-start、flex-end、center、space-between、space-around、space-evenly
8.2、设置给伸缩项目的属性
  • flex-basis 设置伸缩项目在主轴方向的基准长度;值可以设置长度,默认值 auto。
  • flex-grow设置扩展比率;值是数字,默认值 0。
  • flex-shrink设置收缩比率,值是数字,默认值 1。
  • flex 复合属性,同时设置扩展比率、收缩比率、基准值。
  • order设置伸缩项目的排列顺序;值是数字,值越小越靠前。
  • align-self单独设置伸缩项目在侧轴上对齐方式; 值: auto、stretch、flex-start、flex-end、center、baseline

8.3 收缩极限(扩展)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .wrapper {
            width: 100%;
            display: flex;
        }
        .box {
            padding: 20px;
            text-align: center;
            border: 1px solid red;
            flex: 1;
        }
        .content {
            width: 100px;
            height: 100px;
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="box">嗨嗨</div>
        <div class="box">
            <div class="content"></div>
        </div>
        <div class="box">嗨嗨</div>
        <div class="box">嗨嗨</div>
        <div class="box">嗨嗨</div>
        <div class="box">嗨嗨</div>
        <div class="box">嗨嗨</div>
        <div class="box">嗨嗨</div>
        <div class="box">嗨嗨</div>
        <div class="box">嗨嗨</div>
    </div>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wj18740503137

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值