666 votes

Limiter la longueur du texte à n lignes à l'aide de CSS

Est-il possible de limiter la longueur d'un texte à "n" lignes à l'aide de CSS (ou de le couper lorsqu'il déborde verticalement).

text-overflow: ellipsis; ne fonctionne que pour un texte d'une ligne.

texte original :

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

sortie souhaitée (2 lignes) :

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

1 votes

Remarque : les ellipses de type "text-overflow" ne sont pas prises en charge par Firefox. bugzilla.mozilla.org/show_bug.cgi?id=312156

0 votes

ne fonctionne pas sur IE10. Il fonctionne sur 11.

0 votes

@GauravShah Merci. Cela fonctionne également sur IE10. La plupart des solutions proposées ici ne sont pas compatibles avec tous les navigateurs.

937voto

Eugene Xa Points 2451

Il y a un moyen de le faire en utilisant des méthodes non officielles. collier de serrage et, à partir de Firefox 68, elle fonctionne dans tous les principaux navigateurs.

body {
   margin: 20px;
}

.text {
   overflow: hidden;
   text-overflow: ellipsis;
   display: -webkit-box;
   -webkit-line-clamp: 2; /* number of lines to show */
   -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>

A moins que vous ne vous préoccupiez des utilisateurs d'IE, il n'est pas nécessaire de faire line-height et max-height de repli.

3 votes

par exemple, avec une certaine taille de police par rapport à la hauteur de ligne, vous pouvez voir une partie de la ligne suivante également avec text-align:justify, l'ellipse n'est pas à la fin de la dernière ligne, mais chevauche le texte à la position, il serait, si le texte était aligné à gauche

5 votes

Voici le violon : jsfiddle.net/csYjC/1122 pendant que je le préparais, j'ai découvert que la partie de la dernière ligne n'est visible que lorsqu'il y a du remplissage.

0 votes

Eh bien, personne n'a dit que cette magie noire non standard propre à webkit allait fonctionner parfaitement tout le temps. Vous pouvez utiliser le padding sur un autre conteneur, peut-être parent. Mettre du texte dans la balise <p> est parfaitement logique : jsfiddle.net/csYjC/1129

137voto

Erik Aigner Points 7182

Ce que vous pouvez faire est le suivant :

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

max-height: = line-height: × <number-of-lines> sur em .

28 votes

Fonctionne comme text-overflow : clip, car il ne montre pas (...)

0 votes

Cela semble être la meilleure solution possible pour moi aussi, mais comme @rishiAgar l'a noté, elle ne se termine pas par une ellipse. Continue à fonctionner comme un clip.

1 votes

Je crois que vous devrez ajouter les attributs display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; pour faire apparaître les ellipses. Mais cela ne fonctionne que dans Chrome. Pour une solution qui fonctionne également sur Firefox, regardez ici : stackoverflow.com/a/20595073/1884158 Et voici un tutoriel utile sur le sujet : css-tricks.com/line-clampin

34voto

Pekka 웃 Points 249607

Pour autant que je puisse voir, cela ne serait possible qu'en utilisant height: (some em value); overflow: hidden et même alors, il n'aurait pas la fantaisie ... à la fin.

Si ce n'est pas une option, je pense que c'est impossible sans un prétraitement côté serveur (difficile car le flux de texte est impossible à prévoir de manière fiable) ou jQuery (possible mais probablement compliqué).

17 votes

Cela semble fonctionner pour toute taille de police .mytext { overflow:hidden ; line-height : 1.2em ; max-height : 2.4em ; }

1 votes

@Pedro ouais. Vous pourriez être en mesure d'exécuter à travers chaque .mytext à l'aide de jQuery, déterminez s'il a plus de contenu que ce qui est visible et ajoutez une balise ... manuellement. De cette façon, vous êtes compatible avec les clients sans JS et les clients avec JS peuvent avoir la décoration. Cette question mérite peut-être une réponse distincte de la part d'un gourou de jQuery ; pourrait être possible de faire relativement facilement

15voto

Martin Andersson Points 353

La solution de ce fil est d'utiliser le plugin jquery pointdotdot . Il ne s'agit pas d'une solution CSS, mais elle vous offre de nombreuses options pour les liens "en savoir plus", le redimensionnement dynamique, etc.

5voto

dreamer_ Points 1

Actuellement, vous ne pouvez pas, mais à l'avenir vous pourrez utiliser text-overflow:ellipis-lastline . Actuellement, il est disponible avec le préfixe de fournisseur dans Opera 10.60+ : exemple

5 votes

Cela ne fonctionne pas pour les chaînes de caractères multilignes, car il faut également définir white-scace : nowrap. Voir ici .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X