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

前端 未结 8 1805
栀梦
栀梦 2020-12-22 23:13

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,

相关标签:
8条回答
  • 2020-12-22 23:56

    I recomend you to use http://www.colorzilla.com/gradient-editor/.

    What you are looking for may be:

    background: -moz-linear-gradient(top,  rgba(255,255,255,0) 0%, rgba(255,255,255,0) 80%, rgba(0,0,0,1) 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,0)), color-stop(80%,rgba(255,255,255,0)), color-stop(100%,rgba(0,0,0,1))); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top,  rgba(255,255,255,0) 0%,rgba(255,255,255,0) 80%,rgba(0,0,0,1) 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top,  rgba(255,255,255,0) 0%,rgba(255,255,255,0) 80%,rgba(0,0,0,1) 100%); /* Opera 11.10+ */
    background: -ms-linear-gradient(top,  rgba(255,255,255,0) 0%,rgba(255,255,255,0) 80%,rgba(0,0,0,1) 100%); /* IE10+ */
    background: linear-gradient(to bottom,  rgba(255,255,255,0) 0%,rgba(255,255,255,0) 80%,rgba(0,0,0,1) 100%); /* W3C */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00ffffff', endColorstr='#000000',GradientType=0 ); /* IE6-9 */
    

    and if not workign as you wish, copy and paste those css in the url (css window) and modifie it at will.

    0 讨论(0)
  • 2020-12-22 23:57

    I had a similar problem with a bootstrap button which has a vertical gradient and also change of gradient on hover. This worked for me.

    <button class="btn btn-success" style="width:250px">
          <div class="faderflow">
             SOME TEXT THAT'S TOO LONG FOR THE BUTTON
          </div>
    </button>
    
    
    
    .faderflow {
        overflow: hidden;
    
       /* same color as text (white) */
        background: linear-gradient(to right, rgb(255, 255, 255) 80%,rgba(255, 255, 255, 0) 100%);
        background-clip: border-box;
        -webkit-background-clip: text;
        -webkit-text-fill-color: #fff0;
    
       /* overwrite the bootstrap text shadow  */
        text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.2);
    }
    

    https://codepen.io/andyg2/pen/qGmKKN

    0 讨论(0)
  • 2020-12-22 23:58

    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

    0 讨论(0)
  • 2020-12-23 00:03

    I’d suggest something like this:

    Apply the gradient to an absolutely positioned pseudo-element (:after), that get’s positioned at say 160px from top with 40px height – that way, it’ll not be shown at all in shorter boxes (because of their max-height in combination with overflow:hidden). And the gradient itself is from totally transparent (rgba(0,0,0,0)) to solid black.

    .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);
    }
    

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

    0 讨论(0)
  • 2020-12-23 00:04

    I used this method to make the bottom transparent.

    http://jsfiddle.net/IAMCHIEF/x7qLon18/4/

    .row{
        position:relative;
        width: 300px;
        margin-bottom: 5px;
        padding-bottom: 5px;
        border-bottom: 3px solid #777;
        max-height:200px;
        overflow:hidden;
        color:#fff;
        background:#000;
    }
    .row:after {
      content: "";
    position: absolute;
    top: 137px;
    left: 0;
    height: 40px;
    width: 100%;
    background: -webkit-linear-gradient(rgba(255, 255,255, .4), rgba(255, 255, 255, 1));
    }
    <div class="row">
    	Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </div>
    <div class="row">
    	Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </div>
    <div class="row">
    	Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed
    </div>

    0 讨论(0)
  • 2020-12-23 00:11

    Your code is correct just the liner gradient percent must be set

    background: -webkit-linear-gradient(top,#000 70%, #fff);
    

    Try the fiddle link

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

    You could alse specfiy it in pixel like this

     background: -webkit-linear-gradient(top,#000 140px, #fff);
    

    Both works the same

    0 讨论(0)
提交回复
热议问题