用省略号的css自动换行

Mar*_*ins 7 html css html5

只使用CSS,一旦容器垂直填充,我想要自动换行,然后省略省略号.根据研究,我只能得到省略号white-space: nowrap- 这只会给我一行.

上下文是已知高度和可变宽度的父div,a如果不在,则子元素应始终垂直居中max-height: 100%.

它看起来像它应该工作,如果display: table在父,和display: table-cellmax-height: xxx,text-overflow: ellipsis在指定的孩子.

我不认为这是在问很多,但它迟到了,我可能会遗漏一些东西.有没有一个网站叫still-cant-be-done-in-html5.com

小提琴

Dan*_*ert 5

有一个名为"线夹"的webkit功能,可以实现我认为你正在寻找的东西.不幸的是,这是非标准的,目前还没有任何计划(至少我知道)使其成为任何标准的一部分.

https://css-tricks.com/line-clampin/

它将使用以下CSS完成:

.line-clamp {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;  
}
Run Code Online (Sandbox Code Playgroud)

使用此代码,如果元素的内容使用文本填充超过3行,则将使用省略号在第三行上剪切.

有几个不同的JavaScript库试图完成类似的事情,你可以在我在这个答案中包含的链接中看到.不幸的是,使用标准CSS,文本溢出:省略号仅限于一行.

或者,目前在W3C邮件列表中有一个关于"区域片段"的帖子,以及它们如何用于制作多行元素的省略号,但规范仍处于草案阶段,它可能需要几年时间才能进入任何浏览器.


sam*_*ris 5

现在我知道有一种方法可以用纯 CSS 来做到这一点。

您可以使用Clamp.js。但我必须警告你,它的结果有时会被破坏。因此,我使用了一些技巧,其中包括将钳位的行数设置为 3,并将line-height包装元素的 CSS 属性设置为元素高度的1 / 3 。

// Copying Clamp.min.js here because we cannot execute RAW file from github as it's content type is 'text/plain'.
// Scroll down to see the last line of code.
/*!
 * Clamp.js 0.5.1
 *
 * Copyright 2011-2013, Joseph Schmitt http://joe.sh
 * Released under the WTFPL license
 * http://sam.zoy.org/wtfpl/
 */
(function(){window.$clamp=function(c,d){function s(a,b){n.getComputedStyle||(n.getComputedStyle=function(a,b){this.el=a;this.getPropertyValue=function(b){var c=/(\-([a-z]){1})/g;"float"==b&&(b="styleFloat");c.test(b)&&(b=b.replace(c,function(a,b,c){return c.toUpperCase()}));return a.currentStyle&&a.currentStyle[b]?a.currentStyle[b]:null};return this});return n.getComputedStyle(a,null).getPropertyValue(b)}function t(a){a=a||c.clientHeight;var b=u(c);return Math.max(Math.floor(a/b),0)}function x(a){return u(c)*
a}function u(a){var b=s(a,"line-height");"normal"==b&&(b=1.2*parseInt(s(a,"font-size")));return parseInt(b)}function l(a){if(a.lastChild.children&&0<a.lastChild.children.length)return l(Array.prototype.slice.call(a.children).pop());if(a.lastChild&&a.lastChild.nodeValue&&""!=a.lastChild.nodeValue&&a.lastChild.nodeValue!=b.truncationChar)return a.lastChild;a.lastChild.parentNode.removeChild(a.lastChild);return l(c)}function p(a,d){if(d){var e=a.nodeValue.replace(b.truncationChar,"");f||(h=0<k.length?
k.shift():"",f=e.split(h));1<f.length?(q=f.pop(),r(a,f.join(h))):f=null;m&&(a.nodeValue=a.nodeValue.replace(b.truncationChar,""),c.innerHTML=a.nodeValue+" "+m.innerHTML+b.truncationChar);if(f){if(c.clientHeight<=d)if(0<=k.length&&""!=h)r(a,f.join(h)+h+q),f=null;else return c.innerHTML}else""==h&&(r(a,""),a=l(c),k=b.splitOnChars.slice(0),h=k[0],q=f=null);if(b.animate)setTimeout(function(){p(a,d)},!0===b.animate?10:b.animate);else return p(a,d)}}function r(a,c){a.nodeValue=c+b.truncationChar}d=d||{};
var n=window,b={clamp:d.clamp||2,useNativeClamp:"undefined"!=typeof d.useNativeClamp?d.useNativeClamp:!0,splitOnChars:d.splitOnChars||[".","-","\u2013","\u2014"," "],animate:d.animate||!1,truncationChar:d.truncationChar||"\u2026",truncationHTML:d.truncationHTML},e=c.style,y=c.innerHTML,z="undefined"!=typeof c.style.webkitLineClamp,g=b.clamp,v=g.indexOf&&(-1<g.indexOf("px")||-1<g.indexOf("em")),m;b.truncationHTML&&(m=document.createElement("span"),m.innerHTML=b.truncationHTML);var k=b.splitOnChars.slice(0),
h=k[0],f,q;"auto"==g?g=t():v&&(g=t(parseInt(g)));var w;z&&b.useNativeClamp?(e.overflow="hidden",e.textOverflow="ellipsis",e.webkitBoxOrient="vertical",e.display="-webkit-box",e.webkitLineClamp=g,v&&(e.height=b.clamp+"px")):(e=x(g),e<=c.clientHeight&&(w=p(l(c),e)));return{original:y,clamped:w}}})();


// CODE BEGINS HERE
$clamp(document.getElementById('toclamp'), {
  clamp: 3
});
Run Code Online (Sandbox Code Playgroud)
div {
  width: 100px;
  height: 58px;
  border: 1px solid red;
  line-height: 20px;
}
Run Code Online (Sandbox Code Playgroud)
<div id="toclamp">
  The quick brown fox jumps over the lazy dog.
</div>
<br />
<div id="noclamp">
  The quick brown fox jumps over the lazy dog.
</div>
Run Code Online (Sandbox Code Playgroud)