前端面试题 | flex布局的可伸缩可拓展(Flexibility)

 Flexibility

Flex伸缩布局决定性的特征是让伸缩项目可伸缩,也就是让伸缩项目的宽度和高度自动填充剩余的空间。这可以以flex属性完成。一个伸缩容器会等比地按照各伸缩项目的 扩展比率 分配剩余空间,也会按照收缩比率缩小各项目以避免溢出。

Flex属性

Flex属性可以用来指定可伸缩长度的 部件:扩展比率、收缩比率、伸缩基准线。当有一个元素是伸项目时,flex属性将代替主轴长度属性决定元素的主轴长度。若元素不是伸缩项目,则flex不生效。

  • flex-grow设置的是这个子盒子所占有父盒子宽度或者溢出的比例;flex-grow的值是一个数字,规定项目将相对于其他灵活的项目进行扩展的量。默认值是0。如果子盒子有宽度,那么flex-grow属性会将父盒子剩余的宽度进行按照比例划分。(根据子盒子flex-grow的总和来规定对父盒子宽度或者父盒子剩余的宽度进行划分多少份,然后给每个盒子分配几份)
    • flex-grow:(父盒子的宽度/所有子盒子的flex-grow的值 * 当前子盒子flex的值)
  • flex-shrink溢出部分按照比例进行划分(比原来小了);默认值是0代表不压缩;加上属性之后可以进行合理压缩
    • flex-shrink计算
    • 压缩值:当前盒子的宽度
    • 压缩率
    • 加权总和:每个元素的宽度 * flex-shrink的 值的和
    • 压缩率:每个元素的加权值(flex-shrink *width)/加权总和
    • 压缩值 *  压缩率就是当前元素压缩的值
  • flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间,浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小,它可以设为跟widthheight属性一样的值(比如350px),则项目将占据固定空间,如果值为0%,那么此盒子即时有宽度也不占据宽度,是相对于父盒子的0%
  • flex属性是flex-grow、flex-shrink、felx-basis的缩写
<div class="box">
    <div class="item-1"></div>
    <div class="item-2"></div>
    <div class="item-3"></div>
 </div>
<style>
    .box {
  display: flex;
  width: 800px;
}
.box > div {
  height: 200px;
}
.item-1 {
  width: 160px;
  flex: 2 1 0%;
  background: #2ecc71;
}
.item-2 {
  width: 100px;
  flex: 2 1 auto;
  background: #3498db;
}
.item-3 {
  flex: 1 1 200px;
  background: #9b59b6;
}
</style>

  •  父盒子的宽度为800像素
  • 子盒子的总宽度为  800*0%+100px(auto为盒子本身的宽度)+200px = 300px
  • 剩余和宽度是500像素,根据flex-grow对剩余像素进行分配
  • item-1分配0+2*(500/5)=200像素
  • item-2分配100+2*(500/5)=300px
  • item-3分配200+1*(500/5)=300px

弹性布局后续还会在此文章更新~点赞关注支持一下吧~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值