css基础知识十六:如何实现单行/多行文本溢出的省略样式?

news2024/10/6 4:04:08

在这里插入图片描述
一、前言

在日常开发展示页面,如果一段文本的数量过长,受制于元素宽度的因素,有可能不能完全显示,为了提高用户的使用体验,这个时候就需要我们把溢出的文本显示成省略号

对于文本的溢出,我们可以分成两种形式:

  • 单行文本溢出
  • 多行文本溢出

二、实现方式

单行文本溢出省略

理解也很简单,即文本在一行内显示,超出部分以省略号的形式展现

实现方式也很简单,涉及的css属性有:

  • text-overflow:规定当文本溢出时,显示省略符号来代表被修剪的文本
  • white-space:设置文字在一行显示,不能换行
  • overflow:文字长度超出限定宽度,则隐藏超出的内容

overflow设为hidden,普通情况用在块级元素的外层隐藏内部溢出元素,或者配合下面两个属性实现文本溢出省略

white-space:nowrap,作用是设置文本不换行,是overflow:hidden和text-overflow:ellipsis生效的基础

text-overflow属性值有如下:

  • clip:当对象内文本溢出部分裁切掉
  • ellipsis:当对象内文本溢出时显示省略标记(…)

text-overflow只有在设置了overflow:hidden和white-space:nowrap才能够生效的

举个例子

<style>
    p{
        overflow: hidden;
        line-height: 40px;
        width:400px;
        height:40px;
        border:1px solid red;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
</style>
<p 这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本</p>

效果如下:
在这里插入图片描述
可以看到,设置单行文本溢出较为简单,并且省略号显示的位置较好

多行文本溢出省略

多行文本溢出的时候,我们可以分为两种情况:

  • 基于高度截断
  • 基于行数截断

基于高度截断

伪元素 + 定位

核心的css代码结构如下:

  • position: relative:为伪元素绝对定位
  • overflow: hidden:文本溢出限定的宽度就隐藏内容)
  • position: absolute:给省略号绝对定位
  • line-height: 20px:结合元素高度,高度固定的情况下,设定行高, 控制显示行数
  • height: 40px:设定当前元素高度
  • ::after {} :设置省略号样式

代码如下所示:

<style>
    .demo {
        position: relative;
        line-height: 20px;
        height: 40px;
        overflow: hidden;
    }
    .demo::after {
        content: "...";
        position: absolute;
        bottom: 0;
        right: 0;
        padding: 0 20px 0 10px;
    }
</style>

<body>
    <div class='demo'>这是一段很长的文本</div>
</body>

实现原理很好理解,就是通过伪元素绝对定位到行尾并遮住文字,再通过 overflow: hidden 隐藏多余文字

这种实现具有以下优点:

  • 兼容性好,对各大主流浏览器有好的支持
  • 响应式截断,根据不同宽度做出调整

一般文本存在英文的时候,可以设置word-break: break-all使一个单词能够在换行时进行拆分

基于行数截断

纯css实现也非常简单,核心的css代码如下:

  • -webkit-line-clamp: 2:用来限制在一个块元素显示的文本的行数,为了实现该效果,它需要组合其他的WebKit属性)
  • display: -webkit-box:和1结合使用,将对象作为弹性伸缩盒子模型显示
  • -webkit-box-orient: vertical:和1结合使用 ,设置或检索伸缩盒对象的子元素的排列方式
  • overflow: hidden:文本溢出限定的宽度就隐藏内容
  • text-overflow: ellipsis:多行文本的情况下,用省略号“…”隐藏溢出范围的文本
<style>
    p {
        width: 400px;
        border-radius: 1px solid red;
        -webkit-line-clamp: 2;
        display: -webkit-box;
        -webkit-box-orient: vertical;
        overflow: hidden;
        text-overflow: ellipsis;
    }
</style>
<p>
    这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本
    这是一些文本这是一些文本这是一些文本这是一些文本这是一些文本
</p>

可以看到,上述使用了webkit的CSS属性扩展,所以兼容浏览器范围是PC端的webkit内核的浏览器,由于移动端大多数是使用webkit,所以移动端常用该形式

需要注意的是,如果文本为一段很长的英文或者数字,则需要添加word-wrap: break-word属性

还能通过使用javascript实现配合css,实现代码如下所示:

css结构如下:

p {
    position: relative;
    width: 400px;
    line-height: 20px;
    overflow: hidden;

}
.p-after:after{
    content: "..."; 
    position: absolute; 
    bottom: 0; 
    right: 0; 
    padding-left: 40px;
    background: -webkit-linear-gradient(left, transparent, #fff 55%);
    background: -moz-linear-gradient(left, transparent, #fff 55%);
    background: -o-linear-gradient(left, transparent, #fff 55%);
    background: linear-gradient(to right, transparent, #fff 55%);
}

javascript代码如下:

$(function(){
 //获取文本的行高,并获取文本的高度,假设我们规定的行数是五行,那么对超过行数的部分进行限制高度,并加上省略号
   $('p').each(function(i, obj){
        var lineHeight = parseInt($(this).css("line-height"));
        var height = parseInt($(this).height());
        if((height / lineHeight) >3 ){
            $(this).addClass("p-after")
            $(this).css("height","60px");
        }else{
            $(this).removeClass("p-after");
        }
    });
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/716758.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习之路不可或缺的软件宝藏,一起分享吧

在当今数字化时代&#xff0c;学习变得更加便利和多样化。为了助力你的学习之路&#xff0c;我将分享一些不可或缺的学习必备软件&#xff0c;让你事半功倍。 分享一&#xff1a;小睡眠 小睡眠是一款睡眠神器&#xff0c;专为那些每天晚上压力过大、思虑过多而难以入睡的人设…

【已解决】使用pyaudio内录声卡声音及相关问题

使用pyaudio内录声卡声音及相关问题解决 目录 使用pyaudio内录声卡声音及相关问题解决1 实现代码1.1 Recorder类&#xff1a;1.2 调用方法 2 问题一&#xff1a;选择设备实现内录/外录&#xff08;解决报错&#xff1a;OSError: [Errno -9999] Unanticipated host error&#x…

Vue Vite Manual

create project 初始化项目 $ npm create vitelatest导入vs code 方便操作 初始化的目录如下 安装依赖库 生成node_modules依赖库 和 package-lock.json. 其中package-lock.json用于锁定模块的版本号。 npm install启动项目 npm run dev项目配置 增加路由器 路由器 n…

骑行,究竟该不该佩戴护膝?应该怎么佩戴护膝才有效果?

骑行作为一项受欢迎的运动方式&#xff0c;在现代社会中越来越受到关注和热爱。随着骑行爱好者的增多&#xff0c;对于个人保护意识的重视也在逐渐提高。在这个话题中&#xff0c;一个备受关注的问题就是骑行时是否有必要戴护膝&#xff0c;以及如何正确佩戴护膝。 对于骑行爱好…

SAP生产版本和工艺路线由于批量不一致导致的报错问题解决实例

近期接到工艺用户问题&#xff0c;在维护生产版本时报错&#xff0c;状态异常&#xff0c;寻求支持。 在详细的提示信息中有一个生产版本不一致的提示&#xff0c;但不知这里的不一致具体指向什么&#xff0c;从逻辑上来推&#xff0c;这里只有一个可能&#xff0c;就是工艺路线…

windows 和华为手机使用charles抓包记录

1.下载charles 建议安装使用最新版&#xff0c;官方下载地址 https://www.charlesproxy.com/download help->Register->把上面的生成注册码放进去就行了&#xff08;在charles注册地址里面注册一下&#xff0c;charles注册地址&#xff09; 2.Proxy-> 勾选window…

网络安全(黑客)技术学习路线

谈起黑客&#xff0c;可能各位都会想到&#xff1a;盗号&#xff0c;其实不尽然&#xff1b;黑客是一群喜爱研究技术的群体&#xff0c;在黑客圈中&#xff0c;一般分为三大圈&#xff1a;娱乐圈 技术圈 职业圈。 娱乐圈&#xff1a;主要是初中生和高中生较多&#xff0c;玩网恋…

npm 安装私库包报错:请求地址错误 | 请求包错误

npm 安装私库包报错&#xff1a;请求地址错误 | 请求包错误 错误信息试错过程解决办法 在一次创建完 npm 私库之后&#xff0c;上传 npm 包没问题&#xff0c;但是下载一直出错。 老是请求一个旧的地址下载某个库&#xff0c;而那个地址已经停用了&#xff0c;因此请求很多次之…

在Layout里面创建封装如何快速切换单位

公制亦称“米制”、“米突制”。1858年《中法通商章程》签定后传入中国的一种国际度量衡制度。创始于法国。在PCB中单位为MM&#xff08;毫米&#xff09; 英制&#xff1a;英国、美国等英语国家使用的一种度量制。长度主单位为英尺&#xff0c;重量主单位为磅&#xff0c;容积…

Spring学习(三)(类注解和方法注解)

目录 1. 存储Bean对象 1.1 配置扫描路径 1.2 添加注解存储Bean对象 1.2.1 Controller(控制器存储) 1.2.2 Service&#xff08;服务存储&#xff09; 1.3 这么多注解&#xff1f;&#xff1f;&#xff1f;为什么&#xff1f;&#xff1f; 1.3.1 类注解时间的关系 1.4 方法…

leetcode:种花问题

种花问题 假设有一个很长的花坛&#xff0c;一部分地块种植了花&#xff0c;另一部分却没有。可是&#xff0c;花不能种植在相邻的地块上&#xff0c;它们会争夺水源&#xff0c;两者都会死去。 给你一个整数数组 flowerbed 表示花坛&#xff0c;由若干 0 和 1 组成&#xff0c…

Go语言网络编程:TCP粘包问题——Go实现封包拆包

一&#xff1a;TCP粘包介绍 1.1 TCP介绍 如上图&#xff0c;TCP具有面向连接、可靠、基于字节流三大特点。 字节流可以理解为一个双向的通道里流淌的数据&#xff0c;这个数据其实就是我们常说的二进制数据&#xff0c;简单来说就是一大堆 01 串。纯裸TCP收发的这些 01 串之间…

对弈人工智能!myCobot 280开源六轴机械臂Connect 4 四子棋对弈下篇

前言 在上篇文章中&#xff0c;我们探讨了如何创造一个能够进行Connect4的对弈大脑。简单的介绍了几种对弈算法&#xff0c;例如极小化极大算法&#xff0c;Alpha-Beta剪枝算法等&#xff0c;最关键的是目前最流行的神经网络算法和深度学习。神经网络算法&#xff0c;让计算机…

Dubbo zookeeper

1、RPC全称为remote procedure call&#xff0c;即远程过程调用。Dubbo作为一个RPC框架,其最核心的功能就是要实现跨网络的远程调用 2、Dubbo提供了三大核心能力&#xff1a;面向接口的远程方法调用&#xff0c;智能容错和负载均衡&#xff0c;以及服务自动注册和发现。 3、 Du…

Google SEO内容指南:您实现最大自然流量的路线图

欢迎来到令人兴奋的SEO内容世界&#xff01; SEO就像拥有一个秘方&#xff0c;结合了创造力、策略和技术诀窍的正确成分&#xff0c;使您的内容在广阔的数字环境中大放异彩。 但最好的是 – SEO内容并不是要牺牲您独特的声调或损害您的创造力。相反&#xff0c;它是关于了解搜…

从0开始,手写MySQL数据管理器DM

说在前面 从0开始&#xff0c;手写一个MySQL的学习价值在于&#xff1a; 可以深入地理解MySQL的内部机制和原理&#xff0c;MySQL可谓是面试的绝对重点和难点&#xff0c; 尼恩曾经指导过的一个7年经验小伙&#xff0c;凭借精通MySQL 搞定月薪40K。 从而更好地掌握MySQL的使…

六、Eureka服务发现(源码分析)

1 什么是服务发现 根据服务名称发现服务的实例过程客户端会在本地缓存服务端的列表拉取列表是有间隔周期的 &#xff08;导致服务上线 客户端不能第一时间感知到 &#xff08;可以容忍&#xff09;&#xff09;其实每次做服务发现 都是从本地的列表来进行的 2 测试服务发现 …

哆啦A梦和小猪佩奇(Python实现)

目录 1 哆啦A梦 2 小猪佩奇 3 Python代码实现&#xff08;哆啦A梦&#xff09; ​ 4 Python代码实现&#xff08;小猪佩奇 &#xff09; 1 哆啦A梦 “只要把愿望系在竹竿上请求月亮女神&#xff0c;心愿便能达成”。我超喜欢这句话。 哆啦A梦的创造要追溯到1969年的某个…

【PHP语言-PDO接口】PDO接口执行脚本操作数据库

目录 前言&#xff1a; 一、 PDO简介 二、 PDO对象方法 前言&#xff1a; PDO&#xff1a;数据库抽象层 简介&#xff1a;PDO扩展为PHP访问数据库定义了一个轻量级的、一致性的接口&#xff0c;PDO解决了数据库连接不统一的问题。 一、 PDO简介 1、PDO简介 &#xff08;1…

iview 文档中的三个提示彩蛋

第一个彩蛋 在iview的Collapse 折叠面板最底下&#xff0c;简洁模式的第二个&#xff0c;双击数字 19840124 是一个日期&#xff0c;也就是 1984 年 1 月 24 日&#xff0c;这一天&#xff0c;苹果发布了麦金塔电脑&#xff08;Macintosh&#xff09;&#xff0c;对于苹果来说…