实现单行、多行文本溢出显示省略号...css方法和js方法汇总

**

实现单行、多行文本溢出显示省略号…

**
前提: 在项目过程成中, 经常会遇到文本溢出以省略号… 代替的情况出现, 我总结了四个方法。

1:单行文本的溢出显示省略号
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
效果图:单行文本的溢出显示省略号
2:多行文本溢出显示省略号
overflow: hidden;
text-overflow:ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
注意: (局限性) 仅仅适用于WebKit浏览器及移动端
3:兼容写法
p {
position:relative;
line-height:1.6em;
height:3.2em;(n行、n倍的行高)
overflow:hidden;
}

	p::after {
	    content:"...";
	    position:absolute;
	    bottom:0;
	    right:0;
	    padding:0 10px;
	    background:url(bg.png) repeat-y;
	}	
	height高度真好是line-height的2倍;
	结束的省略号用了半透明的png做减淡的效果,或者设置背景颜色;
	IE6-7不显示content内容,所以要兼容IE6-7可以是在内容中加入一个标签,比如用...去模拟;
    要支持IE8,需要将::after替换成:after;
    **注意:(局限性)  文字未超出行的情况下也会出现省略号**

4:js方法
判断字符长度, 当字符超出某一长度了,以…替代
注意:
英文字母肯定lenght和字节数都一样:都是1
而中文lenght=1,字节数=2
因此,需要作的就是把中文字符的字节数计算出来。

var str='我我我';
var bytesCount;
for (var i = 0; i < str.length; i++)
{
  var c = str.charAt(i);
  if (/^[\u0000-\u00ff]$/.test(c)) //匹配双字节
  {
  bytesCount += 1;
  }
  else
  {
  bytesCount += 2;
  }
}
alert(bytesCount);
//结果是6
//原理也很简单,用正则判断是不是中文,如果是的话,字节数就加1。
 匹配中文字符的正则表达式: [\u4e00-\u9fa5]
 匹配双字节字符(包括汉字在内):[^\x0000-\x00ff]

可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

JS中的几个函数:

charAt(num) //获取字符串的num位置的字符
charCodeAt(num)//获取字符串的num位置的字符的unicode编码 
fromCharCode(num)//获取unicode编码对应的字符   
好的,既然您想了解如何实现单行多行文本溢出的省略,我将同时为您提供 CSS JavaScript 两种方法。 ## CSS 实现 ### 单行文本溢出的省略 可以使用 CSS 的 `text-overflow` 属性来实现单行文本溢出的省略,代码如下: ```css .ellipsis { width: 150px; /* 元素宽度 */ white-space: nowrap; /* 强制在一行内显示 */ overflow: hidden; /* 隐藏溢出的部分 */ text-overflow: ellipsis; /* 显示省略号 */ } ``` 将需要进行省略的元素添加 `.ellipsis` 样式即可。 ### 多行文本溢出的省略 可以使用 CSS 的 `display`、`-webkit-box`、`-webkit-line-clamp` `-webkit-box-orient` 属性来实现多行文本溢出的省略,代码如下: ```css .ellipsis { display: -webkit-box; /* 将元素设置为块级容器 */ -webkit-box-orient: vertical; /* 设置文本在垂直方向上排列 */ -webkit-line-clamp: 2; /* 设置最多显示两行文本 */ overflow: hidden; /* 隐藏溢出的部分 */ } ``` 将需要进行省略的元素添加 `.ellipsis` 样式即可。 需要注意的是,`-webkit-line-clamp` 是 WebKit 浏览器引擎私有属性,其他浏览器可能不支持。 ## JavaScript 实现 ### 单行文本溢出的省略 可以通过获取元素的宽度文本的宽度,比较它们的大小来判断是否需要省略。代码如下: ```javascript function ellipsisText(selector) { const elements = document.querySelectorAll(selector); for (let i = 0; i < elements.length; i++) { const element = elements[i]; const style = window.getComputedStyle(element); const elementWidth = element.clientWidth; const textWidth = element.scrollWidth; const ellipsis = '...'; if (textWidth > elementWidth) { const text = element.textContent; const textLength = text.length; let i = textLength; while (i > 0 && (textWidth + ellipsis.length) > elementWidth) { i--; element.textContent = text.slice(0, i); textWidth = element.scrollWidth; } element.textContent = element.textContent + ellipsis; } } } ``` 这里的 `selector` 是需要进行省略的元素的选择器。将需要进行省略的元素传入该函数即可。 ### 多行文本溢出的省略 使用 JavaScript 实现多行文本溢出的省略比较麻烦,需要先获取元素的行高,再计算需要显示的行数,最后根据行数文本内容进行裁剪添加省略号。代码如下: ```javascript function ellipsisText(selector, lineCount) { const elements = document.querySelectorAll(selector); for (let i = 0; i < elements.length; i++) { const element = elements[i]; const lineHeight = parseInt(window.getComputedStyle(element).lineHeight, 10); const height = lineHeight * lineCount; const text = element.textContent; const textLength = text.length; let i = textLength; while (element.clientHeight > height && i > 0) { i--; element.textContent = text.slice(0, i); } if (i < textLength) { element.textContent = element.textContent.slice(0, i - 3) + '...'; } } } ``` 这里的 `selector` 是需要进行省略的元素的选择器,`lineCount` 是需要显示的行数。将需要进行省略的元素行数传入该函数即可。 需要注意的是,该方法只适用于行高固定的情况下,如果行高不固定,最好还是使用 CSS实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值