你真的理解flex:1吗,用示例告诉你flex:1实际代表的是三个属性的简写

前言:

flex:1实际上是三个属性的缩写,最近工作上叫别人调一下样式,涉及到flex:1,又刚好涉及要改变flex:1的默认属性,他竟然不知道是什么回事?又跟别一个说了下也是不知道,估计是比较冷门了,所以才说明一下。

flex:1简述:

flex: 1 实际上是三个属性的缩写:flex-grow: 1; flex-shrink: 1 flex-basis: auto;

  • flex-grow:是用来增大盒子的,比如,当父盒子的宽度大于子盒子的宽度,父盒子的剩余空间可以利用flex-grow来设置子盒子增大的占比

  • flex-shrink:用来设置子盒子超过父盒子的宽度后,超出部分进行缩小的取值比例

  • flex-basis:是用来设置盒子的基准宽度(表示 flex中的剩余空间的大小),并且basis和width同时存在basis会把width干掉

所以flex:1;的逻辑就是用flex-basis把width干掉,然后再用flex-grow和flex-shrink增大的增大缩小的缩小,达成最终的效果。下面分别上代码示例:

(1) flex-grow: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>
    .box {
      width: 500px;
      height: 100px;
      background-color: hotpink;
      display: flex;
    }
 
    .box div {
      width: 100px;
    }
 
    .box div:nth-child(1) {
      flex-grow: 1;
    }
 
    .box div:nth-child(2) {
      flex-grow: 3;
    }
 
  </style>
</head>
<body>
  <div class="box">
    <div>盒子1</div>
    <div>盒子2</div>
  </div>
</body>
</html>

父盒子剩余空间的300

  • flex-grow: 1; 第一个盒子扩大1/4,100+75 = 175
  • flex-grow: 3; 第二个盒子扩大3/4,100+225= 325

(2) flex-shrink: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>
    .box {
      width: 500px;
      height: 100px;
      background-color: hotpink;
      display: flex;
    }
 
    .box div {
      width: 300px;
    }
 
    .box div:nth-child(1) {
      flex-shrink: 1;
    }
 
    .box div:nth-child(2) {
      flex-shrink: 3;
    }
 
  </style>
</head>
<body>
  <div class="box">
    <div>子盒子1</div>
    <div>子盒子2</div>
  </div>
</body>
</html>

父盒子的宽度为500,有两个子300的盒子,那么就超出了100

  • 第一个盒子flex-shrink: 1:即1/4 * 100 = 25 最终第一个盒子300-25= 275
  • 第二个盒子flex-shrink: 3:即3/4 * 100 = 75 最终第二个盒子300-75 = 225

(3) flex-basis:0% 设置盒子的基准宽度(表示 flex中的剩余空间的大小)

<!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>
    .box {
      width: 500px;
      height: 100px;
      background-color: hotpink;
      display: flex;
    }
 
    .box div {
      width: 200px;
    }
 
    .box div:nth-child(1) {
      flex-basis: 25px;
    }
 
    .box div:nth-child(2) {
      flex-basis: 75px;
    }
 
  </style>
</head>
<body>
  <div class="box">
    <div>盒子1</div>
    <div>盒子2</div>
  </div>
</body>
</html>

通过上面的示例方式,width的宽度就已经被flex-basis:0%去掉了

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值