我以为的flex-basis

131 阅读2分钟

flex-basis 定义

之前一直没搞明白,flex-basis 这个css 属性到底怎么用,所以即使现在开发当中,也一直在使用width 来设置flex-item的宽度,最近笔者在仔细研究关于flex-basis的用法,写出一些心得,供参考,望指正。

  • flex-basis属性指定了flex元素在主轴上面的初始大小(笔者通篇文章以横向主轴为例进行讲解)
  • 在如果不使用 box-sizing属性去修改元素盒模型的情况下,那么这个属性就是该flex元素的初始大小

开发中的问题

  • 我在最初对这个初始大小没有什么定义,因为在我所接触的开发环境中,并不需要这个初始大小,通常元素等分弹性盒的空间,只需要去给flex元素设置 flex: 1;

  • 然而,我也知道flex: 1; 属于css的合成属性flex: 1 0 0%; 最后会被浏览器解析为:flex-grow: 1; flex-shrink: 0; flex-basis: 0%;

  • 但在极个别的环境里,我们如果仅仅给flex元素设置flex-grow: 1的情况下,就会出现下面的问题

image.png

这是为什么呢?

  • 一切的原因都是因为,图上的三个flex元素基准尺寸flex-basis的值为auto
  • 这就导致原本需要等分的三个盒子,被第一个大盒子占据大半空间
  • 这时只需要将其值设置为0px/0%即可

image.png

那么,flex-basiswidth 的区别在哪里?

  • 笔者觉得,flex-basis 在有值的情况下,会默认给盒子一个固定大小,如果内容区域超出flex-basis 的值的大小,则盒子大小会自动增长以包裹内容区域
  • width 是给盒子一个始终不变的内容区域宽度,即使内容过多超出去,也不会去对空间做任何妥协

总结:

通过本篇文章,让笔者深刻意识到,flex-basis对flex布局的影响其实还是很大的,在工作中需要多加注意。