文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用

2023-07-04 18:25

关注

这篇文章主要介绍“Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用”,在日常操作中,相信很多人在Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

在我们日常开发中,flex布局可以说是家常便饭,可能我们用的比较多的应该就是垂直居中里,也就是下面这段代码:

.flex-box{  display: flex;  justify-content: center;  align-items: center;}

然后我们都知道这个是定义在父元素的,布局效果是在子元素生效的!对吧!但是我们有没有想过这样的问题?

我们先不管这两个问题是怎么样,又是怎么解决的!我们先来了解一下flex-growflex-shrinkflex-basis这三个元素是个啥,又是怎么用。

1 flex-grow

.flex-box{    display: flex;    width: 300px;    height: 300px;    margin:0 auto;    background-color: #000;}.left{    flex-grow: 1;    width: 100px;    background-color: orange;}.right{    flex-grow: 0;    width:100px;    background-color: cyan;}

上面我们可以看出子元素left和right的宽度之和为200px,而父元素宽度为300px,也就是说父元素还有空余空间,而真正的效果如图所示。

Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用我们会发现子元素left的宽度会变成200px,这就是flex-grow的作用了,flex-grow为0不做处理,而left盒子的flex-grow为1。也就是剩余宽度空间全部分配给了left盒子,假如flex-grow属性变成这样呢?

.left{    ...    flex-grow: 3;    ...}.right{    ...    flex-grow: 1;    ...}

这样处理的话也就是剩余空间按照left:right为3:1处理,多出来的空间:300px-(100px+100px)=100px;left的宽度:100px+100px*(100px*3/(100*3+100*1)) = 175px;right的宽度:100px+100px*(100px*1/(100*3+100*1)) = 125px;这就解析了当所有子元素宽度之和小于父元素宽度之和时,子元素如何处理?这个问题了。

注意地,如果所有子元素的flex-grow的值是一样的话,那么剩余空间就按照平均分配。

Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用

2 flex-shrink

.flex-box{    display: flex;    width: 300px;    height: 300px;    ...}.left{    flex-shrink: 3;    width: 200px;    background-color: orange;}.right{    flex-shrink: 1;    width:200px;    background-color: cyan;}

Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用首先,所有子元素宽度之和大于父元素宽度(200px+200px>300px)。由于父元素的宽高都是固定的,所以不能撑大父元素,只能缩小子元素。子元素flex-shrink的比为3:1,所以子元素left的宽度为:200px-100px*(200px*3/(200px*3+200px*1)) = 125px;子元素right的宽度为:200px-100px*(200px*1/(200px*3+200px*1)) = 175px;这样也就解析了当所有子元素的宽度和大于父元素宽度和的时候,子元素是如何处理的这个问题的了。

3 flex-basis

    .flex-box{        display: flex;        width: 300px;        height: 300px;        margin:0 auto;        background-color: #000;    }    .left{        width: 200px;        flex-basis: 100px;        background-color: orange;    }    .right{        width:100px;        background-color: cyan;    }

Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用细心地我们发现,left的宽度是不是有点奇怪?上面left不是定义了一个width:200px,为什么效果会是100px的?我们都知道flex-basis是基准,其实在flex布局下,这个属性的优先级比width要高的,当flex-basis与width都存在时,是以前者的值为准的。好了好了,三个元素我们都学完了,总结一下:

4 结合flex属性使用

除了上面各自分开使用这三个属性,还可以盒子一起使用也就是:

flex:flex-grow flex-shrink flex-basis;

flex属性可以灵活处理这三个属性,可以单值、双值处理,这样的话,flex属性分别代表什么?

none:元素会根据自身宽高来设置尺寸。它是完全非弹性的:既不会缩短,也不会伸长来适应 flex 容器。相当于将属性设置为flex: 0 0 auto

auto:会伸长并吸收 flex 容器中额外的自由空间,也会缩短自身来适应 flex 容器。这相当于将属性设置为 flex: 1 1 auto

initial:它会缩短自身以适应 flex 容器,但不会伸长并吸收 flex 容器中的额外自由空间来适应 flex 容器。

5 一道笔试题

.flex{    display: flex;    width: 200px;    height: 100px;    margin:0 auto;    background-color: #000;}.left{    flex:3 2 50px;    background-color: orange;}.right{    flex:2 1 200px;    background-color: cyan;}

从上面我们可以看到子元素的flex值太复杂,其实我们可以先不看前面两值,先看最后一值(flex-basis)。如果所有子元素的flex-basis之和大于父元素之和考虑第一个值,如果所有子元素的flex-basis之和小于父元素之和考虑第二个值。上面所有子元素宽度50px+200px=250px大于父元素宽度200px,所以考虑第二个值也就是子元素left和子元素right的flex-shrink属性比2:1,超出部分50px这样处理left的宽度缩小为:50px-50px*(50px*2/(50px*2+200px*1)) = 33.34;right的宽度为:200px-50px*(200px*2/(50px*2+200px*1)) = 166.66。所以上面题目答案为33.34:166.66 = 1:5。

到此,关于“Flex布局属性flex-grow、flex-shrink和flex-basis怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯