如果文本大于允许的话,使用css淡出溢出的文本

Sal*_*ali 65 html css html5 css3

当文本的数量大于行可以处理的数量时,我正在尝试创建文本淡出效果.我用的混合物实现这一目标max-height,overflowlinear-gradient.像这样的东西.

max-height:200px;
overflow:hidden;
text-overflow: ellipsis;
background: -webkit-linear-gradient(#000, #fff);
Run Code Online (Sandbox Code Playgroud)

全小提琴可用.我试图达到与此类似的效果在此输入图像描述

我很亲密 问题是,在我的情况下,文本从一开始就淡出,我希望它只有在真正接近最大尺寸时才开始淡出.让我们说如果它已经是150px就开始淡出.此外,我只使用-webkit前缀,我假设可能有其他前缀,我可以为其他渲染引擎添加.

有没有办法在纯CSS中执行此操作?

Kin*_*ing 99

看起来你的要求只是淡化从某个高度(大约150px)开始的文本,在该高度呈现的文本(如果有的话)被认为是溢出.因此,您可以尝试使用放置在文本区域顶部的某种透明线性渐变图层,我们可以使用这样的伪元素以一种巧妙的方式实现这:before一点:

.row:before {
  content:'';
  width:100%;
  height:100%;    
  position:absolute;
  left:0;
  top:0;
  background:linear-gradient(transparent 150px, white);
}
Run Code Online (Sandbox Code Playgroud)

小提琴

  • 非常好.我还必须在`.row`上设置`position:relative`.然而,一个问题是重叠的伪元素使得无法点击原始元素内的链接.为了解决这个问题,我将`pointer-events:none`添加到了伪元素的样式中. (21认同)
  • 如果你想知道为什么这不适用于iOS Safari,那是因为那里不允许`transparent`.使用`rgba(255,255,255,0)`代替,根据这个SO帖子:/sf/ask/1177165391/ (6认同)

CBr*_*roe 10

我建议这样的事情:

将渐变应用于绝对定位的伪元素(:after),从顶部以40px高度定位为160px - 这样,它就不会在较短的框中显示(因为它们max-height结合在一起overflow:hidden).渐变本身是从完全透明(rgba(0,0,0,0))到纯黑色.

.row{
    position:relative;
    /* … */
}
.row:after {
    content:"";
    position:absolute;
    top:160px;
    left:0;
    height:40px;
    width:100%;
    background: linear-gradient(rgba(0,0,0,0), #000);
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/b9vtW/2/


小智 9

我使用了从 reddit 页面派生的这种方法,它工作正常

.fade {
    -webkit-mask-image: linear-gradient(180deg, #000 60%, transparent);
  }
Run Code Online (Sandbox Code Playgroud)
<div>
    <div class="fade">
    Text text text text<br />
    Text text text text<br />
    Text text text text<br />
    Text text text text<br />
    Text text text text<br />
    Text text text text<br />
    Text text text text<br />
    Text text text text<br />
    Text text text text<br />
    Text text text text<br />
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 完美的。超级简单。适用于具有大量换行文本或单行的单个 div,如您演示的那样。我想是挑剔的,无论文本是否溢出,它都会显示淡入淡出。将 60% 更改为 95% 似乎可以大大缓解这一问题。不需要指针事件:none;。 (4认同)
  • 官方指令称为“mask-image”,不再需要前缀。 (3认同)

小智 9

正确的人

\n
-webkit-mask-image: linear-gradient(180deg, #000 60%, transparent);\n
Run Code Online (Sandbox Code Playgroud)\n

只需将 Hight 固定并应用它,它\xc2\xb4s 就会正常工作。

\n


Shi*_*Jos 5

您的代码是正确的,只是必须设置线性梯度百分比

background: -webkit-linear-gradient(top,#000 70%, #fff);
Run Code Online (Sandbox Code Playgroud)

尝试小提琴链接

http://jsfiddle.net/ShinyMetilda/kb4fL/1/

你也可以像这样以像素为单位指定它

 background: -webkit-linear-gradient(top,#000 140px, #fff);
Run Code Online (Sandbox Code Playgroud)

两者工作原理相同


小智 5

我想你正在寻找这样的东西,对吧?

http://jsfiddle.net/QPFkH/

.text {
    position:relative;
    width:200px;
    max-height:10em;
    overflow:hidden;
}
.shadow {
    position:absolute;
    top:8em;
    width:100%;
    height:2em;
    background: -webkit-linear-gradient(transparent, white);
    background: -o-linear-gradient(transparent, white);
    background: -moz-linear-gradient(transparent, white);
    background: linear-gradient(transparent, white);
}
Run Code Online (Sandbox Code Playgroud)