CSS中flex-basis导致文本溢出怎么处理
Admin 2022-06-07 群英技术资讯 392 次浏览
不值一提的 flex-basis
,却给文本溢出添加省略号这个小小的功能带来很多了麻烦。下面来演示一下。
1. flex 家族
flex 里有很多的属性,我们经常用到的就是如下操作:
.container { display: flex; } .container > .left { flex: 1; } .container > .right { flex: 1; }
这样可以很方便的实现一个左右等分的布局。
我们来看一个引起问题的例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> <style> div { padding: 5px; border: 1px solid #ccc; } .no-effect { align-items: center; margin: 100px; width: 200px; color: #999; } .no-effect > div:first-of-type { margin-right: 10px; } p { color: red; } .no-wrap { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } </style> </head> <body> <div style="display: flex;" class="no-effect"> <div style="flex: 0 0 80px">我比较短</div> <div style="flex: auto"> <p class="no-wrap">我很长,不是开玩笑的,可以长到没边</p> </div> </div> </body> </html>
我们想要的效果:
但实际的效果:
为什么会出现这个情况?
2. flex-basis 从中作梗
flex: auto
实际上是三个属性的集合:
flex-grow: 1; flex-shrink: 1; flex-basis: auto;
flex-grow
表示放大比例, flex-shrink
表示收缩比例, flex-basis
表示分配多余空间前,项目占据的主轴空间。
我们左边 div 不放大,不缩小,固定 80px 宽度;右边 div 自动铺满剩余宽度也就是 200px - 80px = 120px,实际效果却远远超出了 120px,这是因为 flex-basis 为 auto 时的计算导致的。
我们来看看 flex-basis: auto 的历史:
content
来自动计算宽/高;所以当我们没有给 flex-basis
元素设置 width
时, flex-basis: auto
由内部的 content
决定宽度,且受 max/min-width
限制。
如此一来,在内部 content
自由的情况下,那么 flex-basis
元素的宽度就看 max/min-width
了。
max-width
的默认值是 none
,而 min-width
的默认值一般是 0
,而此处却是 auto
,这也是出现“异常”的原因了。
flex-basis
元素:
普通元素:
3. 解决方式
知道原因后,那我们就可以对症下药了。
width
属性即可了,只要 width
小于剩余空间即可,一般设置为 width: 0;
这样可百分之百确定小于剩余空间;width
但用 min-width
来限制也是一样的,既然 flex 项 的 min-width:auto
,那我们也设置一个小于剩余空间的值,一般也是 min-width: 0;
overflow:hidden
来限制溢出效果也是一致的。介绍了三种解决方式,再来聊聊前两种为什么可以解决的原因吧。
第一种很简单,width 设置为 0,但是 flex-basis
会让元素填满剩余空间,所以就会铺满,由于 P 元素有不换行显示省略号,会正常显示。
那么第二种呢?
第二种的情况比较复杂,当我们设置了 min-width
不为 auto 的值后,这里会用到 shrink-to-fit 算法,这个算法的计算机制如下:
min(max(preferred minimum width, available width), preferred width)
翻译成人话就是:
shrink-to-fit 的宽度 = min ( max (最小宽度, 可用宽度) , 首选宽度)
那么来计算一下:
由计算可得:
max(0, 272) = 272
min(272, 98) = 98
所以最终宽度是剩余部分 98px,当我们手动设置 min-width: 110px
时就可以看到超过溢出去了。
总结
css 并没有我们想象的那么信口拈来,还有有规律可循的,不过这个寻的过程却是有点复杂……遇到不解的可以多看看它是怎么来的,要干嘛,就能明白解决它的思路了。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
导入外部css样式表的方法使用link标签导入外部css样式表<linkrel="stylesheet"href="css/demo01.css">在样式表中import(导入)外部样式表@importurl("/crazy-html5/06css/css/demo01.css");使用内部样式表内部样式表只能作用于某一个网页,定义方式为在head头部添加style标签,在style标签中即可添加页面样式。<head><style ...
关于图片垂直居中显示,想必很多写css的人都研究过、或者说是搜寻过方法,下面这篇文章就给大家介绍关于图片与文字垂直方向不对齐问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
这篇文章主要介绍了利用html+css实现菜单栏缓慢下拉效果的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
时钟效果的实现有很多种方法,我们之前也介绍了很多种,这篇文章给大家分享用CSS3实现走动的时钟效果,那么这样的动画时钟效果效果具体怎样做呢?接下来我们详细的了解看看。
本文给大家分享使用纯css写的一个边沿打孔效果,需要的朋友参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008