自适应flex-item内英文自动折行后的宽度问题
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
换行的锅
我们来看这个好玩的问题哈
这个灰色部分是一个 flex 布局的容器
它的宽度被固定在了150像素哈
然后呢左侧这是一个title
然后右侧是一个badge标签
现在这个title变长的时候呢
带着标签会跟着往后挪
这个没有任何问题哈
但问题是如果这个title太长了
长到导致他换行了
那这个badge标签就会离这个文字
有距离那为什么会有这个距离呢
其实我们把这个
换行的规则改一下
我们改成
break-all
大家看 这样就没问题
所以呢我们可以推断出来
他按照单词换行的情况下
虽然里边的文字换行了
但是整个这个
span标签的宽度是没有变化的
大家看 现在是125
然后呢我们再看后边这个
badge标签
25 加一起正好是150
也就是说这里边的文字之所以会换行
是因为
span标签(title)的宽度长长长到125之后
还是不够用
所以他里边的文字就会换行
但是文字虽然换行了
所以呢要解决这个问题
我们需要拿到
他自动换行以后的实际宽度
假如说是90
我们试一下
我们把它强制改成90,大家看
这样就没有问题
但是我们怎么才能拿到他换行
之后的实际宽度呢
我记得原来我们用span标签的时候
你设宽度反而不好使
他就是一直是包裹的内容,内容有多少
他span标签有多宽
但为什么到这就不行了呢
原因是哈
他被放到了一个
flex 布局里面
大家看
外边这是 flex
所以呢这个 span
表签他的 display 就不是inline了
他是一个 block
所以我们要想办法让它变成inline
所以呢
我们先把它外面套上一层
我们这样
套上一层以后呢
我们就会发现
这个 div 是125
但里边的span呢
他的实际宽度(他这写的 auto, 还没有)
但是我们可以用 js 拿到哈
我们试一下
document.querySelector...
我们就直接找span吧(现在只有一个span)
点 offset...
width 大家看 84
那我们把
这个外边的 div 的宽度设置成84
试一下
大家看!这没有问题了
所以呢我们可以这样写 script
然后在这里边先获取到所有的...
啊我们把这个title(样式)放外边(的容器上)
好我们在这拿到所有的title
等于 document
点 querySelectorAll
好然后我们遍历这个title
(变量名)我们就用:
"t" 吧
然后
我们取到 t点里边的selector里面的
span标签
点 offsetWidth
拼接上 px
把它赋值给谁呢
复制给 t.style.width
好我们刷新一下 大家看可以了
我把这个文字改少点
没问题
换行
也没问题
然后呢
我们把它复制一遍
然后呢来个 吧
粘贴
这是两个
然后呢我们少点
大家看
也没问题