千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > 如何讲清楚Flex弹性盒模型(中)?

如何讲清楚Flex弹性盒模型(中)?

来源:千锋教育
发布人:qyf
时间: 2022-10-10 15:42:45 1665387765

  上一篇我们讲解了, flex容器的属性, 如何定义主轴方向, 以及主轴\侧轴对齐方式

  这篇讲解子元素的一些属性.

  如何对子项目进行排序?

  弹性盒模型第一次可以让我们方便的对元素进行排序

  使用 order属性, 它的默认值是0

图片14

  元素按照order顺序排列

  如何定义子项目大小?

  flex布局提供另外一个属性 flex-basis

  它用来设定元素在主轴方向的大小

  注意主轴可以是row方向, 也可以column方向

QQ截图20221010153810

  另外, 某个子元素, 可以单独设置跟其它子元素不一致的(侧轴)对齐方式.

QQ截图20221010153822

  最后, 要隆重的介绍flex-grow这个属性了

图片15

  它叫做『剩余空间瓜分比例』

  从图上可以看出, AB没有撑满flex容器, 如果希望AB调整大小撑满容器的话

  我们需要加上flex-grow这个属性

  .container {

  display: flex;

  width: 500px;

  ....

  }

  div:nth-child(1) {

  width: 100px;

  background-color: pink;

  flex-grow: 1;

  }

  div:nth-child(2) {

  width: 100px;

  background-color: lightseagreen;

  flex-grow: 1;

  }

  那么AB元素会按照1:1的比例把父元素剩余的空间瓜分掉, 效果如图

图片16

  当然, 如果你希望B保持不变, 只有A变大的话, 你可以这样写

  div:nth-child(1) {

  background-color: pink;

  flex-grow: 1;

  }

  div:nth-child(2) {

  background-color: lightseagreen;

  flex-grow: 0; /*默认值就是0, 其实不用写*/

  }

图片17

  我们也可以调整比例

  div:nth-child(1) {

  width:100px;

  background-color: pink;

  flex-grow: 2;

  }

  div:nth-child(2) {

  width:100px;

  background-color: lightseagreen;

  flex-grow: 1;

  }

图片18

  AB按照2:1的比例瓜分了剩余空间

  既然可以放大, 元素也能缩小

  接下来介绍flex-shrink属性, 它叫做多余空间削减比例

  当元素大小超出了flex父容器, 子元素可以按比例缩减.

  但是这里的算法比刚才的flex-grow复杂了一些

  我们先看一种简单的情况

  .container{

  display: flex;

  flex-direction: row;

  justify-content: flex-start;

  box-shadow: 0 0 0 1px black;

  height: 100px; width: 400px; /*父元素宽度为400*/

  }

  div:nth-child(1) {

  width: 300px; /*子元素A宽度为300*/

  background-color: pink;

  flex-shrink: 1; /*多余空间削减比例为1, 默认值为1, 可以不写*/

  }

  div:nth-child(2) {

  width: 200px; /*子元素B宽度为200*/

  background-color: lightseagreen;

  flex-shrink: 1; /*多余空间削减比例为1, 默认值为1, 可以不写*/

  }

  削减比例我们设置了1:1 , 那么实际结果呢?

图片19

  从图中的实际效果来看,

  A元素削减了60个像素

  B元素削减了40个像素

  这并不是1:1啊, 这是3:2啊

  这个3:2又是怎么来的呢?

  其实, 它就是AB元素的原始比例大小

  所以, 在削减比例上, 元素还会受到原始大小比例的影响

  总结一个公式如下:

  子元素的削减比例===原始大小比例 X flex-shrink比例

  那么, 根据我们所得的公式, 如果我们想让上面的例子当中

  AB元素都削减一样的大小该如何做呢?

  答案就是:

  div:nth-child(1) {

  width: 300px;

  background-color: pink;

  flex-shrink: 2;

  }

  div:nth-child(2) {

  width: 200px;

  background-color: lightseagreen;

  flex-shrink: 3;

  }

  最终效果:

图片13

  让我们来总结一下

  项目的属性(添加在子元素身上的属性)

  · Order属性

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

  .item {

  order:;

  }

  · flex-basis属性

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

  .item {

  flex-basis:| auto; /* default auto */

  }

  · align-self属性

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

  .item {

  align-self: auto | flex-start | flex-end | center | baseline | stretch;

  }

  · flex-grow属性

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

  .item {

  flex-grow:; /* default 0 */

  }

  · flex-shrink属性

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

  .item {

  flex-shrink:; /* default 1 */

  }

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT