使用CSS时,对于多行溢出块使用“…”


303

overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;

如果溢出,将在行的末尾显示“ ...”。但是,这将仅显示在一行中。但我希望将其以多行显示。

它可能看起来像:

+--------------------+
|abcde feg hij   dkjd|
|dsji jdia js ajid  s|
|jdis ajid dheu d ...|/*Here it's overflowed, so "..." is shown. */
+--------------------+

3
如果这些都是单独的行,那么您实际上只需要担心只写一条线并为每条线重复功能。如果这些行都属于同一句子,则可能应仅在最后一行保留省略号。如果在句子的中途使用省略号,则实际上是在句子中打了个洞。
Wex 2011年


4
关于这个主题的好文章css-tricks.com/line-clampin
Adrien Be

请参阅以下链接我的回答: stackoverflow.com/questions/536814/...
Shishir阿罗拉

我在这里纯CSS解决方案非常详细地回答了这个问题。它工作可靠。如该答复中所述,使用Javascript可以轻松实现这一点,但是如果不可行,则可以使用
dashard

Answers:


84

也有几个jquery插件可以解决此问题,但许多插件不能处理多行文本。以下作品:

还有一些性能测试


57
我没有看到任何纯CSS解决方案来满足此要求
Jim Thomas

@Ovilia请注意,Jim的解决方案还包括一个名为jquery.autoellipsis.js的jQuery插件,您必须单独下载一个include
Jeff


2
亲爱的未来的人们:这个插件是我的最爱,因为它允许切换隐藏文本的显示。http://keith-wood.name/more.html
brichins 2013年

1
我添加的所有库都不错。性能测试可以帮助您做出决定,但是我想提一下,我们通常在实施dotdotdot,因为它具有广泛的配置和简洁的代码-易于修改。(请注意,这只是个人观点-不属于答案。)
Milan Jaros 2014年

58

我四处乱逛,直到我设法做到这一点。它带有一些警告:

  1. 它不是纯CSS;它不是纯CSS。您必须添加一些HTML元素。但是,不需要JavaScript。
  2. 省略号在最后一行右对齐。这意味着,如果您的文本未正确对齐或对齐,则最后一个可见单词和省略号之间可能会出现明显的差距(取决于第一个隐藏单词的长度)。
  3. 省略号始终保留。这意味着,如果文本几乎完全适合文本框,则可能会不必要地将其截断(最后一个单词是隐藏的,尽管从技术上讲不是必须的)。
  4. 您的文本需要具有固定的背景颜色,因为在不需要的情况下,我们使用彩色矩形隐藏省略号。

我还应注意,文本将在单词边界而不是字符边界处断开。这是有意的(因为我认为较长的文本比较好),但是因为它与实际text-overflow: ellipsis情况有所不同,所以我想提一提。

如果您可以忍受这些警告,则HTML如下所示:

<div class="ellipsify">
    <div class="pre-dots"></div>
    <div class="dots">&hellip;</div>
    <!-- your text here -->
    <span class="hidedots1"></span>
    <div class="hidedots2"></div>
</div>

这是相应的CSS,以一个150像素宽的框为例,在白色背景上带有三行文本。假设您有CSS重置或类似的重置,可在必要时将边距和填充设置为零。

/* the wrapper */
.ellipsify {
    font-size:12px;
    line-height:18px;
    height: 54px;       /* 3x line height */
    width: 150px;
    overflow: hidden;
    position: relative; /* so we're a positioning parent for the dot hiders */
    background: white;
}

/* Used to push down .dots. Can't use absolute positioning, since that
   would stop the floating. Can't use relative positioning, since that
   would cause floating in the wrong (namely: original) place. Can't 
   change height of #dots, since it would have the full width, and
   thus cause early wrapping on all lines. */
.pre-dots {
    float: right;
    height: 36px;  /* 2x line height (one less than visible lines) */
}

.dots {
    float: right; /* to make the text wrap around the dots */
    clear: right; /* to push us below (not next to) .pre-dots */
}

/* hides the dots if the text has *exactly* 3 lines */
.hidedots1 {
    background: white;
    width: 150px;
    height: 18px;       /* line height */
    position: absolute; /* otherwise, because of the width, it'll be wrapped */
}

/* hides the dots if the text has *less than* 3 lines */
.hidedots2 {
    background: white; 
    width: 150px;
    height: 54px;       /* 3x line height, to ensure hiding even if empty */
    position: absolute; /* ensures we're above the dots */
}

结果看起来像这样:

具有不同文本长度的渲染结果的图像

为了阐明其工作原理,以下是同一张图片,不同的.hidedots1是用红色和.hidedots2青色突出显示。当没有不可见的文本时,这些矩形将隐藏省略号:

与上面相同的图像,除了辅助元素以彩色突出显示

在IE9,IE8(模拟),Chrome,Firefox,Safari和Opera中进行了测试。在IE7中不起作用。


9
你并不真的需要4个html元素,前提your text是包裹着<p>的标签(正如他们应该是),那么你可以使用.ellipsify p:before.ellipsify p:after那当然,你需要.ellipsify p:before{content:"\2026";}\2026是省略号的代码,也可能需要content:" ";,因为他们可能无法正常工作空元素。
2013年

2
尽管我认为此答案不适合许多情况,但至少提供了一个非插件,非JavaScript的答案。构造此答案的方式和独到之处是我要使用+1它的原因。
VoidKing

@MichalStefanow仅有一个-我为之创建的一个:Apptivate.MS上有关应用“卡”的说明,例如,请参阅apptivate.ms/users/1141291/blynn
balpha

@Pavlo,我真的很喜欢您的解决方案。但这似乎仅适用于给定的标准文本,而不是如果我从db中加载文本,导致脚本不知道所加载文本的externalHeight吗?
JonSnow 2015年

2
@SchweizerSchoggi,是否为伪元素,此解决方案不依赖JS。如果正确实现,从何处获取文本都无关紧要。
2015年

41

这是最近的CSS技巧文章,对此进行了讨论。

以上文章中的一些解决方案(此处未提及)是

1)-webkit-line-clamp和2)将绝对定位的元素放到右下角,并逐渐消失

两种方法都采用以下标记:

<div class="module"> /* Add line-clamp/fade class here*/
  <p>Text here</p>
</div>

与CSS

.module {
  width: 250px;
  overflow: hidden;
}

1)-webkit-line-clamp

线夹FIDDLE(..最多3条线)

.line-clamp {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;  
  max-height: 3.6em; /* I needed this to get it to work */
}

2)淡出

假设您将line-height设置为1.2em。如果要显示三行文本,我们可以将容器的高度设为3.6em(1.2em×3)。隐藏的溢出将隐藏其余部分。

淡出FIDDLE

p
{
    margin:0;padding:0;
}
.module {
  width: 250px;
  overflow: hidden;
  border: 1px solid green;
  margin: 10px;
}

.fade {
  position: relative;
  height: 3.6em; /* exactly three lines */
}
.fade:after {
  content: "";
  text-align: right;
  position: absolute;
  bottom: 0;
  right: 0;
  width: 70%;
  height: 1.2em;
  background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 50%);
}

解决方案#3-使用@supports的组合

我们可以使用@supports在webkit浏览器上应用webkit的换行,并在其他浏览器中应用淡出。

@支持带有淡入淡出小提琴的线夹

<div class="module line-clamp">
  <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
</div>

的CSS

.module {
  width: 250px;
  overflow: hidden;
  border: 1px solid green;
  margin: 10px;
}

.line-clamp {
      position: relative;
      height: 3.6em; /* exactly three lines */
    }
.line-clamp:after {
      content: "";
      text-align: right;
      position: absolute;
      bottom: 0;
      right: 0;
      width: 70%;
      height: 1.2em;
      background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 50%);
 }

@supports (-webkit-line-clamp: 3) {
    .line-clamp {
        display: -webkit-box;
        -webkit-line-clamp: 3;
        -webkit-box-orient: vertical;  
        max-height:3.6em; /* I needed this to get it to work */
        height: auto;
    }
    .line-clamp:after {
        display: none;
    }
}

@ HP's411在Firefox中,您会看到淡入淡出的效果,而不是省略号
Danield

34

下面的链接为该问题提供了纯HTML / CSS解决方案。

浏览器支持-如文章所述:

到目前为止,我们已经在Safari 5.0,IE 9(必须处于标准模式),Opera 12和Firefox 15上进行了测试。

较旧的浏览器仍然可以很好地工作,因为布局的重点在于常规位置,边距和填充属性。如果您的平台较旧(例如Firefox 3.6,IE 8),则可以使用该方法,但可以将渐变重做为独立的PNG图像或DirectX过滤器。

http://www.mobify.com/dev/multiline-ellipsis-in-pure-css

CSS:

p { margin: 0; padding: 0; font-family: sans-serif;}

.ellipsis {
    overflow: hidden;
    height: 200px;
    line-height: 25px;
    margin: 20px;
    border: 5px solid #AAA; }

.ellipsis:before {
    content:"";
    float: left;
    width: 5px; height: 200px; }

.ellipsis > *:first-child {
    float: right;
    width: 100%;
    margin-left: -5px; }        

.ellipsis:after {
    content: "\02026";  

    box-sizing: content-box;
    -webkit-box-sizing: content-box;
    -moz-box-sizing: content-box;

    float: right; position: relative;
    top: -25px; left: 100%; 
    width: 3em; margin-left: -3em;
    padding-right: 5px;

    text-align: right;

    background: -webkit-gradient(linear, left top, right top,
        from(rgba(255, 255, 255, 0)), to(white), color-stop(50%, white));
    background: -moz-linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);           
    background: -o-linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
    background: -ms-linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white);
    background: linear-gradient(to right, rgba(255, 255, 255, 0), white 50%, white); }

HTML:

<div class="ellipsis">
    <div>
        <p>Call me Ishmael.  Some years ago &ndash; never mind how long precisely &ndash; having little or no money in my purse, and nothing particular to interest me on shore, I thought I would sail about a little and see the watery part of the world.  It is a way I have of driving off the spleen, and regulating the circulation.  Whenever I find myself growing grim about the mouth; whenever it is a damp, drizzly November in my soul; whenever I find myself involuntarily pausing before coffin warehouses, and bringing up the rear of every funeral I meet; and especially whenever my hypos get such an upper hand of me, that it requires a strong moral principle to prevent me from deliberately stepping into the street, and methodically knocking people's hats off &ndash; then, I account it high time to get to sea as soon as I can.</p>  
    </div>
</div>

小提琴

(调整浏览器窗口的大小以进行测试)


2
“到目前为止,我们已经测试了......”一切,但 Chrome浏览器?
stevenspiel 2015年

测试通过Chrome for Mac Version 48.0.2564.116
Adrien Be'3

21

在查看了W3规范中的文本溢出之后,我认为仅使用CSS是不可能的。省略号是一种新颖的属性,因此到目前为止,它可能尚未收到太多使用或反馈。

但是,这个人似乎提出了类似(或相同)的问题,并且有人能够提出一个不错的jQuery解决方案。您可以在此处演示解决方案:http : //jsfiddle.net/MPkSF/

如果无法使用javascript,我认为您可能不走运。


3
新的?自IE6以来,MSIE就支持它。如今,除Firefox之外所有浏览器都支持它。
基督教徒

我将任何未全局实现的CSS3属性称为“ new-ish”。这只是语义问题。另外,您是否意识到您在评论将近一年的帖子?
杰夫

5
它不是CSS3,已经存在了很多年并被广泛采用。只有规范可以被认为是新的。此外,如果SO不想在旧线程上发表评论,则可以将其禁用。
基督教徒

10

为了完整起见,只想添加到这个问题。


长相一样-o-ellipsis-lastline可以当歌剧切换到WebKit的已被删除。为历史目的留下子弹。
马特

8

很好的问题...我希望有一个答案,但这是最近用CSS可以获得的最接近的答案。没有省略号,但仍然相当有用。

overflow: hidden;
line-height: 1.2em;
height: 3.6em;      // 3 lines * line-height

实际上,凯文(Kevin)的答案是最近几天用CSS可以得到的最接近stackoverflow.com/a/14248844/759452
Adrien Be

7

我发现此CSS(scss)解决方案效果很好。在webkit浏览器中,它显示省略号,而在其他浏览器中,它仅截断文本。这对我的预期用途很好。

$font-size: 26px;
$line-height: 1.4;
$lines-to-show: 3;

h2 {
  display: block; /* Fallback for non-webkit */
  display: -webkit-box;
  max-width: 400px;
  height: $font-size*$line-height*$lines-to-show; /* Fallback for non-webkit */
  margin: 0 auto;
  font-size: $font-size;
  line-height: $line-height;
  -webkit-line-clamp: $lines-to-show;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}

创建者的示例:http : //codepen.io/martinwolf/pen/qlFdp


-webkit-line-clamp浏览器支持caniuse.com/#search=-webkit-line-clamp
阿德里安

6

这是我仅使用CSS就能获得的最接近的解决方案。

的HTML

<div class="ellipsis"> <span>...</span>
Hello this is Mr_Green from Stackoverflow. I love CSS. I live in CSS and I will never leave working on CSS even my work is on other technologies.</div>

的CSS

div {
    height: 3em;
    line-height: 1.5em;
    width: 80%;
    border: 1px solid green;
    overflow: hidden;
    position: relative;
}
div:after {
    content:". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . .";
    background-color: white;
    color: white;
    display: inline;
    position: relative;
    box-shadow: 8px 1px 1px white;
    z-index: 1;
}
span {
    position: absolute;
    bottom: 0px;
    right: 0px;
    background-color: white;
}

工作小提琴调整窗口大小以进行检查

链接到我的博客以获取解释

更新的小提琴

我希望现在一些CSS专家会对如何使其完美具有想法。:)


这个答案让我肚子疼。首先,您不使用印刷可用的省略号…(这是一个占用一个空格的字体符号)。比较smashingmagazine.com/2008/08/11/top-ten-web-typography-sins根据您的解决方案,您无法真正控制省略号所在的位置,因此它可能会遇到不良情况,例如连续出现点。
Volker E.

1
@VolkerE。谢谢你的信息。这是更新的小提琴。如果您的解释中有任何遗漏之处,请告诉我。
Mr_Green 2014年

好的解决方案(原始解决方案),但是为什么不使用div::before代替span呢?:)
亚当

@Adam有一些边缘情况,所以我没有使用伪元素。(我现在不记得了
Green先生,2015年

5

这里有很多答案,但是我需要一个答案是:

  • 仅CSS
  • 面向未来(与时间更兼容)
  • 不会将单词分开(仅在空格处断开)

需要注意的是,它不为不支持该功能的浏览器提供省略号 -webkit-line-clamp规则(当前为IE,Edge,Firefox)但确实使用渐变来淡化其文本。

.clampMe {
  position: relative;
  height: 2.4em; 
  overflow: hidden;
}

.clampMe:after {
  content: "";
  text-align: right;
  position: absolute;
  bottom: 0;
  right: 0;
  width: 50%;
  height: 1.2em; /* Just use multiples of the line-height */
  background: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 80%);
}

/* Now add in code for the browsers that support -webkit-line-clamp and overwrite the non-supportive stuff */
@supports (-webkit-line-clamp: 2) {
  .clampMe {
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
  }
  
  .clampMe:after {
    display: none;
  }
}
<p class="clampMe">There's a lot more text in here than what you'll ever see. Pellentesque habitant testalotish morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>

您可以在此CodePen中看到它的运行情况,还可以看到一个在此处 Javascript版本(没有jQuery)。


4

我参加这个聚会有点晚,但是我想出了一个独特的解决方案。与其尝试通过CSS技巧或JS插入自己的省略号,我还不如尝试限制单行显示。因此,我为每个“行”复制了文本,并仅使用负的文本缩进来确保一行从最后一行的结尾处开始。小提琴

CSS:

#wrapper{
    font-size: 20pt;
    line-height: 22pt;
    width: 100%;
    overflow: hidden;
    padding: 0;
    margin: 0;
}

.text-block-line{
    height: 22pt;
    display: inline-block;
    max-width: 100%;
    overflow: hidden;
    white-space: nowrap;
    width: auto;
}
.text-block-line:last-child{
    text-overflow: ellipsis;
}

/*the follwing is suboptimal but neccesary I think. I'd probably just make a sass mixin that I can feed a max number of lines to and have them avialable. Number of lines will need to be controlled by server or client template which is no worse than doing a character count clip server side now. */
.line2{
    text-indent: -100%;
}
.line3{
    text-indent: -200%;
}
.line4{
    text-indent: -300%;
}

HTML:

<p id="wrapper" class="redraw">
    <span class="text-block-line line1">This text is repeated for every line that you want to be displayed in your element. This example has a max of 4 lines before the ellipsis occurs. Try scaling the preview window width to see the effect.</span>
    <span class="text-block-line line2">This text is repeated for every line that you want to be displayed in your element. This example has a max of 4 lines before the ellipsis occurs. Try scaling the preview window width to see the effect.</span>
    <span class="text-block-line line3">This text is repeated for every line that you want to be displayed in your element. This example has a max of 4 lines before the ellipsis occurs. Try scaling the preview window width to see the effect.</span>
    <span class="text-block-line line4">This text is repeated for every line that you want to be displayed in your element. This example has a max of 4 lines before the ellipsis occurs. Try scaling the preview window width to see the effect.</span>
</p>

小提琴中有更多细节。我使用JS重绘来解决浏览器重排的问题,因此请检查一下,但这是基本概念。任何想法/建议均不胜感激。


1
我不喜欢复制每一行文本。此外-如果文本是动态的-您将不知道要添加多少行。话虽如此,为此独特的解决方案+1!
Danield 2014年

感谢您的输入:)动态文本不是问题。它基本上是在模板上定义容器的最大高度。如果您希望将其限制为3行,则设为3。我的用例的标题可以是1-2行,摘要可以是1-3。这些是已知值。字符串有多长都没关系。另外,如果您是在模板情况下执行此操作而不是静态html,则可以让它以内联样式处理否定的文本缩进,因此您不需要line1,line2,line3等的大块内容。以js模板为例的小提琴。
lupos 2014年

如果断字不是项目中的问题,那将很有帮助。
Mr_Green 2014年

3

谢谢@balpha和@Kevin,我将两种方法结合在一起。

此方法不需要js。

您可以使用background-image,无需渐变即可隐藏点。

innerHTML.ellipsis-placeholder是没有必要的,我用的.ellipsis-placeholder保持相同的宽度和高度.ellipsis-more。您可以display: inline-block改用。

.ellipsis {
    overflow: hidden;
    position: relative;
}
.ellipsis-more-top {/*push down .ellipsis-more*/
    content: "";
    float: left;
    width: 5px;
}
.ellipsis-text-container {
    float: right;
    width: 100%;
    margin-left: -5px;
}
.ellipsis-more-container {
    float: right;
    position: relative;
    left: 100%;
    width: 5px;
    margin-left: -5px;
    border-right: solid 5px transparent;
    white-space: nowrap;
}
.ellipsis-placeholder {/*keep text around ,keep it transparent ,keep same width and height as .ellipsis-more*/
    float: right;
    clear: right;
    color: transparent;
}
.ellipsis-placeholder-top {/*push down .ellipsis-placeholder*/
    float: right;
    width: 0;
}
.ellipsis-more {/*ellipsis things here*/
    float: right;
}
.ellipsis-height {/*the total height*/
    height: 3.6em;
}
.ellipsis-line-height {/*the line-height*/
    line-height: 1.2;
}
.ellipsis-margin-top {/*one line height*/
    margin-top: -1.2em;
}
.ellipsis-text {
    word-break: break-all;
}
<div class="ellipsis ellipsis-height ellipsis-line-height">
    <div class="ellipsis-more-top ellipsis-height"></div>
    <div class="ellipsis-text-container">
        <div class="ellipsis-placeholder-top ellipsis-height ellipsis-margin-top"></div>
        <div class="ellipsis-placeholder">
           <span>...</span><span>more</span>
        </div>
        <span class="ellipsis-text">text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text text </span>
    </div>
    <div class="ellipsis-more-container ellipsis-margin-top">
        <div class="ellipsis-more">
            <span>...</span><span>more</span>
        </div>
    </div>
</div>

jsfiddler


2

javascript解决方案会更好

  • 获取文本的行数
  • is-ellipsis如果窗口调整大小或元素变化,则切换类

getRowRects

Element.getClientRects()这样

在此处输入图片说明

同一行中的每个rect具有相同的top值,因此找出具有不同top值的rect ,就像这样

在此处输入图片说明

function getRowRects(element) {
    var rects = [],
        clientRects = element.getClientRects(),
        len = clientRects.length,
        clientRect, top, rectsLen, rect, i;

    for(i=0; i<len; i++) {
        has = false;
        rectsLen = rects.length;
        clientRect = clientRects[i];
        top = clientRect.top;
        while(rectsLen--) {
            rect = rects[rectsLen];
            if (rect.top == top) {
                has = true;
                break;
            }
        }
        if(has) {
            rect.right = rect.right > clientRect.right ? rect.right : clientRect.right;
            rect.width = rect.right - rect.left;
        }
        else {
            rects.push({
                top: clientRect.top,
                right: clientRect.right,
                bottom: clientRect.bottom,
                left: clientRect.left,
                width: clientRect.width,
                height: clientRect.height
            });
        }
    }
    return rects;
}

浮动 ...more

这样

在此处输入图片说明

检测窗口调整大小或元素已更改

这样

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明



0

基于-webkit-line-clamp的纯CSS方法:

@-webkit-keyframes ellipsis {/*for test*/
    0% { width: 622px }
    50% { width: 311px }
    100% { width: 622px }
}
.ellipsis {
    max-height: 40px;/* h*n */
    overflow: hidden;
    background: #eee;

    -webkit-animation: ellipsis ease 5s infinite;/*for test*/
    /**
    overflow: visible;
    /**/
}
.ellipsis .content {
    position: relative;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-pack: center;
    font-size: 50px;/* w */
    line-height: 20px;/* line-height h */
    color: transparent;
    -webkit-line-clamp: 2;/* max row number n */
    vertical-align: top;
}
.ellipsis .text {
    display: inline;
    vertical-align: top;
    font-size: 14px;
    color: #000;
}
.ellipsis .overlay {
    position: absolute;
    top: 0;
    left: 50%;
    width: 100%;
    height: 100%;
    overflow: hidden;

    /**
    overflow: visible;
    left: 0;
    background: rgba(0,0,0,.5);
    /**/
}
.ellipsis .overlay:before {
    content: "";
    display: block;
    float: left;
    width: 50%;
    height: 100%;

    /**
    background: lightgreen;
    /**/
}
.ellipsis .placeholder {
    float: left;
    width: 50%;
    height: 40px;/* h*n */

    /**
    background: lightblue;
    /**/
}
.ellipsis .more {
    position: relative;
    top: -20px;/* -h */
    left: -50px;/* -w */
    float: left;
    color: #000;
    width: 50px;/* width of the .more w */
    height: 20px;/* h */
    font-size: 14px;

    /**
    top: 0;
    left: 0;
    background: orange;
    /**/
}
<div class='ellipsis'>
    <div class='content'>
        <div class='text'>text text text text text text text text text text text text text text text text text text text text text </div>
        <div class='overlay'>
            <div class='placeholder'></div>
            <div class='more'>...more</div>
        </div>
    </div>
</div>


-1

我找到了一个JavaScript技巧,但您必须使用字符串的长度。假设您要3条线的宽度为250px,则可以计算每条线的长度,即

//get the total character length.
//Haha this might vary if you have a text with lots of "i" vs "w"
var totalLength = (width / yourFontSize) * yourNumberOfLines

//then ellipsify
function shorten(text, totalLength) {
    var ret = text;
    if (ret.length > totalLength) {
        ret = ret.substr(0, totalLength-3) + "...";
    }
    return ret;
}

最有可能的是,我们不会在所有地方都使用固定宽度的字体。因此,在这些情况下,此技巧可能会失败。
Ovilia
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.