繁体   English   中英

html5 或 css '智能文本流' 将句子或段落均匀分布在同样宽的行上?

[英]html5 or css 'smart text flow' to evenly distribute a sentence or paragraph over equally wide lines?

假设我有一个动态 HTML 元素( spandiv或其他),里面有一个句子或一段文本,如下所示:

两条线

现在如果我把句子稍微长一点,它可能需要额外的一行,像这样:

三行错误

请注意最后一个单词是如何在单独的行上的。 所以前两行已满。 从某种意义上说,它们占据了这个元素中的全部可用空间。 第三行只包含一个单词,而且大部分都是空的。

我觉得这很令人不安,我想知道是否有一个技巧可以在所有行之间更均匀地分配可用空间。 我的意思是这样的:(请注意,这是完全相同的句子)

右三行

它应该根据字体和浏览器视图大小以及元素的宽度自动重新流动,这可能取决于屏幕分辨率。

是否有一些聪明的 HTML5 或 CSS3 方法来实现这一点?

在搜索和查看与此问题类似的主题后,我确实找到了我熟悉但并不是我真正想要的text-align: justify属性。
text-align: justify倾向于通过增加单词之间的空格来将所有行扩展到包含元素的完整行。

相反,我真正要寻找的是重新分配单词的东西,以便所有行都更窄,即不占用所有水平元素空间。 以某种方式导致所有线条都一样宽(或尽可能接近)。

所以我的意思不是这样:(这就是text-align:justify所做的)

文本对齐对齐

将此与上面的示例进行比较。

我知道您要求提供 CSS 解决方案,但我认为还没有。 以下是我的 JS 解决方案。

 function createBetterLineBreaks(el) { var originalWidth = el.offsetWidth; var originalHeight = el.offsetHeight; for (let i = originalWidth - 1; i >= 0; i--) { el.style.width = `${i}px`; if (el.offsetHeight > originalHeight) { el.style.width = `${i + 1}px`; break; } } } // hover effects document.querySelector('.box').addEventListener('mouseenter', function () { createBetterLineBreaks(document.querySelector('.box.text')); }); document.querySelector('.box').addEventListener('mouseleave', function () { document.querySelector('.box.text').style.width = 'unset'; });
 .box { width: 300px; font-size: 30px; border: 1px solid black; border-radius: 5px; padding: 20px; display: flex; align-items: center; justify-content: center; }
 <div class="box"><span class="text">hover this box to distribute the text more evenly</span></div>

您正在寻找 CSS文本模块 4属性text-wrap: balance 它已被提出但遗憾的是尚未实施,因此在此期间,请使用此 jQuery polyfill balance-text

 balanceText();
 .box { width: 300px; font-size: 30px; border: 1px solid black; border-radius: 5px; padding: 20px; display: flex; align-items: center; justify-content: center; }.balance-text { text-wrap: balance; }
 <script src="//cdn.jsdelivr.net/npm/balance-text@3.3.0/balancetext.min.js"></script> <div class="box"><span class="text balance-text">The words in this sentence cause it to require three lines.</span></div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM