文本溢出显示省略号时展示‘查看更多’按钮

本文介绍了一种通过CSS和绝对定位实现文本内容动态展示的方法,当元素内容超过四行时,使用省略号并配合'更多'按钮。通过创建虚拟元素和绝对定位,巧妙地控制了文本高度和按钮展示时机,避免了复杂的JavaScript监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

        元素宽度100%,宽度会随着浏览器缩放而变化。元素内文本超过4行时显示省略号,同时展示‘更多’按钮,点击更多按钮展示全部文本。如下图所示

分析:

        文本超出4行显示省略号可以通过display box实现,但是超出后展示‘更多’按钮不好处理,因为无法得知文本是否展示省略号。在行高固定20px的情况下,通过js获取元素高度也可以计算出文本的行数,又因为宽度会跟随浏览器宽度变化,所以需要监听resize事件,实时获取元素高度,计算行数。这样处理也可以满足需求,只是太过复杂,而且在resize事件中实时获取元素高度再计算,可能会卡顿。对于样式问题,尽可能的通过样式来处理,下面介绍另一种实现方案。

解决方法:

  • content是用来展示的元素,最大高度80px(四行高度),超出隐藏。
  • virtual是content的子元素,相对于content绝对定位,top为-20px(负一行高度),virtual内的文本和content相同,宽度也和content相同,virtual字体透明不显示,最大高度100px(五行高度),超出隐藏。
  • more是更多按钮,相对virtual绝对定位,top为80px(定位在virtual的第五行),背景白色(为了遮挡底部文本)。

        所以:

  1. content的内容小于四行时,virtual的内容小于四行,超出隐藏,more不展示
  2. content的内容到了第四行但未超出第四行时,virtual内容小于五行,more不展示
  3. content的内容超出四行时,virtual内容大于等于五行,more展示

        其他点击‘更多’按钮展示全部文本等实现很简单,就不再补充

好的,你的问题是如何实现多行溢出省略号并添加查看更多按钮在最后一行最后面。这个问题可以通过 CSS 的 text-overflow 属性和 JavaScript 来实现。 首先,我们可以使用 text-overflow 属性来实现文本溢出省略号的效果。该属性有三个值: - clip:剪裁文本,不显示省略号。 - ellipsis:在文本末尾显示省略号。 - string:在文本末尾显示指定的字符串。 我们可以将 text-overflow 属性设置为 ellipsis,这样当文本溢出就会显示省略号。 接下来,我们需要使用 JavaScript 来判断文本是否溢出,并在最后一行最后面添加查看更多按钮。这可以通过以下步骤来实现: 1. 获取文本元素和容器元素的高度和宽度。 2.文本元素的高度设置为 auto,这样它就可以根据内容自动调整高度。 3. 获取文本元素的实际高度。 4. 如果文本元素的实际高度大于容器元素的高度,则说明文本已经溢出了。 5. 获取最后一行文本的高度和宽度。 6. 创建一个按钮元素,并将其添加到容器元素中。 7.按钮元素定位在最后一行文本的下方,并将其文本设置为“查看更多”或者其他你想要的文本。 8. 添加一个点击事件监听器,当用户点击按钮显示完整的文本。 下面是一个简单的实现示例: HTML 代码: ``` <div class="container"> <p class="text">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed cursus massa eget diam suscipit, vel finibus neque gravida. Nulla facilisi. Aenean euismod purus eget libero scelerisque, vel volutpat velit lobortis. Sed sodales diam non justo bibendum, id dignissim augue lacinia. Sed vel nibh vitae ligula bibendum faucibus. Donec laoreet, nulla eu vehicula posuere, enim erat dignissim erat, in hendrerit nulla turpis vel velit. Sed quis enim vel velit suscipit tempor. Sed nec blandit quam. Sed eget nibh vel magna feugiat aliquet. Sed convallis, mauris sed lobortis posuere, felis enim tincidunt nibh, eget malesuada tellus nunc vitae purus. Ut id malesuada massa. Sed eget velit ut libero elementum lobortis.</p> </div> ``` CSS 代码: ``` .container { width: 200px; height: 100px; overflow: hidden; } .text { height: auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } ``` JavaScript 代码: ``` const container = document.querySelector('.container'); const text = document.querySelector('.text'); text.style.height = 'auto'; if (text.offsetHeight > container.offsetHeight) { const lineHeight = parseFloat(getComputedStyle(text).lineHeight); const lastLineHeight = text.offsetHeight % lineHeight; const lastLineWidth = text.offsetWidth - (text.offsetWidth / text.clientHeight) * lastLineHeight; const button = document.createElement('button'); button.innerText = '查看更多'; button.style.position = 'absolute'; button.style.bottom = '0'; button.style.right = `${lastLineWidth}px`; button.addEventListener('click', () => { text.style.height = 'auto'; button.style.display = 'none'; }); container.appendChild(button); } ``` 在这个示例中,我们首先获取了容器元素和文本元素,然后将文本元素的高度设置为 auto,以便它可以自动调整高度。接下来,我们使用 text.offsetHeight 和 container.offsetHeight 来比较文本元素和容器元素的高度,如果文本元素的实际高度大于容器元素的高度,则说明文本已经溢出了。 然后,我们获取了最后一行文本的高度和宽度,并创建了一个按钮元素,将其添加到容器元素中,并将其定位在最后一行文本的下方。最后,我们添加了一个点击事件监听器,当用户点击按钮显示完整的文本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值