首页 > 其他分享 >flex属性解决子元素宽度被压缩问题

flex属性解决子元素宽度被压缩问题

时间:2023-08-15 18:02:12浏览次数:31  
标签:flex max 压缩 100px width 宽度 font

问题

image

如上图所示, A 及 B 的 父盒子 是 C。其中 C 和 B 都用到了 flex 布局,目的是使文字水平对齐。

css 代码
// A 及 B 的父盒子
.cur-in-stan {
  color: red;
  height: 37px;
  font-size: 14px;
  font-weight: 700;
  display: flex;
  align-items: center;
  margin-right: 10px;

   // B 盒子
  .cur-in-stan-name {
    display: flex;
    align-items: center;
    max-width: 100px;
  }
}

其中 B 设置了 max-width: 100px。但当 B 中的文本内容宽度小于 100px 时(如下图所示),会导致 A 样式错乱。

image

分析

需求:让 A 占据宽度不变,B 最大宽度为 100px,B 中的文本宽度若超过 100px 则以省略号显示,鼠标悬浮显示完整内容。

若把 B 的 max-width: 100px 改为 width: 100px,不会发生上述 A 样式错乱的情形,但是会导致 B 宽度过大,与后面元素的间隔太大(如下图所示)。因此,B 必须要有 max-width

image

进一步分析

B 有 max-width,为什么会导致 A 样式错乱 ?

  • 当 B 没有固定宽度,只有最大宽度时,且 B 中的文本宽度小于最大宽度时:B 的宽度等于 B 中文本的宽度。
  • A 没有设定宽度。A 及 B 的父盒子也没有设定宽度。
  • 因此,A 及 B 的宽度都靠内部文本宽度撑起来。
  • 结论:由于父盒子宽度不够,A 的宽度会被压缩

解决方案

效果

image

方案一(推荐): 给 A 设置 flex-shrink: 0,则 A 的固定宽度不会被压缩

image

给 A 设置 `flex-shrink: 0`
.cur-in-stan {
  color: red;
  height: 37px;
  font-size: 14px;
  font-weight: 700;
  display: flex;
  align-items: center;
  margin-right: 10px;

  // A 盒子
  .label {
    flex-shrink: 0;
  }

  // B 盒子
  .cur-in-stan-name {
    display: flex;
    align-items: center;
    max-width: 100px;
  }
}

方案二:给 B 设置 flex: 1,让 B 中的文本撑满 flex 容器剩余空间

如果Flex容器中仅有一个项目设置了 flex: 1,那么这个项目的大小将填充整个Flex容器,并且在容器内不会留下任何空间。

给 B 设置 `flex: 1`
.cur-in-stan {
  color: red;
  height: 37px;
  font-size: 14px;
  font-weight: 700;
  display: flex;
  align-items: center;
  margin-right: 10px;

  .cur-in-stan-name {
    display: flex;
    align-items: center;
    max-width: 100px;
    // 让 B 中的文本撑满 flex 容器剩余空间
    flex: 1;
  }
}

分析 flex 属性

flex: 1 是以下内容的简写:

让该Flex项目在 Flex 容器中平均分配剩余的可用空间(如果有剩余的话)

flex-grow: 1; // 放大比例设置为 1,所以它会占据可分配空间的相同份额
flex-shrink: 1; // 在 Flex 容器宽度不足时,它会缩小
flex-basis: 0; // 确保该项目的最小大小为 0

以下为这三个属性的默认值:

image

参考链接:

  1. 菜鸟教程flex属性
  2. MDN关于flex属性
  3. 完美解决:flex布局中设置宽度被压缩的问题
  4. 前端每日一问:flex:1 是什么意思

标签:flex,max,压缩,100px,width,宽度,font
From: https://www.cnblogs.com/shayloyuki/p/17631959.html

相关文章

  • EdgeBERT:极限压缩,比ALBERT再轻13倍!树莓派上跑BERT的日子要来了?
    文|Sheryc_王苏这个世界上有两种极具难度的工程:第一种是把很平常的东西做到最大,例如把语言模型扩大成能够写诗写文写代码的GPT-3;而另一种恰恰相反,是把很平常的东西做到最小。对于NLPer来说,这种“小工程”最迫在眉睫的施展对象非BERT莫属。从18年那个109M参数的BERT,到52M......
  • label-wdith 不设置,则宽度为各自标签的宽度
    不设置label-width,表单域标签宽度为各自标签的宽度label-width="auto"表单域标签宽度为其中最宽的标签的宽度label-width设为某个px值,则表单域标签宽度为该值......
  • 压缩算法
    思路因为这个字符串可以被多层压缩,所以我们要找到最里层的中括号。刚开始的思路是利用栈,从前往后找,遇到'['的时候,将元素入栈,遇到']'的时候,让元素出栈,计算出解压后的字符串,然后继续往后遍历,一直到栈为空。但是编码的过程中发现这种办法太过复杂。后来发现,只要从后往前遍历,找到的......
  • exe压缩文件解压后自动运行某一文件,如vbs、cmd、bat
    支持sfx自解压功能的压缩软件一般可以实现标题所示需求,推荐Bandizip(标准版即可),下载安装就是标准版:http://www.bandisoft.com/bandizip/以解压MySoft.exe后自动执行pre_install.vbs为例:1、全选下图文件后,鼠标右键——添加到压缩文件(Bandzip) 2、自解压设置,填写完毕后点击“开......
  • js对图片进行压缩,并上传
    注意:重点关注这几个js方法:1、递归压缩文件: doCompressImage()2、具体的图片文件压缩方法:compressImage()3、将Blob 转换为base64:blobToBase64()以下代码,可以直接拷进html文件中,在浏览器打开即可看到效果。(以下代码是h5)<!DOCTYPEhtml><htmllang="en"><head><metacha......
  • flex 扇形菜单
    在继auzn经典Flex教程–KingnareStyle皮肤制作简介后,auzn又出品了经典作品–扇形菜单。本文英文版:Tutorials:StepbySteptoCreateyourSectorMenu。下面我们就来做个扇形菜单,首先来看看效果吧:[PieMenu.swf]只要设定好起始位置和总角度,似乎可以画出很多种组合.De......
  • 移动端布局之flex布局
    什么是flex布局基本含义Flex是FlexibleBox的缩写(注:意思是“灵活的盒子容器”),意为”弹性布局”,是CSS3引入的新的布局模式,用来为盒状模型提供最大的灵活性,它决定了元素如何在页面上排列,使它们能在不同的屏幕尺寸和设备下可预测地展现出来。基本概念采用Flex布局的元素,称为......
  • JSON数据压缩传输(一)- 无标记数组
    服务端string[]fields=dto.fields.Split(',');varresluts=newList<dynamic>();//只取前端使用的字段foreach(varitemindata){varobj=newSystem.Dynamic.ExpandoObject()asIDictionary<string,Object>;foreach(varfieldinfields){......
  • Linux解压/压缩文件命令
    1、.tar解包:tarxvfFileName.tar打包:tarcvfFileName.tarDirName(注:tar是打包,不是压缩!)2、.gz解压1:gunzipFileName.gz解压2:gzip-dFileName.gz压缩:gzipFileName3、.tar.gz和.tgz解压:tarzxvfFileName.tar.gz压缩:tarzcvfFileName.tar.gzDirName4、.bz2解压1:bzip2-dFile......
  • 【车载测试】CAN协议、CAN- FD协议和FlexRay协议 区别
    【上半场电动化,下半场智能化】一、CAN协议和CAN-FD协议的区别CAN(ControllerAreaNetwork)协议是一种广泛用于汽车和工业控制系统等领域的现场总线协议。CAN-FD(FlexibleDataRate)协议是对CAN协议的扩展,旨在提高CAN总线的数据传输速率和数据量。1.数据速率不同CAN协议是基......