flex-shrink是如何控制最终元素大小的

217 阅读1分钟

flex-shrink属性是用来约束flex布局时,子项的收缩规则。我们来屡屡通过shrink属性计算flex元素最终大小的过程。

假设页面标签和样式:

<!-- html -->
<section class="container">
  <div class="left"></div>
  <div class="right"></div>
</section>

<!-- less -->
.container {
  display: flex;
  width: 600px;
  height: 300px;
  .left {
    flex: 1 4 500px;
    background: peachpuff;  }
  .right {
    flex: 2 1 400px;
    background: yellowgreen;
  }
}

页面元素container的宽度为600px,而它的元素left和right分别500px与400px,这将导致left和right被压缩:

 

尽管left的basis是500px大于right但是left的shrink大于right,所以left实际宽度小于right。

怎么计算得出的实际宽度呢?

首先我们要明确shrink是分配超出部分宽度,在前面的例子中就是container-(left+right)的超出部分300px,。但并不是把这300px按照子项的shrink值的和5来等分的,而是需要给一个权值,这个权值就是子项各自的宽度。

由此我们知道可以得出:

left的超出空间的配额为:500*4/(500*4+400*1)

left的实际需要减去的空间为:300*配额

left的实际宽度为:500-需要减去的空间

最终宽度:250px


总结

1、shrink分配的是超出部分的宽度

2、计算过程中重点就在计算配额的时候需要算上权值