今天在跳板群那里看到一个神奇的样式,效果:

感觉十分神奇,因为一开始以为他是只有一个P元素包着文字然后最后一个自动截取文字,而且最后一行还可以提前截取???这怎么做到的,然后想了一下css怎么做,好像怎么都不可以在最后一行提前截取

  css多行截取方法是:

overflow : hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;

  然而这个方法只能实现多行截取,不能让最后一行提前截取;如果只是靠css来截取的话 貌似是不可以的,理由如图:

  

  溢出的部分直接把空间撑开,不会提前截取。

  所以只能用js来截取了。JS要怎么截取?一开始我是不知道的,直到看到了其他前辈的博客:

http://www.cnblogs.com/milkmap/archive/2013/05/27/3101325.html

  根据这个博客自己写了截取的js

var element = $("div");
var element2 = $("div p");
var h = element.height()-20;
var v = '';
var val = element2.html();
console.log(val)
while(h< element2.height()){
v = element2.html();
v = v.substring(0,v.length - 1);
element2.html(v);
}
var val2 = val.replace(v,"");
element.append("<p style='width: 120px;overflow: hidden;text-overflow: ellipsis;word-break: keep-all;display: inline-block;'>"+val2+"</p>");
element.append("<span>详细</span>")

  核心部分就是循环那段了,通过判断容器大小,来截取字符串,看完博客后才知道可以这样截,果然要好好看javascript的原生API了。

  最后附上css,html

    html,body{
line-height:20px;
}
p{
padding:0px;
margin:0px;
}
.row{
width: 200px;
border: 1px solid #000;
line-height: 20px;
max-height: 60px;
clear: both;
overflow: hidden;
}
span{
display: inline-block;
float: right;
color: white;
background: black;
}
    <div class="row">
<p>在1815年,正值拿破仑被流放厄尔巴岛时,一个既年轻又成功的商船水手爱德蒙·唐泰斯,在船长利克莱尔濒死的时刻接受了船长指挥权,并回到了家乡马赛迎娶他的未婚妻美蒂丝。利克莱尔,一个拿破仑的支持者,吩咐唐泰斯运送两样物品,一个是给予位于厄尔巴岛上的马歇尔·伯特兰德的包裹,一个是从厄尔巴岛上寄出给予一位居住于巴黎的神秘男子的信件。这封神秘信件使唐泰斯两位妒忌他的朋友,在另一位朋友的建议下指控唐泰斯叛国。马赛的首席检察官韦尔福,虽然平时为人正直,开始时也同情唐泰斯,但看到信件的神秘收信人是他父亲后,未经调查便判决唐泰斯终身监禁于海上的孤岛监狱伊夫堡,并且于同时烟灭了作为证据的信件。在他被囚在伊夫堡的十四年中,他与亚伯·法利亚成为了朋友,一名声称拥有大量财宝并试图挖地道逃狱的老囚犯。法利亚将一生所学教授于唐泰斯,并在死前将藏于基督山的财宝告知于唐泰斯。1829年,法利亚死去后,唐泰斯便装扮法利亚的尸体逃离了伊夫堡,并被一艘走私船给救起,在跟走私犯一起工作数个月后,他来到了基督山,他佯装成受伤的模样,并说服走私犯暂时将他置于基督山,趁著这段时间前往财宝的藏置处。在找到了财宝之后,唐泰斯回到了故乡马赛,得知了自己的父亲贫穷潦倒而死;他建造了一艘船,将剩余的财宝藏在船上,接着向塔斯卡尼政府收购基督山及伯爵的头衔。回到了马赛,唐泰斯便开始计划他的复仇,但在那之前,他帮助了一些在他入狱前帮助过他的人。在1815年,正值拿破仑被流放厄尔巴岛时,一个既年轻又成功的商船水手爱德蒙·唐泰斯,在船长利克莱尔濒死的时刻接受了船长指挥权,并回到了家乡马赛迎娶他的未婚妻美蒂丝。利克莱尔,一个拿破仑的支持者,吩咐唐泰斯运送两样物品,一个是给予位于厄尔巴岛上的马歇尔·伯特兰德的包裹,一个是从厄尔巴岛上寄出给予一位居住于巴黎的神秘男子的信件。这封神秘信件使唐泰斯两位妒忌他的朋友,在另一位朋友的建议下指控唐泰斯叛国。马赛的首席检察官韦尔福,虽然平时为人正直,开始时也同情唐泰斯,但看到信件的神秘收信人是他父亲后,未经调查便判决唐泰斯终身监禁于海上的孤岛监狱伊夫堡,并且于同时烟灭了作为证据的信件。在他被囚在伊夫堡的十四年中,他与亚伯·法利亚成为了朋友,一名声称拥有大量财宝并试图挖地道逃狱的老囚犯。法利亚将一生所学教授于唐泰斯,并在死前将藏于基督山的财宝告知于唐泰斯。1829年,法利亚死去后,唐泰斯便装扮法利亚的尸体逃离了伊夫堡,并被一艘走私船给救起,在跟走私犯一起工作数个月后,他来到了基督山,他佯装成受伤的模样,并说服走私犯暂时将他置于基督山,趁著这段时间前往财宝的藏置处。在找到了财宝之后,唐泰斯回到了故乡马赛,得知了自己的父亲贫穷潦倒而死;他建造了一艘船,将剩余的财宝藏在船上,接着向塔斯卡尼政府收购基督山及伯爵的头衔。回到了马赛,唐泰斯便开始计划他的复仇,但在那之前,他帮助了一些在他入狱前帮助过他的人。</p>
</div>

  这个方法,感觉其实也不太好,因为如果要到实际应用的话一个商城这么多个标题或者备注,如果都要这样处理的话。。。感觉while循环次数是不是有点多了。。。。

JS实现文字截取(雾)的更多相关文章

  1. js实现文字截断

    先前用jq做了一个文字截断功能,但是不用jq的项目要实现此功能还要引如jq显得过于麻烦.这里写了一个js的文字截断功能.直接上代码. HTML(测试用的): <div>我是pox我是pox ...

  2. js实现文字逐个显示

    先把代码摆上了吧: <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtm ...

  3. 【2017-06-27】Js中获取地址栏参数、Js中字符串截取

    一.Js中获取地址栏参数 //从地址栏获取想要的参数 function GetQueryString(name) { var reg = new RegExp("(^|&)" ...

  4. 使用JS实现文字搬运工

    使用JS实现文字搬运工 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html><head><meta http-equiv=&quo ...

  5. JS控制文字只显示两行,超出部分显示省略号

    由于使用css控制文字只显示多行,超出部分显示省略号,存在一定的兼容性问题,所以总结了一下网上一些大咖使用js实现控制行数的解决方案. 第一步:依次引入jquery.js+jquery.ellipsi ...

  6. 黑马基础阶段测试题:通过字符输入流读取info.txt中的所有内容,每次读取一行,将每一行的第一个文字截取出来并打印在控制台上。

    package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

  7. js对文字进行编码

    js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1 ...

  8. JS实现文字转语音播放

    JS实现文字转语音播放背景实现方式第一种:百度文字转语音开放API第二种:微软TTS语音引擎第三种:SpeechSynthesisUtterance总结背景在做项目的过程中,经常会遇到场景是客户要求播 ...

  9. js实现文字上下滚动效果

    大家都知道,做html页面时,为了提升网页的用户体验,我们需要在网页中加入一些特效,比如单行区域文字上下滚动就是经常用到的特效.如下图示效果: <html> <head> &l ...

随机推荐

  1. 完美解决CodeSmith无法获取MySQL表及列Description说明注释的方案

    问题描述: CodeSmith是现在比较实用的代码生成器,但是我们发现一个问题: 使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到,也就是column ...

  2. 在ABP中创建Person实体类

    经过之前的准备目前我们的项目,终于可以搞正式的开发工作了. 创建实体Person 在Core类库中添加Person类 /// <summary> /// 联系人 /// </summ ...

  3. 安装keil MDK5

    昨天买的stm32板子今天就到了,顺丰速度确实很快. 我这是刚开始整STM32,首先需要下载keil MDK,直接杀去keil官网下载,其实对于学习者,我建议大家下载软件能去官网就去官网,尽量少用二道 ...

  4. JDBC基础

    今天看了看JDBC(Java DataBase Connectivity)总结一下 关于JDBC 加载JDBC驱动 建立数据库连接 创建一个Statement或者PreparedStatement 获 ...

  5. PHPUnit笔记

    PHPUnit是一个面向PHP程序员的测试框架,这是一个xUnit的体系结构的单元测试框架. 复杂的项目,通过单元测试能够快速排查bug,有效减少bug的产生.简单的项目,使用php自带的var_du ...

  6. 在linux平台实现atosl

    ➠更多技术干货请戳:听云博客 序言 怎么在linux 平台下实现一个类似于mac 平台下的 atos 工具( iOS 符号化解析)? 分析问题 在github上找到了几年前的开源实现,[https:/ ...

  7. 【Win 10 应用开发】共享目标(UWP)

    在开始吹牛之前,先给大伙伴们拜个年,祝各位身体健康.生活愉快.[码]到功成. ------------------------------------------------------------- ...

  8. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息.   但是c ...

  9. Linux基礎知識 —— open&close

    下面說一下在用戶空間調用open/close/dup跟驅動中的open和release的對應. 下面是測試驅動: #include <linux/module.h> #include &l ...

  10. ORACLE 11gR2 DG(Physical Standby)日常维护02

    环境:RHEL 6.5 + Oracle 11.2.0.4 三.监控DG的状态 3.1监控DG备库的状态 3.2监控主库传输日志链路的状态 四.备库切换为snapshot standby 4.1备库切 ...