美文网首页让前端飞Web前端之路
【面试题flex】关于弹性盒子中 flex: 0 1 auto

【面试题flex】关于弹性盒子中 flex: 0 1 auto

作者: alanwhy | 来源:发表于2020-05-25 17:13 被阅读0次

第一问 弹性盒子中 flex: 0 1 auto 表示什么意思

三个参数分别对应的是 flex-grow, flex-shrinkflex-basis,默认值为 0 1 auto。

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

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

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

第二问 求最终 left、right 的宽度

<div class="container">
    <div class="left"></div>
    <div class="right"></div>
</div>

<style>
  * {
    padding: 0;
    margin: 0;
  }
  .container {
    width: 600px;
    height: 300px;
    display: flex;
  }
  .left {
    flex: 1 2 500px;
    background: red;
  }
  .right {
    flex: 2 1 400px;
    background: blue;
  }
</style>

样式说明

  1. 父元素 container 的 width 为 600px

  2. left 元素 flex-grow 为 1,flex-shrink 为 2,flex-basis 为 500px

  3. right 元素 flex-grow 为 2,flex-shrink 为 1,flex-basis 为 400px

解题

left 和 right 的主轴空间和大于父元素的宽度 超了 300px

500 + 400 = 900 - 600 = 300

总权重为

2 * 500 + 1 * 400 = 1400

超出了 所以是收缩 则分别的收缩长度

left:300 * 2 * 500 / 1400 = 214.28
right: 300 * 1 * 400 / 1400 = 85.72

最终宽度

leftWidth:500 - 214.28 = 285.72
rightWidth:400 - 85.72 = 314.28

第三问 求最终 left、right 的宽度(变形)

<div class="container">
    <div class="left"></div>
    <div class="right"></div>
</div>

<style>
  * {
    padding: 0;
    margin: 0;
  }
  .container {
    width: 600px;
    height: 300px;
    display: flex;
  }
  .left {
    flex: 1 2 300px;
    background: red;
  }
  .right {
    flex: 2 1 200px;
    background: blue;
  }
</style>

样式说明

  1. 父元素 container 的 width 为 600px

  2. left 元素 flex-grow 为 1,flex-shrink 为 2,flex-basis 为 300px

  3. right 元素 flex-grow 为 2,flex-shrink 为 1,flex-basis 为 200px

剩余空间,是超出的情况

600 - 300 - 200 = 100

所以多出来的均分则是用 flex-grow

100 / (1 + 2) = 33.33

所以最后宽度

leftWidth:300 + 1 * 33.33 = 333.33
rightWidth:200 + 2 * 33.33 = 266.67

原文链接:
弹性盒子中 flex: 0 1 auto 表示什么意思
求最终 left、right 的宽度
求最终 left、right 的宽度(变形)

相关文章

  • 属性问题

    1.弹性盒子中 flex: 0 1 auto 表示什么意思? 属性 flex规定了弹性元素如何伸长或缩短以适应fl...

  • 【面试题flex】关于弹性盒子中 flex: 0 1 auto

    第一问 弹性盒子中 flex: 0 1 auto 表示什么意思 三个参数分别对应的是 flex-grow, fle...

  • 2019-03-29

    关于弹性盒子模型: 弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成。 C...

  • 前端面试题总结

    基础篇 1.弹性盒子中 flex: 0 1 auto 表示什么意思 2.求字符串数组的最长公共前缀 比如输入: [...

  • 小程序布局技巧

    弹性盒子: display:flex 弹性盒子属性flex-direction flex-direction:co...

  • CSS3 弹性盒子内容

    CSS3 弹性盒子内容 弹性盒子由弹性容器(Flex container)和弹性子元素(Flex item)组成。...

  • 移动端系列(flex布局)

    弹性盒子 display: flex,采用Flex布局的元素,称为Flex容器(flex container),...

  • 常用的flex布局属性总结

    概述:1、flex,即 flexible box,中文为弹性盒子2、需要有flex container(弹性容器)...

  • 元素的弹性布局实现

    弹性布局flex1.要给父标签容器设置成弹性盒子,display:flex2.弹性容器中的子标签,叫做弹性子元素,...

  • 弹性盒子--Flexbox布局!!

    弹性盒子布局模型 1. Flex布局是什么? Flex是发了flexbox 的缩写,意为“弹性布局”,用来为盒子状...

网友评论

    本文标题:【面试题flex】关于弹性盒子中 flex: 0 1 auto

    本文链接:https://www.haomeiwen.com/subject/wpoyahtx.html