弹力规划的flex

lxf2023-12-13 23:40:01

问题描述

使用弹力规划的情况下,肯定会有遇到分派子元素空间问题,比如flex:1平分

但使用时有的时候会发觉,当在其中某一子元素内容太长时,会挤压成型别的子元素及其父元素空间,并没按大家设定的期望占比去进行分割

正常情况下

弹力规划的flex

具体内容超过

弹力规划的flex

html

<div class="flex">
  <div class="left">111111111</div>
  <div class="right">
      <div class="right-content">
          adasdasdasdadasdasdasdasdasadasdasdasdadasdasadasdasdasdadasdasdasdasdasadasdasdasdadasdas
      </div>
  </div>
</div>

css

.flex {
  width: 300px;
  height: 100px;
  display: flex;
}
.left {
  flex: 1;
  background-color: aqua;
}
.right {
  flex: 1;
  background-color: red;
}

能够看见,不但不按照大家预估分配室内空间,还远远超过了父元素的总体总宽,这样毫无疑问是不合理的,严重影响网页布局

解决方法一(不成功)

flex:1 具体仅仅缩写

等同于

flex-grow: 1; 可用空间中加入比例,初始值为0,表明子元素不增加尺寸,设为1时,子元素会尽可能的添充可用空间,若有好几个子元素进行分配可用空间

flex-shrink: 1; 子元素在内存不足时减少的占比。初始值为1,表明子元素将变小以满足器皿。当设为0时,表明子元素不容易变小,假如有好几个子元素增设了 flex-shrink,则他们将按比例缩小

flex-basis: 0%; 子元素在分派不必要室内空间以前占据的空间大小。初始值为auto,表明子元素大小对其具体内容确定。当设为一个长短值后,表明子元素在分派不必要室内空间以前占有的空间大小。假如有好几个子元素增设了 flex-basis,则他们将根据设定的尺寸进行分割

能够留意到flex-shrink这一设定变小特性,那我们设置一下为0使它不变小不就行了吗

.left {
  flex: 0 0 50%; 
  background-color: aqua;
}
.right {
  flex: 0 0 50%;
  background-color: red;
}

弹力规划的flex

能够看见,left左侧的确依照预估没被变小,可是right却把远远超过了本身总宽

解决方法二(取得成功)

细心了解弹力合理布局发觉,针对flex属性的理解有一个误区,大家在为子元素应用flex特性时,理所当然的觉得它会依照比例分配父元素的空间大小,但实际上并非这般

仔细检查flex-grow属性的描述不难看出,弹力规划的flex特性仅仅分派可用空间

可用空间:flex 容器尺寸减掉全部 flex 项大小加在一起大小。假如每一个哥们新项目都是有同样的 flex-grow 指数,那样每一个项目将可用空间按同样比例分配,否则就会针对不同的 flex-grow 界定比例进行分割。

MDN连接

弹力规划的flex

当时看到这里也不难理解了,flex特性仅仅 对父元素的不必要室内空间按什么占比去分派,并非按我们自己的理解意思为固定不动分派比例,不容易对联原素本来具体具体内容总宽予以处理,就和flex-basis特性本身就是设定在分派可用空间以前,现阶段子元素的具体空间大小

那样说到这里就有些纳闷了,计划方案一中的flex-basis特性并不是应用了没有,为什么没什么效果

flex: 0 0 50%;,严禁了子元素放大及其分派室内空间,立即依照最后一个主要参数flex-basis特性分别分派固定不动50% 左侧元素left其实就是通过了的,右侧right为什么就不能用了呢,并不是早已设定好总宽了没有

浏览器默认为flex容器子元素增设了 "min-width: auto;min-height: auto",这就意味着子元素的最小宽度高度不可以低于内容宽度高度。

因此才会产生以上状况,我们该如何处理呢,大家直接将这一默认设置特性覆盖,设为min-width: 0,即便内容为空或是总宽不大,也可以使flex子原素在flex容器里准确地合理布局

处理编码如下所示

.flex {
  width: 300px;
  height: 100px;
  display: flex;
}
.left {
  flex: 0 0 50%;
  background-color: aqua;
}
.right {
  flex: 0 0 50%;
  background-color: red;
  min-width: 0;
  min-height: 0;

  overflow: hidden;
  word-break: break-all;
}

弹力规划的flex

如果采用flex:1;让弹力合理布局分派可用空间,那样应用width:0或是min-width: 0都能实现,即把头原素室内空间都设为0,由flex来分派剩下全部室内空间

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!