前言

多行文本超出高度限制出现省略号 , 移动端多为webkit内核的 , 有扩展属性-webkit-line-clamp , 但并不是CSS规范中的属性 , PC端往往要借助js去实现这一效果,但麻烦且不是很靠谱,今天就用纯CSS来实现一个完全兼容的多行省略。

正文

一、webkit内核的实现

-webkit-line-clamp设置块元素包含的文本行数;

display: -webkit-box设置块元素的布局为伸缩布局;

-webkit-box-orient设置伸缩项的布局方向;

text-overflow: ellipsis;则表示超出盒子的部分使用省略号表示。

二、非webkit内核实现

不过本文将要介绍的方法是采用CSS规范中的属性,并结合特殊的实现技巧完成的。这意味着在实现CSS2.1规范的浏览器中都是可以兼容的,不将仅仅是纯粹的移动端领域,在传统的PC浏览器(你们懂得我指的是哪些浏览器)中仍是可行的。好吧,让我们一起见识下。

一共7个步骤,最简单的就是截断文本,最难的部分则是让一个元素出在其父块的溢出时的右下方,并且当父元素未溢出时该元素消失不可见。(代码可直接粘贴看效果)

1、基本结构布局

最简单的开始:当父包含框比较小时,将子元素布局到父包含框的右下角;

HTML

1.prop

2.main 这里是主题内容,多行省略

3.end

CSS

.wrap {

width: 400px;

height: 50px;

margin: 20px 20px 50px 300px;

border: 5px solid #AAA;

line-height: 25px;

}

.prop {

float: left;

width: 50px;

height: 50px;

background: #FAF;

}

.main {

float: right;

width: 350px;

background: #AFF;

word-break: break-all;

}

.end {

position: relative;

float: right;

width: 50px;

background: #FFA;

}

效果如下面几张图(注意黄色end的位置), 其实这个实现完全利用了元素浮动的基本规则。

2、定位模拟'...'

我们通过创建一个子元素来替代将要显示的省略号,当本文溢出的情形下该元素显示在正确的位置上。在接下来的实现中,我们创建一个realend元素,利用上一步骤中end元素浮动后的位置来实现realEnd元素的定位。

HTML

1.prop

2.main 这里是要多行文本溢出省略的,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点

3.end

realEnd

CSS

// 新增下面样式即可

.realEnd {

position: absolute;

width: 100%;

height: 25px;

top: -25px; /*等于高度的负值,就是文字的行高*/

left: 350px;

background: #FAA;

font-size: 13px;

}

效果如图下图

若父元素并没有溢出,那么realend元素会出现在其右侧(设置wrap overflow:hidden即可,下面会解决)

3、优化定位

第二步中我们针对end元素设置了相对定位,对realEnd元素设置了绝对定位。但是我们可以采用更简单的代码来实现,即只使用相对定位。熟悉定位模型的同学应该知道,相对定位的元素仍然占据文本流,同时针对元素设置偏移。这样, 就可以去掉end元素了,仅针对realEnd元素设置相对定位。

HTML

1.prop

2.main 这里是要多行文本溢出省略的,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点

realEnd

CSS

// 删除end样式,realEnd样式更改如下

.realEnd {

float: right;

position: relative;

width: 50px;

height: 25px;

top: -25px; /*等于高度的负值,就是文字的行高*/

left: 350px;

background: #FAA;

font-size: 13px;

}

效果如图(黄色的end已经没了)

4、削窄prop元素

目前,最左侧的prop元素的作用在于让realend元素在文本溢出时处在其正下方,在前几节的示例代码中为了直观的演示,设置prop元素的宽度为50px,那么现在为了更好的模拟实际的效果,我们缩小prop元素的宽度。

CSS

// 更改部分样式如下

.prop {

float: left;

width: 5px;/*缩小宽度为5px,其余属性不变*/

height: 50px;

background: #FAF;

}

.main {

float: right;

width: 400px;

margin-left: -5px;/*让main元素左移5px,这样main元素在宽度上就完全占满了父元素;*/

background: #AFF;

word-break: break-all;

}

.realEnd {

float: right;

position: relative;

width: 50px;

height: 25px;

top: -25px; /*等于高度的负值,就是文字的行高*/

left: 400px;

/*而设置margin-left: -50px、padding-right: 5px则是为了让realend元素的盒模型的最终宽度计算为5px。*/

margin-left: -50px;

padding-right: 5px;

background: #FAA;

font-size: 13px;

}

由于CSS规范规定padding的值不可以为负数,因此只有设置margind-left为负值,且等于其宽度。这样做的最终目的就是保证realend元素处在prop元素的下方,保证在文本溢出的情况下定位准确性:

效果图如下

5、流式布局 + 伪元素

目前,realend元素的相关属性仍采用px度量,为了更好的扩展性,可以改用%替代。

同时,prop元素和realend元素可以采用伪元素来实现,减少额外标签的使用。

CSS

.mutil-line-ellipsis {

width: 400px;

height: 50px;

margin: 20px 20px 50px 300px;

border: 5px solid #AAA;

line-height: 25px;

/*overflow: hidden;*/

}

/*相当于之前的prop*/

.mutil-line-ellipsis:before {

content: '';

float: left;

width: 5px;/*缩小宽度为5px,其余属性不变*/

height: 50px;

background: #FAF;

}

/*相当于之前的main*/

.mutil-line-ellipsis > :first-child {

float: right;

width: 100%;

margin-left: -5px;/*让main元素左移5px,这样main元素在宽度上就完全占满了父元素;*/

background: #AFF;

word-break: break-all;

}

/*相当于之前的realEnd*/

.mutil-line-ellipsis:after {

content: 'realEnd';

float: right;

position: relative;

width: 50px;

height: 25px;

top: -25px; /*等于高度的负值,就是文字的行高*/

left: 100%;

/*而设置margin-left: -50px、padding-right: 5px则是为了让realend元素的盒模型的最终宽度计算为5px。*/

margin-left: -50px;

padding-right: 5px;

background: #FAA;

font-size: 13px;

}

HTML

2.main 这里是要多行文本溢出省略的,内容多一点,内容多一点,内容多一点,内容多一点

内容多一点,内容多一点,内容多一点,内容多一点,内容多一点,内容多一点

效果和上一步一样

6、隐藏

之前的实现中在文本未溢出的情况下,realEnd元素会出现在父元素的右侧,正如

设置

CSS

.mutil-line-ellipsis {

overflow: hidden;

}

7、美化

现在我们离完结就差一步了,即去掉各元素的背景色,并且用“...”替换文本。最后为了优化体验,采用渐变来隐藏“...”覆盖的文本,(省略了一些兼容性的属性)。

CSS

.mutil-line-ellipsis {

width: 400px;

height: 50px;

line-height: 25px;

margin: 20px 20px 50px 300px;

border: 5px solid #AAA;

line-height: 25px;

overflow: hidden;

}

/*相当于之前的prop*/

.mutil-line-ellipsis:before {

content: '';

float: left;

width: 5px;/*缩小宽度为5px,其余属性不变*/

height: 50px;

}

/*相当于之前的main*/

.mutil-line-ellipsis > :first-child {

float: right;

width: 100%;

margin-left: -5px;/*让main元素左移5px,这样main元素在宽度上就完全占满了父元素;*/

word-break: break-all;

}

/*相当于之前的realEnd*/

.mutil-line-ellipsis:after {

content: '...';

box-sizing: content-box;

float: right;

position: relative;

width: 50px;

height: 25px;

top: -25px; /*等于高度的负值,就是文字的行高*/

left: 100%;

/*而设置margin-left: -50px、padding-right: 5px则是为了让realend元素的盒模型的最终宽度计算为5px。*/

margin-left: -50px;

padding-right: 5px;

font-size: 13px;

text-align: right;

background: linear-gradient(to right, rgba(255, 255, 255, 0), #ffffff 40px);

}

效果(自己可调整省略样式)

总结之兼容性

从上文的实现细节来看,我们利用的技巧完全是CSS规范中的浮动+定位+盒模型宽度计算,唯一存在兼容性问题的在于无关痛痒的渐变实现,因此可以在大多数浏览器下进行尝试。

html 文本溢出 兼容,CSS - 纯css实现多行文本溢出省略(兼容所有浏览器)相关推荐

  1. 如何设置省略号对其序号 html,CSS实现单行、多行文本溢出显示省略号(…)

    最好用max-height来限制一下web 若是实现单行文本的溢出显示省略号同窗们应该都知道用text-overflow:ellipsis属性来,固然还须要加宽度width属来兼容部分浏览.浏览器 实 ...

  2. 轮回眼css,纯CSS如何实现血轮眼+轮回眼特效(代码详解)

    本篇文章给大家介绍一下使用纯CSS实现血轮眼+轮回眼特效的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所助. 效果(完整代码在底部) 其实实现并不难,都是重复的代码比较多. 实现(可 ...

  3. CSS基础10-单行/多行文本溢出省略

    文本溢出省略 单行文本溢出省略 文本只在一行内显示 <html lang="en"> <head><meta charset="UTF-8& ...

  4. b站图片css,纯CSS打造BiliBili样式博客主题

    前言 一直以来,我都在思考如何减少不必要的JS代码,仅通过CSS来实现博客园主题美化.CSS有很多魔法代码,例如:before,iconfont,order,等等,利用好这些技巧,也能实现很好美化效果 ...

  5. html最多显示两行,css 实现两行或多行文本溢出显示省略号(...)

    1. 大家都知道,强制一行溢出显示省略号(...)的情况很简单 overflow:hidden;//超出的隐藏 text-overflow:ellipsis;//显示省略符号来代表被修剪的文本. wh ...

  6. html hover图片效果,CSS第9款:Imagehover.css 纯CSS打造的图片悬停效果

    用过很多图片县停效果,说实在话,很多都不好用.我大致说一下原因: 1.对基础CSS影响比较大: 2.附加的插件太多: 3.还要引用有一些JS. 而CSS3的诞生,对我们前端开发来说,有了质的飞跃!下边 ...

  7. window lcd css,纯CSS实现液晶字体效果

    使用css实现液晶字体效果 /*The Digits*/.light{width:300px;background:#f4f5f7;height:60px;text-align:center; }.d ...

  8. html三角形下拉列表,CSS—纯CSS实现三角图形(常用于带指引效果的小三角,下拉列表的小三角等)...

    常用情况,如下图 图片.png 图片.png CSS代码 .we-chat-info::after{ position: absolute; top: 109px; right: -8px; cont ...

  9. CSS:纯css样式实现左右两侧文字中间填充点或线(仿账单报表样式),自适应

    效果图: 实现原理很简单,使用flex布局,中间的填充使用border属性,看似是很多点,其实是一个盒子的border. 并且自动适应填充. html代码: <div class="t ...

最新文章

  1. 氮化镓充电器哪家好_双十二推荐入手的热门氮化镓充电器
  2. vs2008中如何在项目属性中切换“图形形式”和“控制台形式”——即调出或消除黑窗口
  3. 基于FFT的信号频谱分析
  4. java生产者与消费者问题_java生产者与消费者问题
  5. 华农java实验7_国家实验教学示范中心
  6. 前端学习(355):小练习
  7. Debit and Credit Memo
  8. Kali Linux 无线渗透测试入门指南 第六章 攻击客户端
  9. PHP常用函数之字符串处理
  10. OpenCV threshold 二值化
  11. 今天又感受到了编程的乐趣
  12. 火星上网不是梦,国际空间站开测星际互联网DTN服务
  13. 移植基于Qt4.4-tp1的WebKit到ARM平台
  14. java 获取上周开始时间和结束时间,上上周开始和上上周结束时间
  15. 辛客小杰个人博客源码
  16. 股票 市盈率(PE)
  17. 属性子集选择的基本启发方法_【数据挖掘笔记三】数据预处理
  18. 【毕业设计】基于超声波智能跟随小车 - 单片机 物联网 stm32 c51
  19. 一季度险资137亿建仓151股 业绩环增公司超四成(转自新浪)
  20. MySQL数据库的锁 --- 六种分类 - 14种锁详细介绍

热门文章

  1. mac电脑配置adb
  2. springmvc的ViewNameMethodReturnValueHandler解析_晏无心_新浪博客
  3. 【计算机网络】数据链路层:点对点协议PPP
  4. 小学三年级计算机认识鼠标说课,认识鼠标说课稿.doc
  5. NOIP初赛知识点集锦
  6. 攻防世界第一站misc篇
  7. HashMap源码分析及常见面试题
  8. 线程的创建,加锁,解锁销毁锁
  9. php微信支付金额隐藏,【php】复盘微信支付金额不正确问题—PHP浮点型计算
  10. 仿制图章工具是干什么的?基础设置有哪些?仿制图章工具操作方法详细介绍