将省略号应用于多行文本

Bru*_*ski 115 html css ellipsis css3

有没有解决方案在div中的最后一行添加省略号,流体高度(20%)?

-webkit-line-clamp在CSS中找到了这个函数,但在我的例子中,行号将取决于窗口大小.

p {
    width:100%;
    height:20%;
    background:red;
    position:absolute;
}
Run Code Online (Sandbox Code Playgroud)
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sed dui felis. Vivamus vitae pharetra nisl, eget fringilla elit. Ut nec est sapien. Aliquam dignissim velit sed nunc imperdiet cursus. Proin arcu diam, tempus ac vehicula a, dictum quis nibh. Maecenas vitae quam ac mi venenatis vulputate. Suspendisse fermentum suscipit eros, ac ultricies leo sagittis quis. Nunc sollicitudin lorem eget eros eleifend facilisis. Quisque bibendum sem at bibendum suscipit. Nam id tellus mi. Mauris vestibulum, eros ac ultrices lacinia, justo est faucibus ipsum, sed sollicitudin sapien odio sed est. In massa ipsum, bibendum quis lorem et, volutpat ultricies nisi. Maecenas scelerisque sodales ipsum a hendreritLorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sed dui felis. Vivamus vitae pharetra nisl, eget fringilla elit. Ut nec est sapien. Aliquam dignissim velit sed nunc imperdiet cursus. Proin arcu diam, tempus ac vehicula a, dictum quis nibh. Maecenas vitae quam ac mi venenatis vulputate. Suspendisse fermentum suscipit eros, ac ultricies leo sagittis quis. Nunc sollicitudin lorem eget eros eleifend facilisis. Quisque bibendum sem at bibendum suscipit. Nam id tellus mi. Mauris vestibulum, eros ac ultrices lacinia, justo est faucibus ipsum, sed sollicitudin sapien odio sed est. In massa ipsum, bibendum quis lorem et, volutpat ultricies nisi. Maecenas scelerisque sodales ipsum a hendrerit.</p>
Run Code Online (Sandbox Code Playgroud)

我有这个JSFiddle来说明这个问题. https://jsfiddle.net/96knodm6/

Mic*_*l_B 98

如果要将省略号(...)应用于单行文本,CSS使该text-overflow属性更容易.它仍然有点棘手(由于所有要求 - 见下文),但text-overflow使其成为可能和可靠.

但是,如果你想在多行文字上使用省略号- 就像这里的情况那样 - 那么不要期望有任何乐趣.CSS没有标准的方法来执行此操作,并且解决方法很容易被击中.

单行文本的省略号

使用text-overflow,省略号可以应用于单行文本.必须满足以下CSS要求:

  • 必须有width,max-widthflex-basis
  • 一定有 white-space: nowrap
  • 必须具有overflow除以外的价值visible
  • 必须是display: blockinline-block (或功能等同,如弹性项目).

所以这将有效:

p {
  width: 200px;
  white-space: nowrap;
  overflow: hidden;
  display: inline-block;
  text-overflow: ellipsis;
  border: 1px solid #ddd;
  margin: 0;
}
Run Code Online (Sandbox Code Playgroud)
<p>
  This is a test of CSS <i>text-overflow: ellipsis</i>. 
  This is a test of CSS <i>text-overflow: ellipsis</i>. 
  This is a test of CSS <i>text-overflow: ellipsis</i>. 
  This is a test of CSS <i>text-overflow: ellipsis</i>.
  This is a test of CSS <i>text-overflow: ellipsis</i>.
  This is a test of CSS <i>text-overflow: ellipsis</i>.
</p>
Run Code Online (Sandbox Code Playgroud)

jsFiddle版本

但是,尝试删除width,或让overflow默认visible,或删除white-space: nowrap,或使用块容器元素以外的东西,并且省略号失败.

这里text-overflow: ellipsis一个很大的好处:对多行文字没有影响.(white-space: nowrap仅此要求就消除了这种可能性.)

p {
    width: 200px;
    /* white-space: nowrap; */
    height: 90px; /* new */
    overflow: hidden;
    display: inline-block;
    text-overflow: ellipsis;
    border: 1px solid #ddd;
    margin: 0;
}
Run Code Online (Sandbox Code Playgroud)
<p>
  This is a test of CSS <i>text-overflow: ellipsis</i>. 
  This is a test of CSS <i>text-overflow: ellipsis</i>. 
  This is a test of CSS <i>text-overflow: ellipsis</i>. 
  This is a test of CSS <i>text-overflow: ellipsis</i>.
  This is a test of CSS <i>text-overflow: ellipsis</i>.
  This is a test of CSS <i>text-overflow: ellipsis</i>.
</p>
Run Code Online (Sandbox Code Playgroud)

jsFiddle版本


多行文本的省略号

由于CSS在多行文本上没有省略号的属性,因此创建了各种变通方法.其中有几种方法可以在这里找到:

  • @AndroidDev你需要知道在哪里剪切文本.测量文本和剪切区域并不简单.尝试仅测量包装的文本块的最后一行.你不能轻易做到.一种技术是在段落的末尾附加一个0宽度的内联元素,并获得该元素的x位置.这仍然不精确,因为最后一个字符和0宽度元素之间有空格.最重要的是,这些插件支持多种浏览器,其中测量文本和边界的技术是不同的.这并不像在文本中添加"..."那么简单. (9认同)
  • 所有用户想要的jQuery插件7kb是...添加到他们的文本?说真的,似乎有人需要学习设计插件才能更有效率. (3认同)
  • [Natalia Onischuk](http://hackingui.com/front-end/a-pure-css-solution-for-multiline-text-truncation/)的另一种方法。 (2认同)
  • Lodash 还有一个非常好的 [truncate](https://lodash.com/docs/4.17.5#truncate) 方法,可以为多行文本添加省略号。 (2认同)

小智 32

p {
    width:100%;
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    background:#fff;
    position:absolute;
}
Run Code Online (Sandbox Code Playgroud)
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sed dui felis. Vivamus vitae pharetra nisl, eget fringilla elit. Ut nec est sapien. Aliquam dignissim velit sed nunc imperdiet cursus. Proin arcu diam, tempus ac vehicula a, dictum quis nibh. Maecenas vitae quam ac mi venenatis vulputate. Suspendisse fermentum suscipit eros, ac ultricies leo sagittis quis. Nunc sollicitudin lorem eget eros eleifend facilisis. Quisque bibendum sem at bibendum suscipit. Nam id tellus mi. Mauris vestibulum, eros ac ultrices lacinia, justo est faucibus ipsum, sed sollicitudin sapien odio sed est. In massa ipsum, bibendum quis lorem et, volutpat ultricies nisi. Maecenas scelerisque sodales ipsum a hendreritLorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla sed dui felis. Vivamus vitae pharetra nisl, eget fringilla elit. Ut nec est sapien. Aliquam dignissim velit sed nunc imperdiet cursus. Proin arcu diam, tempus ac vehicula a, dictum quis nibh. Maecenas vitae quam ac mi venenatis vulputate. Suspendisse fermentum suscipit eros, ac ultricies leo sagittis quis. Nunc sollicitudin lorem eget eros eleifend facilisis. Quisque bibendum sem at bibendum suscipit. Nam id tellus mi. Mauris vestibulum, eros ac ultrices lacinia, justo est faucibus ipsum, sed sollicitudin sapien odio sed est. In massa ipsum, bibendum quis lorem et, volutpat ultricies nisi. Maecenas scelerisque sodales ipsum a hendrerit.</p>
Run Code Online (Sandbox Code Playgroud)

  • `position:absolute;` 在这里是多余的 (5认同)
  • 这看起来像是一个晦涩的解​​决方案,我希望它能在很少的浏览器上工作,但实际上[几乎在所有地方都受支持](https://caniuse.com/css-line-clamp),甚至将其纳入[CSS工作草案] (https://www.w3.org/TR/css-overflow-3/#webkit-line-clamp)。目前我想说的最佳答案 (4认同)

Saw*_*hra 31

请检查此css以获取省略号到多行文本

body {
  margin: 0;
  padding: 50px;
}

/* mixin for multiline */
.block-with-text {
  overflow: hidden;
  position: relative;
  line-height: 1.2em;
  max-height: 6em;
  text-align: justify;
  margin-right: -1em;
  padding-right: 1em;
}
.block-with-text:before {
  content: '...';
  position: absolute;
  right: 0;
  bottom: 0;
}
.block-with-text:after {
  content: '';
  position: absolute;
  right: 0;
  width: 1em;
  height: 1em;
  margin-top: 0.2em;
  background: white;
}
Run Code Online (Sandbox Code Playgroud)
<p class="block-with-text">The Hitch Hiker's Guide to the Galaxy has a few things to say on the subject of towels. A towel, it says, is about the most massivelyuseful thing an interstellar hitch hiker can have. Partly it has great practical value - you can wrap it around you for warmth as you bound across the cold moons of  Jaglan Beta; you can lie on it on the brilliant marble-sanded beaches of Santraginus V, inhaling the heady sea vapours; you can sleep under it beneath the stars which shine so redly on the desert world of Kakrafoon;  use it to sail a mini raft down the slow heavy river Moth; wet it for use in hand-to-hand-combat; wrap it round your head to ward off noxious fumes or to avoid the gaze of the Ravenous Bugblatter Beast of Traal (a mindboggingly stupid animal, it assumes that if you can't see it, it can't see you - daft as a bush, but very ravenous); you can wave your towel in emergencies as a distress signal, and of course dry yourself off with it if it still seems to be clean enough. More importantly, a towel has immense psychological value. For some reason, if a strag (strag: non-hitch hiker) discovers that a hitch hiker has his towel with him, he will automatically assume that he is also in possession of a toothbrush, face flannel, soap, tin of biscuits, flask, compass, map, ball of string, gnat spray, wet weather gear, space suit etc., etc. Furthermore, the strag will then happily lend the hitch hiker any of these or a dozen other items that the hitch hiker might accidentally have "lost". What the strag will think is that any man who can hitch the length and breadth of the galaxy, rough it, slum it, struggle against terrible odds, win through, and still knows where his towel is is clearly a man to be reckoned with.</p>
Run Code Online (Sandbox Code Playgroud)

  • 这将工作,但你需要检查文本是否溢出容器与JavaScript.否则,即使您的文本不超过容器,这些3个点也会存在 (12认同)
  • 资料来源:http://hackingui.com/front-end/a-pure-css-solution-for-multiline-text-truncation/ (10认同)
  • 我喜欢这个解决方案.只是额外的调整:在'正确:1em之前; background-color:white;`以便省略号保留在框内. (5认同)
  • 每次实施此解决方案时,设计师都会崩溃。容器外面的点是不行的 (5认同)

小智 25

只需增加-webkit-line-clamp:4; 增加行数

p {
    display: block;
    display: -webkit-box;
    max-width: 200px;
    -webkit-line-clamp: 4;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
}
Run Code Online (Sandbox Code Playgroud)
<p>Lorem ipsum dolor sit amet, novum menandri adversarium ad vim, ad his persius nostrud conclusionemque. Ne qui atomorum pericula honestatis. Te usu quaeque detracto, idque nulla pro ne, ponderum invidunt eu duo. Vel velit tincidunt in, nulla bonorum id eam, vix ad fastidii consequat definitionem.</p>
Run Code Online (Sandbox Code Playgroud)


编辑02/05/2018

线夹是一种专有的无证件CSS(webkit):https://caniuse.com/#feat=css-line-clamp,因此它目前仅适用于少数浏览器.

  • 对于 2020 年或以后阅读本文的任何人来说,这是最好的答案。 (49认同)
  • 95% 并不是“少数”。它受 Chromium、Safari、Webkit、Edge 等支持。只是 IE 和 Opera Mini 不支持。 (9认同)
  • 现在火狐浏览器支持 https://bugzilla.mozilla.org/show_bug.cgi?id=WebKit-line-clamp (8认同)
  • 适用于Chrome,但不适用于Internet Explorer (6认同)
  • `显示:块;文本溢出:省略号;` 在这里是多余的 (5认同)
  • 虽然我不太关心旧版浏览器,而且我可能只会使用这个答案,但没有人提到用于行钳位的顶级 npm 模块,这是犯罪行为 - https://www.npmjs.com/package/shave - 我从未使用过它,所以无法评论它的工作效果(或不) - 但如果文档有任何内容,它看起来不错 - 另外......值得添加一个CSS最大高度,以防浏览器这样做不支持这个以防止你的布局被破坏 (2认同)

Bru*_*ski 12

我终于找到了做我想做的解决方案.作为pparagraphe和article包装.如果你想申请省略号particle高(这也依赖于窗口的高度),你需要得到heightarticle,该line-heightp,然后articleHeight/lineHeight找到的数量line-clamp可以动态地补充说,然后.

唯一的事情是line-height应该在css文件中声明.

请检查以下代码.如果更改窗口的高度,line-clamp则会更改.可以很好地创建一个旨在实现这一目标的插件.

的jsfiddle

function lineclamp() {
  var lineheight = parseFloat($('p').css('line-height'));
  var articleheight = $('article').height(); 
  var calc = parseInt(articleheight/lineheight);
  $("p").css({"-webkit-line-clamp": "" + calc + ""});
}


$(document).ready(function() {
    lineclamp();
});

$( window ).resize(function() {
 	lineclamp();
});
Run Code Online (Sandbox Code Playgroud)
article {
  height:60%;
  background:red;
  position:absolute;
}

p {
  margin:0;
  line-height:120%;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<article>
	<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque lorem ligula, lacinia a justo sed, porttitor vulputate risus. In non feugiat risus. Sed vitae urna nisl. Duis suscipit volutpat sollicitudin. Donec ac massa elementum massa condimentum mollis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla sollicitudin sapien at enim sodales dapibus. Pellentesque sed nisl eu sem aliquam tempus nec ut leo. Quisque rutrum nulla nec aliquam placerat. Fusce a massa ut sem egestas imperdiet. Sed sollicitudin id dolor egestas malesuada. Quisque placerat lobortis ante, id ultrices ipsum hendrerit nec. Quisque quis ultrices erat.Nulla gravida ipsum nec sapien pellentesque pharetra. Suspendisse egestas aliquam nunc vel egestas. Nullam scelerisque purus interdum lectus consectetur mattis. Aliquam nunc erat, accumsan ut posuere eu, vehicula consequat ipsum. Fusce vel ex quis sem tristique imperdiet vel in mi. Cras leo orci, fermentum vitae volutpat vitae, convallis semper libero. Phasellus a volutpat diam. Ut pulvinar purus felis, eu vehicula enim aliquet vitae. Suspendisse quis lorem facilisis ante interdum euismod et vitae risus. Vestibulum varius nulla et enim malesuada fringilla. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque lorem ligula, lacinia a justo sed, porttitor vulputate risus. In non feugiat risus. Sed vitae urna nisl. Duis suscipit volutpat sollicitudin. Donec ac massa elementum massa condimentum mollis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Nulla sollicitudin sapien at enim sodales dapibus. Pellentesque sed nisl eu sem aliquam tempus nec ut leo. Quisque rutrum nulla nec aliquam placerat. Fusce a massa ut sem egestas imperdiet. Sed sollicitudin id dolor egestas malesuada. Quisque placerat lobortis ante, id ultrices ipsum hendrerit nec.</p></article>
Run Code Online (Sandbox Code Playgroud)


小智 9

这个有最好的解决方案.只有css:

.multiline-ellipsis {
    display: block;
    display: -webkit-box;
    max-width: 400px;
    height: 109.2px;
    margin: 0 auto;
    font-size: 26px;
    line-height: 1.4;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
}
Run Code Online (Sandbox Code Playgroud)

  • 线夹仅适用于chrome https://caniuse.com/#feat=css-line-clamp (2认同)
  • 再次。仅当您知道要夹紧的线数时,这才有效 (2认同)

puo*_*opg 7

我刚刚用这个概念玩了一下.基本上,如果你可能有一个像素左右切断你的最后一个字符,这里是一个纯粹的CSS和HTML解决方案:

这种方式的工作方式是将div绝对定位在视口的可视区域下方.随着内容的增长,我们希望div可以偏移到可见区域.如果内容增长太多,我们的div将偏移太高,因此上限我们的内容可以增长.

HTML:

<div class="text-container">
  <span class="text-content">
    PUT YOUR TEXT HERE
    <div class="ellipsis">...</div> // You could even make this a pseudo-element
  </span>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS:

.text-container {
    position: relative;
    display: block;
    color: #838485;
    width: 24em;
    height: calc(2em + 5px); // This is the max height you want to show of the text. A little extra space is for characters that extend below the line like 'j'
    overflow: hidden;
    white-space: normal;
}

.text-content {
  word-break: break-all;
  position: relative;
  display: block;
  max-height: 3em;       // This prevents the ellipsis element from being offset too much. It should be 1 line height greater than the viewport 
}

.ellipsis {
  position: absolute;
  right: 0;
  top: calc(4em + 2px - 100%); // Offset grows inversely with content height. Initially extends below the viewport, as content grows it offsets up, and reaches a maximum due to max-height of the content
  text-align: left;
  background: white;
}
Run Code Online (Sandbox Code Playgroud)

我在Chrome,FF,Safari和IE 11中对此进行了测试.

你可以在这里查看:http://codepen.io/puopg/pen/vKWJwK

你甚至可以通过一些CSS魔法来缓解角色的突然切断.

编辑:我想这有一个问题就是分词:break-all,否则内容不会延伸到视口的最后.:(


c-s*_*ile 6

不幸的是没有CSS的当前状态.

省略号渲染具有white-space:nowrap有效的先决条件:省略号仅在单行文本容器上绘制.


Ant*_*n R 6

用户使用以下公式:

overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2; //put number of line here
Run Code Online (Sandbox Code Playgroud)


小智 5

我在他们的主页上看了YouTube如何解决它并对其进行了简化:

.multine-ellipsis {
  -webkit-box-orient: vertical;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: normal;
}
Run Code Online (Sandbox Code Playgroud)

这将允许两行代码,然后附加省略号。

要点:https : //gist.github.com/eddybrando/386d3350c0b794ea87a2082bf4ab014b