前端项目中flex文本溢出的情况有哪些解决方案
Admin 2022-09-16 群英技术资讯 282 次浏览
用一个简化的css和html为例
<style> * { margin: 0; padding: 0; } .box { display: flex; height: 200px; margin-top: 20px; width: 400px; margin: 20px auto 0 auto; } .left { width: 100px; height: 100%; background: red; } .right { flex: auto; height: 100%; background: blue; color: #fff; } .text { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } </style> <div class="box"> <div class="left">123</div> <div class="right"> <p class="text"> 这是一段很长长长长长长长长长长长长长长长长长长文字,这是一段很长长长长长长长长长长长长长长长长长长文字 </p> </div> </div> <div class="box" style="background: green">正常的box</div>
上面是一个flex容器,包括着两个容器,其中右边的容器中我们希望的应该是正常展示,且文本显示省略号,但总是事与愿违。页面展示如下,左边红色区域被压缩,蓝色的区域拉伸了,并将父容器撑开。
那么,我们该如何解决怎么这个问题呢?
方法有三,如下
overflow: hidden
width: 0
min-width: 0
第一种 overflow超出截断比较好理解。我们看看剩下的两种。
第二种,首先看下flex属性
<!-- 缩写 --> flex: auto; flex-grow: 1; flex-shrink: 1; flex-basis: auto; <!--默认值为--> flex: 0 1 auto;
flex: auto是flex: 0 1 auto的缩写
其中
上面作妖的属性就是flex-basis。flex-basis的值有 content
| &;width&;
flex-basis: 会检索项目的width 或 height 值作为 flex-basis 的值。如果 width 或 height 值为 auto
,则 flex-basis 设置为 content
,也就是基于 flex 的元素的内容自动调整大小。
注意: flex-basis设置 0
和 0%
上有所区别, 如果flex-basis
的值为百分数,且它flex容器的尺寸没有被显式设置,此时flex-basis的值会被解析为content
, 值会根据flex子项的内容(指flex子项的子元素尺寸)来计算实际尺寸,多数情况下效果与 max-content 值一致,就是说flex子项的子元素有多长其主轴初始值就有多长。
这里蓝色容器的flex-basis为默认值0项目总宽度小于容器宽度,计算如下:
项目总宽度100px + 0px = 100px
待分配宽度400px - 100px = 300px
放大比例0 + 1 = 1 , 这是项目的flex-grow之和
每个项目得到自身的grow/总的grow之和比例的剩余空间。
红色容器得到0/1 * 300px = 0,最终宽度100px + 0px = 100px
蓝色容器得到 1/1 * 300px = 300px,最终宽度300px
将蓝色容器的宽度设为0,验证下我们的结果,结果如下,解决成功。
一般情况下 min-width 属性默认值是 0 ,但是 Flexbox 容器中的 flex 项的 min-width
属性默认值是 auto
,这样能为 Flexbox 布局指明更合理的默认表现。将min-width设置成0,width未设置默认值为auto。这个时候会使用shrink-to-fit
算法去计算宽度(文献3中说明flexbox中也会使用到该算法), 算法如下:
width = min(max(preferred minimum width, available width), preferred width)
其中
那么计算如下: (816是当时浏览器获取的宽度)
min(max(0, 400px - 100px), 816px) = 300px
所以,设置最小宽度也能解决我们的问题。
html的内容如下,我们需要计算左右两个容器的宽度。
<style> .box { display: flex; height: 200px; margin-top: 20px; width: 400px; margin: 20px auto 0 auto; } .item-1 { background: red; width: 200px; flex-shrink: 2; } .item-2 { background: blue; width: 300px; flex-shrink: 3; } </style> <div class="box"> <div class="item-1">设置200px,实际169.23</div> <div class="item-2">设置300px,实际230.77</div> </div>
开始计算,此时项目总宽度超过父容器时,这个时候需要使用flex-shrink计算
Total = 200 * 2 + 300 * 3 = 1300
P1 = 200 * (2 / VS)
P2 = 300 * (3 / VS)
最终得出:
item-1的宽度为:200 - (500 - 400) * P1 = 169.23px
item-2 的宽度为:300 - (500 - 400) * P2 = 230.77px
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章带大家学习CSS媒体查询(Media Quires),详细介绍了媒体查询语法定义,从三个具体布局例子学习媒体查询的使用技巧;并介绍了一些scss、css属性知识。
这篇文章主要介绍了html5响应式开发自动计算fontSize的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本篇文章通过举例的方式来为大家讲解下如何在html中绘制一条水平线段,具体内容看以下详细步骤,供有需要的朋友参考参考。
在网页中我们经常会使用和看到刷新,那么你知道HTML中的iframe刷新方式有哪些吗?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
之前我们给大家分享了css3实现3d效果的内容,这篇文章给大家分享一个3d的loading效果的实例,下文有实现效果及代码,感兴趣的朋友可以借鉴参考。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008