débordement de texte: les points de suspension ne fonctionnent pas


264

Voici ce que j'ai essayé (voir ici ):

body {
    overflow: hidden;
}

span {
    border: solid 2px blue;
    white-space: nowrap;
    text-overflow: ellipsis;
}

Essentiellement, je veux que la plage se rétrécisse avec des points de suspension lorsque la fenêtre est réduite. Qu'ai-je fait de mal?


6
les exigences pour que les points de suspension fonctionnent: stackoverflow.com/a/33061059/3597276
Michael Benjamin

Le problème que j'ai eu quand je pensais que cela ne fonctionnait pas était que je n'ai pas réglé la largeur assez longtemps (10 px). Donc je coupais les points de suspension, doh!
Rod

Réponses:


459

Vous devez avoir CSS overflow, width(ou max-width) display, et white-space.

http://jsfiddle.net/HerrSerker/kaJ3L/1/

span {
    border: solid 2px blue;
    white-space: nowrap;
    text-overflow: ellipsis;
    width: 100px;
    display: block;
    overflow: hidden
}

Addendum Si vous souhaitez un aperçu des techniques de serrage de ligne (ellipses de débordement multiligne), consultez cette page CSS-Tricks: https://css-tricks.com/line-clampin/

Addendum2 (mai 2019)
Comme le dit ce lien , Firefox 68 prendra en charge -webkit-line-clamp(!)


12
La propriété d'espace blanc était ce qui me manquait. Merci.
nebulousGirl

65
Il suce que vous avez besoin de la white-space: nowrap;propriété. Maintenant, vous ne pouvez faire qu'une seule ligne de texte se terminant par ... au lieu d'un texte de bloc.
Sven van Zoelen

3
Aujourd'hui, tous les principaux navigateurs prennent en charge les points de suspension: caniuse.com/#feat=text-overflow
kazy

1
@basZero Multiline Ellipsis n'est pas pris en charge avec CSS seul. Vous devez prendre d'autres mesures
yunzen

1
Vous devez spécifier une largeur pour que le conteneur soit lié, vous devez définir le dépassement de capacité: caché pour que le navigateur masque le texte de dépassement, puis définir le dépassement de texte: points de suspension pour indiquer au navigateur comment gérer en particulier le masquage du dépassement de texte.
Michael Angstadt

46

Assurez-vous d'avoir un élément de bloc, une taille maximale et définissez le débordement sur caché. (Testé dans IE9 et FF 7)

http://jsfiddle.net/uh9zD/

div {
    border: solid 2px blue;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    width: 50px;
}

5
Cela ressemble à cet espace blanc: la propriété nowrap peut également être généralement nécessaire pour tout ce qui comporte des espaces.
Kzqai

Copie exacte du commentaire ci-dessus.
nebulousGirl

@nebulousGirl: en fait, le commentaire de Kzqai était antérieur à ceux publiés dans les commentaires de HerrSerker.
lepe

Il y a une bizarrerie dans IE - IE n'encapsule pas un deuxième mot (testé dans IE 11) ... Allez comprendre. Fonctionne dans tout autre navigateur comme prévu (y compris le bon vieux Opera 12).
Nux

1
@Nux Cela ne fonctionne pas non plus comme prévu dans le navigateur MS Edge
yunzen

21

Pour l'utilisation de plusieurs lignes dans Chrome:

display: inline-block;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2; // max nb lines to show
-webkit-box-orient: vertical;

Inspiré de YouTube ;-)


C'est une solution très intéressante. Il utilise des -webkit-*propriétés, mais est pris en charge dans tous les principaux navigateurs. Plus d'informations peuvent être trouvées ici: css-tricks.com/almanac/properties/l/line-clamp
dkniffin

5

J'avais un problème avec les points de suspension sous Chrome. Activer l'espace blanc: nowrap semblait le corriger.

max-width: 95px;
max-height: 20px;
overflow: hidden;
display: inline-block;
text-overflow: ellipsis;
border: solid 1px black;
font-size: 12pt;
text-align: right;
white-space: nowrap;

4
word-wrap: break-word;

cela et seulement cela a fait le travail pour moi pendant un

<pre> </pre> 

marque

tout le reste n'a pas réussi à faire les points de suspension ....


3

Juste un heads-up pour tous ceux qui pourraient tomber dessus ... Mon h2 héritait

text-rendering: optimizelegibility; 
//Changed to text-rendering: none; for fix

qui ne permettait pas les ellipses. Apparemment c'est très capricieux hein?


2

Ajoutez ce code ci-dessous pour savoir où vous voulez

exemple

p{
   display: block; /* Fallback for non-webkit */
   display: -webkit-box;
   max-width: 400px;
   margin: 0 auto;
   -webkit-line-clamp: 2;
   -webkit-box-orient: vertical;
   overflow: hidden;
   text-overflow: ellipsis;
 }

2

Pour plusieurs lignes

En chrome, vous pouvez appliquer ce CSS si vous devez appliquer des points de suspension sur plusieurs lignes.

Vous pouvez également ajouter de la largeur dans votre CSS pour spécifier l'élément d'une certaine largeur:

.multi-line-ellipsis {
    overflow: hidden;
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
}
<p class="multi-line-ellipsis">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>


1

Vous pouvez essayer d'utiliser des points de suspension en ajoutant ce qui suit en CSS:

.truncate {
  width: 250px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

Mais il semble que ce code s'applique uniquement à la garniture d'une ligne. Vous trouverez plus de façons de rogner le texte et d'afficher les points de suspension sur ce site Web: http://blog.sanuker.com/?p=631


0

Ajoutez les lignes suivantes en CSS pour que les points de suspension fonctionnent

 p {
     display: block; // change it as per your requirement
     overflow: hidden;
     text-overflow: ellipsis;
     white-space: nowrap;
   }

0

Pour ceux d'entre nous qui ne veulent pas utiliser de largeur fixe , cela fonctionne également en utilisant display: inline-grid. Ainsi, avec les propriétés requises, vous ajoutez simplementdisplay

span {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
    display: inline-grid;
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.