Beperk tekstlengte tot n regels met CSS

Is het mogelijk om een ​​tekstlengte te beperken tot “n” regels met behulp van CSS (of deze te knippen wanneer deze verticaal overloopt).

text-overflow: ellipsis;werkt alleen voor tekst van 1 regel.

oorspronkelijke tekst:

Ultrices natoque mus mattis, aliquam, cras in pellentesque
tincidunt elit purus lectus, vel ut aliquet, elementum nunc
nunc rhoncus placerat urna! Zit est sed! Ut penatibus turpis
moet voorzichtig zijn! Dapibus sed aenean, magna sagittis, lorem velit

gewenste uitvoer (2 regels):

Ultrices natoque mus mattis, aliquam, cras in pellentesque
tincidunt elit purus lectus, vel ut aliquet, elementum…


Antwoord 1, autoriteit 100%

Er is een manier om dit te doen met behulp van de onofficiële line-clamp-syntaxis, en te beginnen met Firefox 68 het werkt in alle belangrijke browsers.

body {
   margin: 20px;
}
.text {
   overflow: hidden;
   text-overflow: ellipsis;
   display: -webkit-box;
   -webkit-line-clamp: 2; /* number of lines to show */
           line-clamp: 2; 
   -webkit-box-orient: vertical;
}
<div class="text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam consectetur venenatis blandit. Praesent vehicula, libero non pretium vulputate, lacus arcu facilisis lectus, sed feugiat tellus nulla eu dolor. Nulla porta bibendum lectus quis euismod. Aliquam volutpat ultricies porttitor. Cras risus nisi, accumsan vel cursus ut, sollicitudin vitae dolor. Fusce scelerisque eleifend lectus in bibendum. Suspendisse lacinia egestas felis a volutpat.
</div>

Snippet uitvouwen


Antwoord 2, autoriteit 14%

Wat u kunt doen is het volgende:

.max-lines {
  display: block;/* or inline-block */
  text-overflow: ellipsis;
  word-wrap: break-word;
  overflow: hidden;
  max-height: 3.6em;
  line-height: 1.8em;
}
<p class="max-lines">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae leo dapibus, accumsan lorem eleifend, pharetra quam. Quisque vestibulum commodo justo, eleifend mollis enim blandit eu. Aenean hendrerit nisl et elit maximus finibus. Suspendisse scelerisque consectetur nisl mollis scelerisque.</p>

Snippet uitvouwen


Antwoord 3, autoriteit 4%

Werkende oplossing voor meerdere browsers

Dit probleem houdt ons allemaal al jaren bezig.

Om in alle gevallen te helpen, heb ik de CSS-only-aanpak uiteengezet, en een jQuery-benadering voor het geval de CSS-waarschuwingen een probleem vormen.

Hier is een alleen CSS-oplossing die ik heb bedacht en die onder alle omstandigheden werkt, met een paar kleine kanttekeningen.

De basis is eenvoudig, het verbergt de overloop van de overspanning en stelt de maximale hoogte in op basis van de lijnhoogte zoals voorgesteld door Eugene Xa.

Dan is er een pseudo-klasse na de bevattende div die de ellips mooi plaatst.

Voorbehoud

Deze oplossing zal altijd het weglatingsteken plaatsen, ongeacht of dit nodig is.

Als de laatste regel eindigt met een eindzin, krijg je vier punten….

U zult tevreden moeten zijn met de uitlijning van uitgevulde tekst.

Het weglatingsteken staat rechts van de tekst, wat er slordig uitziet.

Code + fragment

jsfiddle

.text {
  position: relative;
  font-size: 14px;
  color: black;
  width: 250px; /* Could be anything you like. */
}
.text-concat {
  position: relative;
  display: inline-block;
  word-wrap: break-word;
  overflow: hidden;
  max-height: 3.6em; /* (Number of lines you want visible) * (line-height) */
  line-height: 1.2em;
  text-align:justify;
}
.text.ellipsis::after {
  content: "...";
  position: absolute;
  right: -12px; 
  bottom: 4px;
}
/* Right and bottom for the psudo class are px based on various factors, font-size etc... Tweak for your own needs. */
<div class="text ellipsis">
  <span class="text-concat">
Lorem ipsum dolor sit amet, nibh eleifend cu his, porro fugit mandamus no mea. Sit tale facete voluptatum ea, ad sumo altera scripta per, eius ullum feugait id duo. At nominavi pericula persecuti ius, sea at sonet tincidunt, cu posse facilisis eos. Aliquid philosophia contentiones id eos, per cu atqui option disputationi, no vis nobis vidisse. Eu has mentitum conclusionemque, primis deterruisset est in.
Virtute feugait ei vim. Commune honestatis accommodare pri ex. Ut est civibus accusam, pro principes conceptam ei, et duo case veniam. Partiendo concludaturque at duo. Ei eirmod verear consequuntur pri. Esse malis facilisis ex vix, cu hinc suavitate scriptorem pri.
  </span>
</div>

Snippet uitvouwen


Antwoord 4, autoriteit 3%

Voor zover ik kan zien, zou dit alleen mogelijk zijn met behulp van height: (some em value); overflow: hiddenen zelfs dan zou het niet de mooie ...aan het eind hebben.

Als dat geen optie is, denk ik dat het onmogelijk is zonder enige voorbewerking aan de serverzijde (moeilijk omdat de tekststroom onmogelijk betrouwbaar te voorspellen is) of jQuery (mogelijk maar waarschijnlijk ingewikkeld).


Antwoord 5, autoriteit 2%

het volgen van de CSS-klasse heeft me geholpen bij het verkrijgen van een weglatingsteken van twee regels.

 .two-line-ellipsis {
        padding-left:2vw;
        text-overflow: ellipsis;
        overflow: hidden;
        width: 325px;
        line-height: 25px;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        padding-top: 15px;
    }

Antwoord 6

De oplossing van deze threadis om de jQuery-plug-in dotdotdot. Geen CSS-oplossing, maar het geeft je veel opties voor “lees meer”-links, dynamisch formaat wijzigen enz.


Antwoord 7

Dit werkt voor mij:

div {
  width: 200px;
}
p {
  display: block; /* Fallback for non-webkit */
  display: -webkit-box;
  height: 2.6em; /* Fallback for non-webkit, line-height * 2 */
  line-height: 1.3em;
  -webkit-line-clamp: 2; /* if you change this, make sure to change the fallback line-height and height */
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}
<div>
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore
  </p>
<div>

Snippet uitvouwen


Antwoord 8

.class{
   word-break: break-word;
   overflow: hidden;
   text-overflow: ellipsis;
   display: -webkit-box;
   line-height: 16px; /* fallback */
   max-height: 32px; /* fallback */
   -webkit-line-clamp: 2; /* number of lines to show */
   -webkit-box-orient: vertical;
}

Antwoord 9

Momenteel kan dat niet, maar in de toekomst zul je text-overflow:ellipis-lastlinekunnen gebruiken. Momenteel is het beschikbaar met het leveranciersvoorvoegsel in
Opera 10.60+: voorbeeld


Antwoord 10

Ik heb een oplossing die goed werkt, maar in plaats daarvan gebruikt een ellips een verloop. Het werkt als je dynamische tekst hebt, dus je weet niet of het lang genoeg zal zijn om een ​​ellips nodig te hebben. De voordelen zijn dat u geen JavaScript-berekeningen hoeft uit te voeren en het werkt voor containers met variabele breedte, inclusief tabelcellen, en is cross-browser. Het gebruikt een paar extra divs, maar het is heel gemakkelijk te implementeren.

Mark-up:

<td>
    <div class="fade-container" title="content goes here">
         content goes here
         <div class="fade">
    </div>
</td>

CSS:

.fade-container { /*two lines*/
    overflow: hidden;
    position: relative;
    line-height: 18px; 
    /* height must be a multiple of line-height for how many rows you want to show (height = line-height x rows) */
    height: 36px;
    -ms-hyphens: auto;
    -webkit-hyphens: auto;
    hyphens: auto;
    word-wrap: break-word;
}
.fade {
        position: absolute;
        top: 50%;/* only cover the last line. If this wrapped to 3 lines it would be 33% or the height of one line */
        right: 0;
        bottom: 0;
        width: 26px;
        background: linear-gradient(to right,  rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%);
}

blogbericht: http://salzerdesign.com/blog/?p=453

voorbeeldpagina: http://salzerdesign.com/test/fade.html


Antwoord 11

Ik hou echt van line-clamp, maar nog geen ondersteuning voor Firefox.. dus ik ga met een wiskundige berekening en verberg gewoon de overloop

.body-content.body-overflow-hidden h5 {
    max-height: 62px;/* font-size * line-height * lines-to-show(4 in this case) 63px if you go with jquery */
    overflow: hidden;
}
.body-content h5 {
    font-size: 14px; /* need to know this*/
    line-height:1,1; /*and this*/
}

laten we nu zeggen dat je deze klasse wilt verwijderen en toevoegen via jQuery met een link, je hebt een extra pixel nodig, dus de maximale hoogte zal 63 px zijn, dit komt omdat je elke keer moet controleren of de hoogte groter dan 62px, maar in het geval van 4 regels krijg je een false true, dus een extra pixel lost dit op en veroorzaakt geen extra problemen

ik zal hiervoor een coffeescript plakken om een ​​voorbeeld te zijn, gebruik een paar links die standaard verborgen zijn, met klassen lees-meer en lees-minder, het zal degenen verwijderen die de overloop niet nodig heeft en verwijder de body-overflow klassen

jQuery ->
    $('.read-more').each ->
        if $(this).parent().find("h5").height() < 63
             $(this).parent().removeClass("body-overflow-hidden").find(".read-less").remove()
             $(this).remove()
        else
            $(this).show()
    $('.read-more').click (event) ->
        event.preventDefault()
        $(this).parent().removeClass("body-overflow-hidden")
        $(this).hide()
        $(this).parent().find('.read-less').show()
    $('.read-less').click (event) ->
        event.preventDefault()
        $(this).parent().addClass("body-overflow-hidden")
        $(this).hide()
        $(this).parent().find('.read-more').show()

Antwoord 12

Als je je wilt concentreren op elke letterdie je zo kunt doen, verwijs ik naar dezevraag

Codefragment weergeven


Antwoord 13

Basisvoorbeeldcode, leren coderen is eenvoudig. Controleer stijl CSS-opmerkingen.

table tr {
  display: flex;
}
table tr td {
  /* start */
  display: inline-block; /* <- Prevent <tr> in a display css */
  text-overflow: ellipsis;
  white-space: nowrap;
  /* end */
  padding: 10px;
  width: 150px; /* Space size limit */
  border: 1px solid black;
  overflow: hidden;
}
<table>
  <tbody>
    <tr>
      <td>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla egestas erat ut luctus posuere. Praesent et commodo eros. Vestibulum eu nisl vel dui ultrices ultricies vel in tellus.
      </td>
      <td>
        Praesent vitae tempus nulla. Donec vel porta velit. Fusce mattis enim ex. Mauris eu malesuada ante. Aenean id aliquet leo, nec ultricies tortor. Curabitur non mollis elit. Morbi euismod ante sit amet iaculis pharetra. Mauris id ultricies urna. Cras ut
        nisi dolor. Curabitur tellus erat, condimentum ac enim non, varius tempor nisi. Donec dapibus justo odio, sed consequat eros feugiat feugiat.
      </td>
      <td>
        Pellentesque mattis consequat ipsum sed sagittis. Pellentesque consectetur vestibulum odio, aliquet auctor ex elementum sed. Suspendisse porta massa nisl, quis molestie libero auctor varius. Ut erat nibh, fringilla sed ligula ut, iaculis interdum sapien.
        Ut dictum massa mi, sit amet interdum mi bibendum nec.
      </td>
    </tr>
    <tr>
      <td>
        Sed viverra massa laoreet urna dictum, et fringilla dui molestie. Duis porta, ligula ut venenatis pretium, sapien tellus blandit felis, non lobortis orci erat sed justo. Vivamus hendrerit, quam at iaculis vehicula, nibh nisi fermentum augue, at sagittis
        nibh dui et erat.
      </td>
      <td>
        Nullam mollis nulla justo, nec tincidunt urna suscipit non. Donec malesuada dolor non dolor interdum, id ultrices neque egestas. Integer ac ante sed magna gravida dapibus sit amet eu diam. Etiam dignissim est sit amet libero dapibus, in consequat est
        aliquet.
      </td>
      <td>
        Vestibulum mollis, dui eu eleifend tincidunt, erat eros tempor nibh, non finibus quam ante nec felis. Fusce egestas, orci in volutpat imperdiet, risus velit convallis sapien, sodales lobortis risus lectus id leo. Nunc vel diam vel nunc congue finibus.
        Vestibulum turpis tortor, pharetra sed ipsum eu, tincidunt imperdiet lorem. Donec rutrum purus at tincidunt sagittis. Quisque nec hendrerit justo.
      </td>
    </tr>
  </tbody>
</table>

Antwoord 14

Ik heb hiernaar gezocht, maar dan realiseer ik me, verdomme, mijn website gebruikt php!!!
Waarom gebruik je de trimfunctie niet bij de tekstinvoer en speel je met de maximale lengte….

Hier is ook een mogelijke oplossing voor degenen die php gebruiken:
http://ideone.com/PsTaI

<?php
$s = "In the beginning there was a tree.";
$max_length = 10;
if (strlen($s) > $max_length)
{
   $offset = ($max_length - 3) - strlen($s);
   $s = substr($s, 0, strrpos($s, ' ', $offset)) . '...';
}
echo $s;
?>

Other episodes