第二行的css省略号

时间:2011-03-11 06:30:56

标签: html css

CSS text-overflow: ellipsis在第二行,这可能吗?我无法在网上找到它。

示例:

我想要的是这样的:

I hope someone could help me. I need 
an ellipsis on the second line of...

但是发生了什么:

I hope someone could help me. I ... 

20 个答案:

答案 0 :(得分:91)

这应该在webkit浏览器中

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

答案 1 :(得分:83)

text-overflow: ellipsis;工作的要求是white-spaceprenowrap等的单行版本。这意味着文本永远不会到达第二行。

人体工程学。在纯CSS中不可能。

当我刚才寻找完全相同的东西时,我的来源:http://www.quirksmode.org/css/textoverflow.html(Quirksmode ftw!)

编辑如果好的CSS神将实施http://www.w3.org/TR/css-overflow-3/#max-lines,我们可以使用fragments(新)和max-lines(新)在纯CSS中隐藏此内容。还有一些关于http://css-tricks.com/line-clampin/

的信息

编辑2 WebKit / Blink有line-clamp-webkit-line-clamp: 2会将省略号放在第二行。

答案 2 :(得分:32)

正如其他人已经回答的那样,纯CSS解决方案不存在。 有一个jQuery插件非常易于使用,它被称为dotdotdot。 它使用容器的宽度和高度来计算是否需要截断并添加省略号。

$("#multilinedElement").dotdotdot();

这是jsFiddle

答案 3 :(得分:26)

我发现Skeep的答案还不够,还需要overflow风格:

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

答案 4 :(得分:13)

如果有人使用SASS / SCSS并且偶然发现了这个问题 - 也许这个混合可能会有所帮助:

@mixin line-clamp($numLines : 1, $lineHeight: 1.412) {
  overflow: hidden;
  text-overflow: -o-ellipsis-lastline;
  text-overflow: ellipsis;
  display: block;
  /* autoprefixer: off */
  display: -webkit-box;
  -webkit-line-clamp: $numLines;
  -webkit-box-orient: vertical;
  max-height: $numLines * $lineHeight + unquote('em');
}

这只会在webkit浏览器中添加省略号。休息只是切断它。

答案 5 :(得分:10)

多么令人遗憾的是你不能让它在两条线上工作!如果元素是显示块并且高度设置为2em或者其他东西会很棒,当文本溢出时它会显示省略号!

对于单个衬垫,您可以使用:

.show-ellipsis {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

对于多行,也许你可以使用polyfill,例如github上的jQuery autoellipsis http://pvdspek.github.com/jquery.autoellipsis/

答案 6 :(得分:8)

我不是JS专业人士,但我想出了几种可以做到这一点的方法。

HTML:

<p id="truncate">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi elementum consequat tortor et euismod. Nam commodo consequat libero vel lobortis. Morbi ac nisi at leo vehicula consectetur.</p>

然后使用jQuery将其截断为特定字符数,但保留最后一个字:

// Truncate but leave last word
var myTag = $('#truncate').text();
if (myTag.length > 100) {
  var truncated = myTag.trim().substring(0, 100).split(" ").slice(0, -1).join(" ") + "…";
  $('#truncate').text(truncated);
}

结果如下:

  

Lorem ipsum dolor坐下来,精神上的精神。 Morbi
  elementum consequat tortor et ...

或者,您可以简单地将其截断为特定的字符数,如下所示:

// Truncate to specific character
var myTag = $('#truncate').text();
if (myTag.length > 15) {
  var truncated = myTag.trim().substring(0, 100) + "…";
  $('#truncate').text(truncated);
}

结果如下:

  

Lorem ipsum dolor坐下来,精神上的精神。 Morbi
  elementum consequat tortor et euismod ...

希望有所帮助。

这是jsFiddle

答案 7 :(得分:6)

我之前使用过jQuery-condense-plugin,看起来它可以做你想要的。如果没有,different plugins可能符合您的需求。

编辑:给你一个demo - 请注意,我在演示中链接了jquery.condense.js,它具有魔力,所以完全归功于该插件的作者:)

答案 8 :(得分:6)

纯css中的example很好。

.container{
  width: 200px;
}
.block-with-text {
  overflow: hidden;
  position: relative; 
  line-height: 1.2em;
  max-height: 3.6em;
  text-align: justify;  
  margin-right: -1em;
  padding-right: 1em;
}
.block-with-text+.block-with-text{
  margin-top:10px;
}
.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;
}
<div class="container">


<div class="block-with-text">
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a
</div>

<div class="block-with-text">
Lorem Ipsum is simply dummy text of the printing and typesetting industry
</div>


<div class="block-with-text">
Lorem Ipsum is simply
</div>

</div>

答案 9 :(得分:4)

这是一个非标准的CSS,当前版本的CSS没有涵盖(Firefox不支持它)。请尝试使用JavaScript。

答案 10 :(得分:4)

只需为支持它的浏览器(大多数现代浏览器)使用线夹,然后再使用旧版的1行。

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


    @supports (-webkit-line-clamp: 2) {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: initial;
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
    }
  }

答案 11 :(得分:3)

之前我遇到过这个问题,而且没有纯粹的css解决方案

这就是为什么我开发了一个小型库来处理这个问题(等等)。该库提供了对模型化和执行字母级文本呈现的对象。例如,您可以模拟文本溢出:具有任意限制的省略号(不必一行)

http://www.samuelrossille.com/home/jstext.html了解详情,了解屏幕截图,教程和下载链接。

答案 12 :(得分:2)

如果有人试图让线夹在flexbox中工作,那就有点棘手了 - 特别是一旦你用很长的话来折磨测试。此代码段中唯一真正的区别是包含截断文本的Flex项目中的min-width: 0;word-wrap: break-word;。洞察力为https://css-tricks.com/flexbox-truncated-text/的帽子提示。免责声明:据我所知,这仍然是webkit。

&#13;
&#13;
.flex-parent {
  display: flex;
}

.short-and-fixed {
  width: 30px;
  height: 30px;
  background: lightgreen;
}

.long-and-truncated {
  margin: 0 20px;
  flex: 1;
  min-width: 0;/* Important for long words! */
}

.long-and-truncated span {
  display: inline;
  -webkit-line-clamp: 3;
  text-overflow: ellipsis;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  word-wrap: break-word;/* Important for long words! */
}
&#13;
<div class="flex-parent">
  <div class="flex-child short-and-fixed">
  </div>
  <div class="flex-child long-and-truncated">
    <span>asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd</span>
  </div>
  <div class="flex-child short-and-fixed">
  </div>
</div>
&#13;
&#13;
&#13;

http://codepen.io/AlgeoMA/pen/JNvJdx(codepen版本)

答案 13 :(得分:2)

用省略号修剪多行文本的纯CSS方式

调整文本容器的高度, 控制行被-webkit-line-clamp中断:2;

.block-ellipsis {
  display: block;
  display: -webkit-box;
  max-width: 100%;
  height: 30px;
  margin: 0 auto;
  font-size: 14px;
  line-height: 1;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}

答案 14 :(得分:0)

基于-webkit-line-clamp的纯css方法,适用于webkit:

@-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>

答案 15 :(得分:0)

没有真正简单的方法可以做到这一点。使用Clamp.js库。

$clamp(myHeader, {clamp: 3});

答案 16 :(得分:0)

这里的所有答案都是错误的,它们缺少重要的部分,高度

.container{
    width:200px;
    height:600px;
    background:red
}
.title {
        overflow: hidden;
        line-height: 20px;
        height: 40px;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
<div class="container">
    <div class="title">this is a long text you cant cut it in half</div>
</div>

答案 17 :(得分:0)

对于React用户! 考虑使用React-dotdotdotReact-Truncate

一秒钟救了我

答案 18 :(得分:0)

最新回复,但是html换行符也可以,因此您可以执行html + css唯一的解决方案。因此,通常不宜使用br元素,但如果您用br破坏注释,则文本溢出省略号将从html文本的下一行开始。

答案 19 :(得分:-6)

我找到了一个解决方案但是你需要知道一个适合你文本区域的粗略字符长度,然后将...加入到前一个空格。

我这样做的方式是:

  1. 假设粗略的字符长度(在这种情况下为200)并传递给a 与您的文字一起发挥作用
  2. 拆分空格,以便有一个长字符串
  3. 使用jQuery来切换角色后的第一个“”空格 长度
  4. 加入其余的......
  5. 代码:

    truncate = function(description){
            return description.split('').slice(0, description.lastIndexOf(" ",200)).join('') + "...";           
    }
    

    这是一个小提琴 - http://jsfiddle.net/GYsW6/1/