正如@Salman A所指出的那样,很多字符(例如斜杠或冒号、取消划线等)未被识别为正确的单词/音节关节。像“chamitoff/profile”这样的字符串将被视为一个长复合词“chamitoffprofile”。
当涉及到像字符串这样的 URL 时,你不想溢出——你最好还是用类似的东西word-break: break-word;
说到 CSShyphens
属性:它的功能仍然“有限”(至少在 2021 年)。例如,Chrome 在版本 88 中引入了对这个功能的支持(根据 caniuse)。
这是一个可调整大小的片段:
*{
box-sizing:border-box;
}
body{
font-family: 'Segoe UI';
font-size: calc(1.75vw + 1.75vh / 2);
padding: 10px;
}
.resizable{
width: 20ch;
height: 10em;
hyphens: auto;
resize:both;
overflow:auto;
padding-right:1em;
border: 1px solid #ccc
}
.resizable p{
hyphens: auto;
}
.break-words{
hyphens: none;
word-break: break-word;
}
<h2>Example</h2>
<div class="resizable">
<p>people/type:astronauts/name-gregory-chamitoff/profile <br /><strong>Original</strong></p>
<p>peopletype:astronautsname-gregory-chamitoffprofile <br /><strong>Dash replaced by hyphens</strong></p>
<p>peopletype_astronautsname_gregory_chamitoff_profile <br /><strong>Dash replaced by underscores</strong></p>
<p>peopletype astronautsname-gregory-chamitoffprofile <br /><strong>Dash and colons replaced by hyphens</strong></p>
<p>peopletype astronauts name gregory chamitoff profile <br /><strong>Dash replaced by spaces</strong></p>
<p class="break-words">people/type:astronauts/name-gregory-chamitoff/profile <br /><strong>Dash replaced by spaces</strong></p>
</div>
<h2>URLs</h2>
<div class="resizable">
<p><a href="#">https://www.maybeweshouldhaveoptedfor ashorterdomain.com/contact/specialinterest?product_id=1234567878</a> <br /><strong>URL – "hyphenated"</strong></p>
<p class="break-words"><a href="#">https://www.maybeweshouldhaveoptedfor ashorterdomain.com/contact/specialinterest?product_id=1234567878</a> <br /><strong>URL – word-break</strong></p>
<p class="break-words"><a href="#">contact@maybeweshouldhaveoptedfor ashorterdomain.com</a> <br /><strong>Email example</strong></p>
</div>
除非浏览器/css 实现广泛支持改进的断字概念,如hyphenate-limit-chars
(...以前存在)或断字例外规则,否则你应该真正抑制你的热情。
结论
(2021 年——希望明年我们会看到改进)
你仍然必须在不完美的“蛮力”方法之间做出选择,比如断词——至少可以防止不希望的溢出和不加思索的方法(......非常有礼貌)基于 CSS 的连字符属性/功能仍然缺少任何强制性的细粒度控件。