超长单词断词研究

330 阅读2分钟

演示代码片段:gist.github.com/skylar2826/…

默认行为

默认位置不够,单词(word.length <= width)换行展示;对于超长单词(word.length > width)默认不换行展示。

image-20230414163011801.png

问题&实现方案探索

默认超长单词不换行,会导致内容撑开容器宽度,可能导致页面布局错乱。

我们期望超长单词进行换行,方案探索:直接断词。

直接断词

实现

width: 200px;
word-break: break-all;

演示

image-20230414162821194.png

问题&解决方案探索

直接断词展示无法直观识别出一个完整单词。

我们期望能直观识别出一个单词,方案探索:单词断词使用“-”连词符。

单词断词使用“-”连词符

使用浏览器默认断词规则

实现

width: 200px;
hyphens: auto; // 使用浏览器默认断词规则

演示

image-20230414162727887.png

问题&解决方案探索

不同浏览器使用的默认断词规则不同,会造成不同浏览器文本展示不统一的问题。

我们期望在不同浏览器上展示统一,即使用同一断词规则。方案探索:使用npm包统一断词规则,在单词中间生成­

使用npm包统一断词规则,在单词中间生成­

实现

width: 200px;
hyphens: manual; // 自定义实现
使用hyphen npm包协助插入"&shy;" // hyphen断词规则: [hyph-utf8](https://www.ctan.org/pkg/hyph-utf8)

小结

为防止超长单词不断词导致布局错乱,我们对单词进行断词展示,断词单词以“-”连接。如需考虑不同浏览器展示统一,可以考虑hyphen包,他帮助我们使用hyph-utf8断词规则在单词中间生成­连词符,使得单词在合理的位置进行断词。

多行文本内容超长省略+单词断词

实现

width: 200px;
-webkit-line-clamp: 3;
display: -webkit-box;
-webkit-box-orient: vertical;
overflow: hidden;
hyphens: auto;

演示

image-20230414164621094.png

word-break、overflow-wrap属性详解

word-break

word-break: break-all; // 能显示完也直接断词

image-20230414170155907.png

word-break: keep-all; // 显示不完,换行;换行还显示不完,溢出展示,即不断词

image-20230414165035164.png

overflow-wrap

overflow-wrap: break-word; // 显示不完,换行;换行还显示不完,断词
/* or */
overflow-wrap: anywhere; // anywhere与break-word相似,但anywhere更适用弹性布局

image-20230414165157822.png

word-break: normal; // 使用默认规则断词:显示不完,换行;换行显示不完,溢出,即不断词 
overflow-wrap: anywhere; // 显示不完,换行;换行显示不完,断词
// word-break + overflow-wrap = word-break: break-normal(废弃);