Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fading out text on overflow with css if the text is bigger than allowed

Tags:

html

css

I am trying to create a text fade-out effect when the amount of text is bigger than the row can handle. I am achieving this with the mixture of max-height, overflow and linear-gradient. Something like this.

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

The full fiddle is available. I am trying to achieve effect similar to this one enter image description here

and I am kind of close. The problem is that in my case text start to fade-out from the very beginning and I want it to start fading out only if it is really close to maximum size. Lets say start fading out if it is already 150px. Also I am using only -webkit prefix and I assume that there may be other prefixes that I can add for other rendering engines.

Is there a way to do this in pure CSS?

like image 301
Salvador Dali Avatar asked Apr 02 '14 10:04

Salvador Dali


People also ask

How do you wrap text overflow in CSS?

The overflow-wrap CSS property applies to inline elements, setting whether the browser should insert line breaks within an otherwise unbreakable string to prevent text from overflowing its line box.


Video Answer


2 Answers

Looks like your requirement is just to fade out the text beginning at a certain height (about 150px), the text (if any) presenting at that height is considered as overflow. So you can try using some kind of transparent linear gradient layer placed on top of the text area, we can achieve this in a neat way using the pseudo-element :before like this:

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

Fiddle

like image 68
King King Avatar answered Oct 27 '22 23:10

King King


I used this method derived from reddit pages & it works fine

.fade {
    -webkit-mask-image: linear-gradient(180deg, #000 60%, transparent);
  }
<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>
like image 39
doinghun Avatar answered Oct 28 '22 01:10

doinghun