优雅的处理文本溢出截断

简介: 文本溢出截断是一个比较常见的场景,如新闻列表页、微博列表、商品列表等,溢出截断主要是为了保证界面的整齐。在《前端开发需要知道的 10 个 CSS 技巧》中有提到过多行文本溢出的处理,本文总结一些优雅的处理文本溢出截断的方法。

文本溢出截断是一个比较常见的场景,如新闻列表页、微博列表、商品列表等,溢出截断主要是为了保证界面的整齐。在《前端开发需要知道的 10 个 CSS 技巧》中有提到过多行文本溢出的处理,本文总结一些优雅的处理文本溢出截断的方法。

先来看一段html,如下:

<div class="block">
    <div class="block-content">
        <p>卡耐基对微笑有这样的描述:“它在家中产生,他不能买,不能求,不能借,不能偷,因为在人们得到它之前,对谁都是无用的东西,他给予后人之后,会使你得到别人的好感,它是疲倦者的休息,希望的阳光,悲哀者的力量,又是大自然免费赋予人们的一种解除苦难的良药。” </p>
    </div>
</div>

基础样式如下:

.block {
    width: 400px;
    background-color: #fff;
    border: 3px solid #646464;
}
.block-content {
    text-align: justify;
}

image.png

希望把内容限制在三行以内,多余的部分已省略号 替换,下面就围绕这个需求来展开。

line-clamp

之前有介绍过,使用line-clamp,下面修改样式 .block-content ,如下:

.block-content {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    text-align: justify;
    overflow: hidden;
}

现在效果如下:

image.png

从效果上来看,是达到了需求,CSS完美的解决了。个人觉得前端开发还需要一点审美,上面的效果看着很难受,文字内容和边框之间没有距离产生压抑感。

接下来尝试增加一些边距,修改样式,如下:

.block-content {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    text-align: justify;
    overflow: hidden;
    padding: 1.5em;
}

image.png

一行代码,产生了边距,但不符合需求了,是的,填充让 line-clamp 效果显得不那么完美,需要改成下面这样:

.block-content {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: horizontal;
    text-align: justify;
    overflow: hidden;
    padding: 1.5em 1.5em 0em 1.5em;
    margin-bottom: 1.5em;
}

这样都达到预期目的了,效果如下:

image.png

在使用 line-clamp 处理文本溢出截断的时候设置 padding-bottom  需要特别注意

增加淡出效果

这种方案只适合固定高度的文本模块,在上面实现方案的基础上,设置 line-height: 1.6em;,展示3行文本,那么高度就是 4.8em(1.6em × 3)。接下来增加一个fade-out样式,代码如下:

.fade-out {
    position: relative;
    height: 4.8em;
}
.fade-out:after {
    position: absolute;
    width: 50%;
    height: 1.6em;
    content: "";
    text-align: right;
    bottom: 0;
    right: 0;
    background: linear-gradient(
        to right,
        rgba(255, 255, 255, 0),
        rgba(255, 255, 255, 0.9) 50%
    );
}

将其增加到 .block-content 元素上,即 class="block-content fade-out",看到效果如下:

image.png

更改溢出省略符

默认的溢出省略符为,参照上面方案的实现原理,可以将溢出省略符换成希望的内容,示例换成 ==> ,增加样式 .truncation ,代码如下:

.truncation {
    position: relative;
    max-height: 4.8em;
    overflow: hidden;
    padding-right: 1rem;
}
.truncation::before {
    position: absolute;
    content: "==>";
    width: 2em;
    height: 1.6em;
    line-height: 1.2em;
    bottom: 0;
    right: 1.2em;
    z-index: 2;
    color: #ff0000;
    text-align: center;
}
.truncation::after {
    content: "";
    position: absolute;
    width: 2em;
    height: 1.6em;
    background: #ffffff;
    bottom: 0;
    right: 1.2em;
    z-index: 1;
}

html 对应结构:

<div class="block">
    <div class="block-content truncation">
        <p>卡耐基对微笑有这样的描述:“它在家中产生,他不能买,不能求,不能借,不能偷,因为在人们得到它之前,对谁都是无用的东西,他给予后人之后,会使你得到别人的好感,它是疲倦者的休息,希望的阳光,悲哀者的力量,又是大自然免费赋予人们的一种解除苦难的良药。” </p>
    </div>
</div>

效果如下:

image.png

JavaScript方式

使用JavaScript方式实现文本溢出截断需求有很多种方案,这里介绍一种使用 Clamp.js 库,兼容大部分浏览器,不足的是需要作用在包含文本的标签上,如本实例就需要传入的对象是 .block-content p,代码如下:

const blockContent = document.getElementById("block-content-p");
$clamp(blockContent, {
    clamp: 3,
    useNativeClamp: false,
    truncationChar: " ",
    truncationHTML: '&nbsp;<strong style="color:#ff0000;font-weight:bold;">==></strong>',
});

效果如下:

image.png


相关文章
|
Linux Shell 数据安全/隐私保护
Linux配置代理请求
Linux配置代理请求
389 0
|
SQL 流计算 OceanBase
这个错误提示表明在运行时找不到`org.apache.flink.table.api.ValidationException`类
这个错误提示表明在运行时找不到`org.apache.flink.table.api.ValidationException`类
804 4
|
2月前
|
存储 边缘计算 人工智能
79_边缘设备环境:Raspberry Pi搭建
在当今人工智能快速发展的时代,大语言模型(LLM)已经成为自然语言处理领域的核心技术。然而,传统的LLM部署通常需要强大的服务器资源,这限制了其在资源受限环境中的应用。随着边缘计算的兴起,在轻量级设备上部署和运行LLM成为了新的技术趋势。树莓派(Raspberry Pi)作为一款广泛使用的单板计算机,凭借其小巧的体积、低功耗特性和不断提升的计算能力,成为了边缘部署LLM的理想选择。
|
6月前
|
监控 API 数据安全/隐私保护
淘宝京东价格监控API接口:构建智能价格生态的基石
淘宝和京东的价格监控API接口为品牌方、商家及第三方服务商提供了强大的数据支持,以下从接口功能、调用方式、应用场景等方面进行详细介绍
|
6月前
|
XML JSON 供应链
跨境卖家必看!2025年1688店铺所有商品接口新功能解锁全球供应链
1688店铺所有商品接口是1688开放平台提供的API,用于获取店铺商品信息,支持HTTP/GET或POST请求,返回JSON或XML格式数据。主要功能包括商品信息获取(如ID、标题、价格等)、筛选与排序(关键词、价格区间等)、分页查询等,适用于商品管理、竞品监控和数据分析。调用时需构造参数(如method、app_key、session等)并处理响应数据。
|
运维 监控 jenkins
Jenkins有哪些优势和劣势
【10月更文挑战第18天】Jenkins有哪些优势和劣势
509 2
|
消息中间件 存储 开发者
实现AMQP的高效消息传递机制
【8月更文第28天】高级消息队列协议 (AMQP) 是一个为消息中间件设计的开放标准应用层协议。它为消息传递系统提供了标准化的方法,从而确保了高性能和可靠性。本文将详细介绍AMQP中的一些关键特性,并通过示例代码展示如何利用这些特性。
382 2
|
9月前
|
人工智能 算法 搜索推荐
人工智能技术对未来就业的影响
人工智能大模型技术正在重塑全球就业市场,但其核心是"增强"而非"取代"人类工作。虽然AI在数据处理、模式识别等标准化任务上表现出色,但在创造力、情感交互和复杂决策等人类专属领域仍存在明显局限。各行业呈现差异化转型:IT领域人机协同编程成为常态,金融业基础分析岗位减少但复合型人才需求激增,医疗行业AI辅助诊断普及但治疗决策仍依赖医生,制造业工人转向技术管理,创意产业中人类聚焦高端设计。未来就业市场将形成人机协作新生态,要求个人培养创造力、情商等AI难以替代的核心能力,企业重构工作流程。AI时代将推动人类向更高价值的认知活动跃升,实现人机优势互补的协同发展。
1087 2
|
Java 应用服务中间件 容器
SpringBoot配置外部Tomcat并打war包
SpringBoot配置外部Tomcat并打war包
402 0
|
机器学习/深度学习 数据采集 人工智能
基于可图Kolors的皮影戏风格LoRA训练&创作
可图Kolors-LoRA风格故事挑战赛比赛过程心得分享
446 8
基于可图Kolors的皮影戏风格LoRA训练&创作