需求情况
在项目开发过程中,
曾经遇到过这样一个样式需求。
在一行中,分为三个部分。
左右部分固定宽度,
中间部分适配机型宽度,
如果中间的文字超出宽度则以省略号显示。
当时没有觉得很复杂,
结果在实现的时候,兜兜转转踩了好多坑,
其实这个应该算是比较常见的样式吧,
决定把他记录下来,防止以后忘记。
关于省略号
其实,文本超出范围以省略号显示,这个样式还是很常见的。
一行文本超出宽度以省略号显示。
1 2 3 4 5 6 7
| .text-ellipsis { display: block; width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
多行文本超出宽度以省略号显示。(只能适配 webkit 浏览器和移动端)
1 2 3 4 5 6 7 8 9 10 11 12
| .textarea-ellipsis { display: -webkit-box; width: 100%; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3; word-wrap: break-word; word-break: break-all; text-align: justify; }
|
在刚刚上述的需求里面。
通过 flex 布局,左右宽度固定,中间宽度自适应。
那么在中间的模块里面,
直接使用 text-ellipsis 的样式是不生效的。
解决方法
1 2 3 4 5 6 7
| <div class="module-wrap"> <div class="module-left">1111</div> <div class="module-mid"> <div class="mid-text text-ellipsis">abcabcabcabcabcabcabcabcabc</div> </div> <div class="module-right">2222</div> </div>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| .module-wrap { width: 100%; display: flex; flex-direction: row;
.module-left { height: 100%; flex: 0 0 120px; }
.module-mid { flex: 1 1 auto; width: 0; height: 100%;
.text-ellipsis { display: block; width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } }
.module-right { height: 100%; flex: 0 0 120px; } }
|
后记
其实这个问题之前遇到过一次,
当时为了解决线上问题,
就那么默默的划过去了。
不过前几天正巧又遇到了这个样式的需求,
只记得当初是这么做过,
不记得具体怎么实现的了。
结果又是重复的踩了一轮坑。
吸取教训,及时复盘,
将这个 CSS 样式整理出来,引以为戒。