CSS3伸缩盒模型之伸缩容器和伸缩项目、主轴、侧轴

一、伸缩容器和伸缩项目

  伸缩容器: 设置了display: flex 的元素,就是伸缩容器。

    1.给元素设置: display:flex 或 display:inline-flex,该元素就变为了伸缩容器。

    2.display:inline-flex 很少使用,因为可以给多个伸缩容器的父容器,也设置为伸缩容器。

    3.一个元素可以同时是:伸缩容器、伸缩项目。

   伸缩项目:伸缩容器所有子元素自动成为了伸缩项目。

    1.仅伸缩容器的子元素成为了伸缩项目,孙子元素、重孙子元素等后代,不是伸缩项目。

    2.无论原来是哪种元素(块、行内块、行内),一旦成为了伸缩项目,全都会“块状化”。

二、主轴、侧轴方向

1.主轴与侧轴

    主轴: 伸缩项目沿着主轴排列,主轴默认是水平的,默认方向是:从左到右(左边是起点,右边是终点)。

    侧轴: 与主轴垂直的就是侧轴,侧轴默认是垂直的,默认方向是:从上到下(上边是起点,下边是终点)。

  2.主轴方向

    属性名:flex-direction

      常用值如下:

      (1) row :主轴方向水平从左到右--默认值

      (2) row-reverse :主轴方向水平从右到左。

      (3) column:主轴方向垂直从上到下。

      (4) column-reverse:主轴方向垂直从下到上。

      注意:改变了主轴的方向,侧轴方向也会随之改变

三、主轴对齐方式和换行方式

1.主轴对齐方式

  属性名:justify-content

  常用值如下:

    (1) lex-start:主轴起点对齐。-- 默认值

    (2) flex-end:主轴终点对齐

    (3) center:居中对齐

    (4) space-between:均匀分布,两端对齐(最常用)。

    (5) space-around:均匀分布,两端距离是中间距离的一半。

    (6) space-evenly :均匀分布,两端距离与中间距离一致。

  2.主轴换行方式

    属性名:flex-wrap

        (1) nowrap:默认值--不换行

        (2) wrap:伸缩容器不够时自动换行

        (3) wrap-reverse:反向换行

<!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>
    body {
      display: flex;
    }

    .outer {
      width: 1000px;
      height: 600px;
      background-color: gray;
      /* 开启flex布局,将该元素变为伸缩容器 */
      display: flex;

      /* 主轴方向:从左到右 */
      /* flex-direction: row; */

      /* 主轴换行方式:换行*/
      flex-wrap: wrap; 

      /* 复合属性flex-flow */
      /* flex-flow: row wrap; */

      /* 主轴对齐方式,主轴的起始位置——默认 */
      justify-content: flex-start;
      /* 主轴对齐方式,主轴的结束位置 */
      justify-content: flex-end;
      /* 主轴对齐方式,中间对齐 */
      justify-content: center;
      /* 主轴对齐方式,项目均匀的分布在一行中,项目与项目之间的距离,是项目距边缘的二倍 */
      justify-content: space-around;
      /* 主轴对齐方式,项目均匀的分布在一行中,项目与项目之间的距离相等,项目距边缘没有距离 */
      justify-content: space-between;
      /* 主轴对齐方式,项目均匀的分布在一行中 */
      justify-content: space-evenly;
    }

    .inner {
      background-color: skyblue;
      width: 200px;
      height: 200px;
      border: 1px solid black;
      box-sizing: border-box;
    }
  </style>
</head>

<body>
  <div class="outer">
    <div class="inner">1</div>
    <div class="inner">2</div>
    <div class="inner">3</div>
  </div>
</body>

</html>

四、侧轴对齐方式

 (只有一行的情况)

    所需属性:align-items

    常用值如下:

      1.f1ex-start:侧轴的起点对齐。

      2.flex-end:侧轴的终点对齐。

      3.center:侧轴的中点对齐。

      4.baseline:伸缩项目的第一行文字的基线对齐。

      5.stretch:如果伸缩项目未设置高度,将占满整个父容器的高度。--(默认值)

  ( 多行的情况)

    所需属性:align-content

    常用值如下:

      1.flex-start:与侧轴的起点对齐。

      2.flex-end:与侧轴的终点对齐。

      3.center :与侧轴的中点对齐。

      4.space-between:与侧轴两端对齐,中间平均分布。

      5.space-around:伸缩项目间的距离相等,比距边缘大一倍。

      6.space-evenly:在侧轴上完全平分。

      7.stretch:占满整个侧轴。-- 默认值

五、伸缩盒模型——伸

  flex-grow 定义伸缩项目的放大比例,默认为0,即:纵使主轴存在剩余空间,也不拉伸(放大)。

  规则:

    1、若所有伸缩项目的 flex-grow 值都为1,则:它们将等分剩余空间(如果有空间的话)。

    2、若三个伸缩项目的 flex-grow值分别为:1、2、3,则:分别瓜分到:1/6、2/6、3/6 的空间。

六、伸缩盒模型——缩

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

 收缩项目的计算,略微复杂一点,拿一个场景举例:

  例如:

    三个收缩项目,宽度分别为:200px、300px、200px,它们的f1ex-shrink值分别为:1、2、3

    若想刚好容纳下三个项目,需要总宽度为700px,但目前容器只有400px,还差300px

    所以每个人都要收缩一下才可以放下,具体收缩的值,这样计算:

      1.计算分母:(200*1)+(300*2)+(200*3)=1400

      2.计算比例:

        项目一:(200x1)/1400=比例值1

        项日二:(300x2)/1400=比例值2

        项日三:(200x3)/1400=比例值3

      3.计算最终收缩大小:

        项目一需要收缩:比例值1x300

        项目二需要收缩:比例值2x300

        项目三需要收缩:比例值3x300

<!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>
    body {
      display: flex;
    }

    .outer {
      width: 1000px;
      height: 600px;
      background-color: gray;
      /* 开启flex布局,将该元素变为伸缩容器 */
      display: flex;
      justify-content: flex-start;
    }

    .inner {
      background-color: skyblue;
      width: 200px;
      height: 200px;
      border: 1px solid black;
      box-sizing: border-box;
      /* 伸 */
      flex-grow: 1;
      /* 缩 */
      flex-shrink: 1;
    }

    .inner2 {
      width: 300px;
    }
  </style>
</head>

<body>
  <div class="outer">
    <div class="inner">1</div>
    <div class="inner inner2">2</div>
    <div class="inner">3</div>
  </div>
</body>

</html>

  • 20
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值