css多行省略
单行省略就不用说了,用css实现非常简单,兼容性还非常好。但是多行省略一直都是前端的痛点,在css3之前,可以用js去算两行能放多少个字,把多余的字用 。。。 代替,且不说好不好,万一哪天PM说要改成3行,UI说这个字体改大一点,又得去算一遍,可谓是苦不堪言。
好在有css3,css3提供了实现完美的多行省略方法,本文已scss为例
@mixin ellipsis($lineCount: 2) {
text-overflow: -o-ellipsis-lastline;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: $lineCount;
line-clamp: $lineCount;
-webkit-box-orient: vertical;
}
咋们想要几行省略的时候直接调用这个方法,传入行数,就能完美实现,不需要去计算。
但是,但是,,兼容性一直是个问题啊,可以看出,必须要加上前缀才能生效,就不说IE了,就连低端的Android手机都不兼容,真是头疼。。。
难道就没有别的办法了吗?
no!!css 是博大精深的,尤其是预编译css工具更强大,例如下面就是 scss的写法,其他less,sass类似
@mixin multiLineEllipsis($lineHeight: 1.2em, $lineCount: 2, $bgColor: white) {
overflow: hidden;
position: relative;
line-height: $lineHeight;
max-height: $lineHeight * $lineCount;
text-align: justify;
&:before {
content: '...';
width: 1em;
position: absolute;
right:;
bottom:;
background-color: $bgColor;
}
&:after {
content: '';
position: absolute;
right:;
width: 1em;
height: 1em;
margin-top: 0.5em;
background: $bgColor;
}
}
简单解释一下,
lineHeight 就是一行的高度,便于计算高度
lineCount 需要几行省略
bgColor 背景颜色
就是巧妙的运用了高度的原理,在没有达到高度的时候显示的是 after,当超出高度的时候显示before 。
补充js实现多行文本溢出
const p = document.querySelector('p')
let words = p.innerHTML.split(/(?<=[\u4e00-\u9fa5])|(?<=\w*?\b)/g)
while (p.scrollHeight > p.clientHeight) {
words.pop()
p.innerHTML = words.join('') + '...'
}
<p>这是一段测试文字,this is some test text,测试文字,测试文字测 </p>
使用split + 正则表达式将单词与单个文字切割出来存入words
加上 '...'
判断scrollHeight与clientHeight,超出的话就从words中pop一个出来
css多行省略的更多相关文章
- css多行省略和单行省略
实现文本省略: <!-- html代码 --> <p class="single">该文的主题思想即对自由境界的向往.朱自清当时虽置身在污浊黑暗的旧中国,但 ...
- css多行省略-webkit-box-orient打包编译后失效原因
原css代码: .dialog-for-plan .dialog-table .type>p { display: -webkit-box; -webkit-box-orient: vertic ...
- CSS 多行省略失效 (-webkit-box-orient 失效) Second Autoprefixer control comment was ignored. Autoprefixer applies control comment to whole block, not to next rules.
webpck不能编译这个属性-webkit-box-orient: vertical https://github.com/fanyifanbumaimeng/Articles/issues/48 / ...
- 你不知道的css高级应用三种方法——实现多行省略
前言 这是个老掉牙的需求啦,不过仍然有很多人在网上找解决方案,特别是搜索结果排名靠前的那些,都是些只会介绍兼容性不好的使用-webkit-line-clamp的方案. 如果你看到这篇文章,可能代表你正 ...
- 黑科技:CSS定制多行省略
转载请注明出处:http://hai.li/2017/03/08/css-multiline-overflow-ellipsis.html 什么是多行省略? 当字数多到一定程度就显示省略号点点点.最初 ...
- 纯 CSS 自定义多行省略:从原理到实现
文字溢出怎么展示,你的需求是什么?单行还是多行?截断,省略,自定义样式,自适应高度?在这里你都能找到答案.接下来我会由浅入深,从原理到实现,带你一步步揭开多行省略的面纱.我们先从最简单的单行溢出省略开 ...
- 黑科技:纯CSS定制文本省略
作者:weilong,腾讯 web前端开发 工程师 商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处. WeTest导读 拿到设计MM的设计稿,Oh NO,点点点后面又双叒叕加内容了,弹丸 ...
- css多行显示省略号
首先说css多行显示省略号和单行文本省略号: 我们知道,单行显示省略号时,我们首先需要设置容器的宽度width:value(具体的值),然后强制文本在一行内显示,即white-spacing:nowr ...
- CSS设置行内元素和块级元素的水平居中、垂直居中
CSS设置行内元素的水平居中 div{text-align:center} /*DIV内的行内元素均会水平居中*/ CSS设置行内元素的垂直居中 div{height:30px; line-heigh ...
随机推荐
- 20175224 2018-2019-2 《Java程序设计》第六周学习总结
教材学习内容总结 第七章:内部类与异常类 内部类:java支持在类中定义另一个类,这个类为内部类,包含内部类的类称为外嵌类. 理解内部类与外嵌类. Java编译器生成的内部类的字节码文件为“外嵌类名$ ...
- cocos-lua3.17 Lua tablrView工具类
local MyTableView = class("MyTableView") MyTableView.__index = MyTableView MyTableView.pro ...
- python练习:实现一个整数数组里面两个数之和为183的所有整数对
l1 = [183,0,1,2,-184,367] num = [] for i in range (0,len(l1)): for l in range (i+1,len(l1)): if l1[i ...
- python学习-python入门
开始学习python,开始记录. 第一个小程序:登陆系统 功能:1.通过文件名和密码导入用户名和密码~ 2.用户输入用户名和密码 3.将用户输入的用户名进行比对,先判断用户名是否在黑名单里面,如果在黑 ...
- docker 容器跑一个应用
虽然是个前端,但是公司比较推崇docker,感觉挺神奇,就也学了一些,再此做个笔记,以供日后回想. 我的想法是在一个centos环境中运行一个nginx服务.docker的安装就不说了,网上已经有好多 ...
- 树莓派安装tensorflow1.11
树莓派3B+ 环境:2018-11-13-raspbian-stretch 初始状态 首先将本地更新一下和安装 sudo apt-get update sudo apt-get upgrade 然后更 ...
- 在Raspbian Stretch系统上设置Home Assistant开机启动
较新的Linux发行版趋向于用systemd管理守护进程,如果您不确定系统是否正在使用systemd,您可以使用以下命令进行检查: -o comm= 如果上述命令返回字符串systemd,说明系统正在 ...
- L3-015 球队“食物链” (30 分)
L3-015 球队“食物链” (30 分) 某国的足球联赛中有N支参赛球队,编号从1至N.联赛采用主客场双循环赛制,参赛球队两两之间在双方主场各赛一场. 联赛战罢,结果已经尘埃落定.此时,联赛主席 ...
- vue 用户停留页面超过30分钟未操作 强制退出到登录页面
先说下主要实现思路,通过给你的根节点绑定mouseover事件,首先声明下当前时间,每次滑过时记录下滑过的时间,两个时间转化成毫秒数,进行对比,如果超过30分钟,则清除token,跳转到login.h ...
- 使用vue-cli搭建项目
在使用vue-cli搭建项目前提: 1.node.js环境 2.npm镜像 开始. 1.cmd打开命令行, npm install -g vue-cli 进行全局安装 (vue-V可以查看其版本) ...