前言
- CSS3
- 文字溢出,显示省略符号需要区分情况进行处理:可分为单行和多行的情况。
单行文字溢出
假设有这样的需求,如图:
那么可以用如下代码实现:
<!DOCTYPE html>
<html>
<head>
<style>
div.test
{
white-space:nowrap;
width:12em;
overflow:hidden;
text-overflow:ellipsis;
border:1px solid #000000;
}
</style>
</head>
<body>
<p>div中完整的内容为 "文字溢出说三遍文字溢出说三遍文字溢出说三遍" :</p>
<div class="test">文字溢出说三遍文字溢出说三遍文字溢出说三遍</div>
</body>
</html>
实现功能的核心代码为:
div.test
{
white-space:nowrap;
width:12em;
overflow:hidden;
text-overflow:ellipsis;
border:1px solid #000000;
}
说明:
white-space:nowrap;
含义为段落中的文本不进行换行width:12em;
含义为div的宽度,目的是让文字显示不全(只能显示12个文字)overflow:hidden;
含义为溢出的部分就不显示了text-overflow:ellipsis;
含义为显示省略符号来代表被修剪的文本。
这些组合到一起的含义为:当文字溢出时,显示省略号。
多行文字溢出
需求是防不胜防的,有可能会遇到这样的需求:文字只显示3行,溢出文字用省略号代表,如图:
那么可以用如下代码实现:
<!DOCTYPE html>
<html>
<head>
<style>
div.test
{
width:5em;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
border:1px solid #000000;
}
</style>
</head>
<body>
<p>div中完整的内容为 "文字溢出说三遍文字溢出说三遍文字溢出说三遍" :</p>
<div class="test">文字溢出说三遍文字溢出说三遍文字溢出说三遍</div>
</body>
</html>
实现功能的核心代码为:
div.test
{
width:5em;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
border:1px solid #000000;
}
说明:
width:5em;
规定div的宽度,目的是让文字显示行数超过3行(一行只能显示5个文字)overflow:hidden;
含义为溢出的部分就不显示了display: -webkit-box;
含义为将对象作为弹性伸缩盒子模型显示 。但,这是chrome/safari(-webkit)浏览器的私有属性。出了chrome/safari浏览器,可能会不好用,可能会不好用,可能会不好用。-webkit-box-orient: vertical;
含义为垂直排列,方向是从上向下。-webkit-line-clamp: 3;
含义为显示3文字。相当于变相的设置高度。
这些组合到一起的含义为:文字只显示3行,溢出文字用省略号代表。
处理英文时,需要加点料
如果用上面的方法处理英文时,当遇到长单词时会失效,比如这种:
<!DOCTYPE html>
<html>
<head>
<style>
div.test
{
width:5em;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
border:1px solid #000000;
}
</style>
</head>
<body>
<p>div中完整的内容为 "wo shi henchanghenchangdedanci wo shi henchanghenchangdedanci wo shi henchanghenchangdedanci" :</p>
<div class="test">wo shi henchanghenchangdedanci wo shi henchanghenchangdedanci wo shi henchanghenchangdedanci</div>
</body>
</html>
这时需要添加上下面的代码:
word-wrap:break-word;
word-break:break-all;
说明:
word-wrap:break-word;
含义为不得以时,将长单词(也可以是URL)从内部进行换行word-break:break-all;
含义为不讲条件的将长单词(也可以是URL)从内部进行换行
word-break:break-all;
div.test
{
width:5em;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
word-break:break-all;
border:1px solid #000000;
}
word-wrap:break-word;
div.test
{
width:5em;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
word-wrap:break-word;
border:1px solid #000000;
}
使用clamp.js也可以处理文字溢出
略。
再说一下多行文字溢出
不加overflow: hidden;
指定高度
div.test
{
width:5em;
height:10em;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
border:1px solid #000000;
}
推荐的写法
div.test
{
width:5em;
overflow: hidden;
display: -webkit-box;
display: -moz-box;
display: box;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
box-orient: vertical;
-webkit-line-clamp: 3;
-moz-line-clamp: 3;
line-clamp: 3;
word-wrap:break-word;
word-break:break-all;
}
说明:
-moz
代表firefox浏览器私有属性,-ms
代表IE浏览器私有属性,-webkit
代表chrome/safari私有属性,-o
代表opera私有属性私有属display: -webkit-box; display: -moz-box; display: box;
含义为支持firefox、chrome/safari、CSS3标准(万一浏览器都支持CSS3了呢,所以放上display: box;
吧)。line-clamp: 3;
网上说这个属性CSS3中未定义。万一CSS4中有呢,还是先写上吧。
全文完。
参考
html在线运行https://www.runoob.com/runcode
https://www.w3school.com.cn/cssref/pr_text-overflow.asp
https://www.w3school.com.cn/cssref/pr_text_white-space.asp
https://www.cnblogs.com/linsimei/p/7273353.html
https://blog.csdn.net/u010651696/article/details/99291677
https://www.cnblogs.com/ldlx-mars/p/6972734.html
https://blog.csdn.net/chensonghuiyuan/article/details/49204747
https://blog.csdn.net/qq_26983555/article/details/80175428