我有一种情况,我想显示一个占据其容器整个宽度并且不超过一行的文本,但如果它有行分隔符,它不会显示连续的行。
我在纯 CSS 中尝试了以下代码:
.line-container {
width: 230px;
height: 20px;
}
.single-line {
width: 100%;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
<div class="line-container">
<div class="single-line">Lorem
ipsum dolor amet Lorem ipsum dolor amet Lorem ipsum dolor
amet Lorem ipsum dolor amet Lorem ipsum
dolor amet Lorem ipsum dolor amet Lorem ipsum dolor amet Lorem ipsum dolor amet
Lorem ipsum dolor amet Lorem ipsum dolor amet</div>
</div>
white-space
这可以正常工作,但前提是在设置为nowrap
删除换行符时没有换行符作为属性。其他可能的值normal
、pre
和pre-wrap
并pre-line
没有太大帮助,因为当时文本没有在 1 行上输出。
我还读到有几种方法可以在以下链接中使用字符 \r 和 \n (换行符和换行符)来解释新行的存在:
https://es.wikipedia.org/wiki/New_Line
我想如果我从数据库或文件中读取文本并从服务器接收它,如果它是在不同的操作系统中编写的,这会给我带来很多不便。
是否有我不知道的 CSS 解决方案,或者我应该使用 javascript 片段来创建一个组件,就像我向您展示的那样?
我终于得到了我想要的。我不必使用 javascript,只需使用 CSS。
通过这种方式,我能够为任何环境实现可移植的解决方案,并且根据规范,它甚至可以在 Internet Explorer 6 中工作。
事实证明,
white-space
当设置为pre
if 时,该属性会保留换行符,它甚至会在遇到元素时考虑在内,<br/>
但它确实会产生这种有趣的效果。它所做的是创建小的文本片段。当属性
text-overflow
设置为它时,它会ellipsis
剪切超出其容器大小的文本,因此需要overflow: hidden;
与属性结合使用,以便在文本较大的情况下white-space
显示省略号。...
overflow: hidden;
到达那里我只需要在容器上再应用一个就可以了!只需要使用这个小的 css 片段来实现它
注意:根据属性的文档,此解决方案仅用作分隔符
white-space
时不起作用。\r
根据仅适用于旧 Mac的 SO 文章,我认为这是完全可以接受的。\r
如果是这种情况,则必须使用javascript替换返回字符\n
才能达到此效果。包含显示文本的div的父div,大小固定,不允许文本正确显示,淘汰类
.line-container
在此处查看在线示例
我还告诉您,如果您的文本有换行符或换行符,您可以通过 Javascript 过滤那些不可打印的字符,例如:
使用此正则表达式和 replace() 方法,您可以删除换行符并返回:
你应该添加一个
"<br/>"
你想要换行的地方原因是 html 没有将 "enter" 解释为换行符 =)