【CSS Tricks】试试新思路去处理文本超出情况

devtools/2024/10/8 23:19:28/

目录

  • 引言
  • 一、常规套路
    • 1. 单行文本省略
    • 2. 多行文本省略
  • 二、新思路美化一下
    • 1. 单行/多行文本隐藏
    • 2. 看下效果
  • 三、总结

引言

本篇为css的一个小技巧

文本溢出问题是一个较为常见的场景。UI设计稿为了整体的美观度会将文本内容限制到一定范围内,然而UI设计阶段并不能预先适配任意长度的文字信息,所以需要从开发侧操作一下,将文本限制在UI设计的范围内。

文本溢出的开发场景:

  • 卡片标题过长
  • 用户通知信息列表摘要信息过长。
  • 上传附件列表,文件名过长。
  • 下拉列表选项文本过长。
  • 其他

一、常规套路

准备一份文本内容:

    <div class="ellipsis_text">在网页或应用设计中,当多行文本内容超过设定的显示范围时,使用省略号来表示文本被截断是一种常见的做法。这不仅有助于保持界面的整洁美观,还能有效利用有限的空间展示尽可能多的信息。实现这一效果通常需要CSS样式支持,如设置overflow:hidden;、text-overflow: ellipsis;和display:-webkit-box;等属性,并结合-webkit-line-clamp属性控制显示的行数。这种方法适用于大多数现代浏览器,能够确保即使在不同设备上也能一致地呈现文本截断效果。</div>

1. 单行文本省略

css">.ellipsis_text {width: 200px; /* 需限制宽度 */overflow: hidden; /* 隐藏溢出的内容 */white-space: nowrap; /* 确保文本在一行内显示 */text-overflow: ellipsis; /* 使用省略号表示文本溢出 */
}

2. 多行文本省略

css">.ellipsis_text {width: 200px;overflow: hidden; /* 隐藏溢出的内容 */display: -webkit-box;  /* 使用Webkit内核的弹性盒布局模型来显示对象。这种布局模型允许更灵活地控制子元素的排列和对齐方式。 */-webkit-line-clamp: 3;  /* 可以把块容器中的内容限制为指定的行数。它只有在 display 属性设置成 -webkit-box 或者 -webkit-inline-box 并且 box-orient 属性设置成 vertical时才有效果。 */-webkit-box-orient: vertical; /* 设置弹性盒对象的子元素排列方向为垂直。这意味着子元素会从上到下依次排列,这对于多行文本尤其重要。 */
}

-webkit-line-clamp 值设置为1,同样可以获得单行文本省略的效果。

各属性介绍查看上述代码注释


二、新思路美化一下

1. 单行/多行文本隐藏

核心点在于,利用overflow隐藏多余内容;利用伪类制作遮罩隐藏后半段,营造还有更多内容的引导效果。

解释下代码设计逻辑

  1. 设置四个css变量:
    • --line_clamp 表示需要显示多少行。
    • --line_height 表示行高,这个很重要,这里实现的效果依赖于确定的行高,用于计算总体容器高度以及遮罩高度。
    • --background_color--font_color 这两个变量依据自己需求设置即可,颜色需要反色使对比明显。
  2. 先确定文本行高,再使用 --line_clamp 乘以 --line_height 确定总体容器的高度。
  3. 利用伪类after设置背景色渐变,通过定位移动到最后一行进行内容遮罩。
css">    .ellipsis {--line_clamp: 3;--line_height: 2rem;--background_color: #000;--font_color: #fff;width: 400px;line-height: var(--line_height);height: calc(var(--line_height) * var(--line_clamp));overflow: hidden; /* 隐藏溢出的内容 */position: relative;background-color: var(--background_color);color: var(--font_color);font-weight: bold;font-size: 24px;}.ellipsis::after {content: "...";width: 400px;height: var(--line_height);position: absolute;right: 0;bottom: 0;background: linear-gradient(to right,transparent 50%,var(--background_color) 90%);}

2. 看下效果

在这里插入图片描述


三、总结

本篇内容不算复杂,主要涉及到了css变量和css伪类两个要点。将常规样式固化,核心样式提取出简单易理解的变量方便定制化修改。灵活运用伪类,给本体dom添加额外装饰,达到最终样式的表达效果。

虽然我们已经完成了长文本的隐藏功能,但是为了网页内容的完整性,我们仍需考虑添加title属性提示全文,或是点击弹窗、伸展dom等方式展示全文。在开发过程中不断完善整体的页面逻辑。

再接再厉~


http://www.ppmy.cn/devtools/122389.html

相关文章

GPT带我学-设计模式16-原型模式

概述 原型模式是一种创建型设计模式&#xff0c;它允许通过复制现有对象来创建新对象&#xff0c;而不是通过类的构造函数。这个模式特别适用于对象创建开销较大或者对象需要频繁被创建和销毁的场景。 主要组成部分&#xff1a; 原型接口&#xff1a;声明一个克隆自身的方法。…

项目定位与服务器(SERVER)模块划分

目录 定位 HTTP协议以及HTTP服务器 高并发服务器 单Reactor单线程 单Reactor多线程 多Reactor多线程 模块划分 SERVER模块划分 Buffer 模块 Socket模块 Channel 模块 Connection模块 Acceptor模块 TimerQueue模块 Poller模块 EventLoop模块 TcpServer模块 SE…

Windows11系统下Docker环境搭建教程

目录 前言Docker简介安装docker总结 前言 本文为博主在项目环境搭建时记录的Docker安装流程&#xff0c;希望对大家能够有所帮助&#xff0c;不足之处欢迎批评指正&#x1f91d;&#x1f91d;&#x1f91d; Docker简介 Docker 就像一个“容器”平台&#xff0c;可以帮你把应用…

Spring Cloud Netflix Eureka 注册中心讲解和案例示范

在微服务架构中&#xff0c;服务的发现和注册是至关重要的一环。Netflix Eureka 是一个在云端设计的服务注册与发现系统。它允许各个微服务将自身注册到注册中心&#xff0c;并在需要时发现其他服务&#xff0c;从而实现客户端负载均衡、服务容错以及动态扩展。本文将深入分析 …

登 Nature 子刊!论文一作详解蛋白质语言模型的小样本学习方法,解决湿实验数据匮乏难题

在「Meet AI4S」系列直播第三期中&#xff0c;我们有幸邀请到了上海交通大学自然科学研究院 & 上海国家应用数学中心博士后周子宜&#xff0c; 他所在的上海交通大学洪亮课题组研究方向主要为 AI 蛋白和药物设计、分子生物物理。该课题组研究成果颇丰&#xff0c;截止目前共…

YOLOv5改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU

💡💡💡现有IoU问题点:IoU (Intersection over Union)作为模型训练的关键,极大地显示了当前预测框与Ground Truth框之间的差异。后续研究者不断在IoU中加入更多的考虑因素,如中心距离、纵横比等。然而,仅仅提炼几何差异是有上限的;而且新的对价指数与借据本身存在潜在…

微服务架构:核心组件解析与设计思考(服务发现、API网关、 配置中心、负载均衡、服务调用、服务熔断、链路追踪、消息队列、服务安全、分布式事务)

微服务架构已成为大型系统设计中不可忽视的趋势&#xff0c;它通过将单一系统拆分为多个自治的服务&#xff0c;解决了传统单体架构难以应对的复杂性和扩展性问题。然而&#xff0c;微服务架构的成功依赖于多个核心组件的协同工作&#xff0c;从服务发现到API网关&#xff0c;从…

X-Spreadsheet使用教程:打造你的Web端电子表格应用

在Web开发中&#xff0c;经常需要处理数据表格的展示与编辑&#xff0c;而X-Spreadsheet作为一款轻量级、功能强大的JavaScript电子表格库&#xff0c;为开发者提供了一个便捷的解决方案。本文将详细介绍如何使用X-Spreadsheet在Web项目中创建和配置电子表格&#xff0c;让你的…