Débordement: points cachés à la fin

206

Disons que j'ai une chaîne " j'aime les gros culs et je ne peux pas mentir " et je la coupe avec overflow:hidden, donc elle affiche quelque chose comme ceci:

J'aime les gros culs et je ne peux pas

couper le texte. Est-il possible d'afficher ceci comme ceci:

J'aime les gros culs et je ne peux pas ...

en utilisant CSS?

mannicken
la source
46
Cette question est-elle une ruse pour promouvoir la chanson?
Cyril Gupta
12
@CyrilGupta Désolé pour la réponse tardive. J'ai dû courir aux toilettes. Pour répondre à votre question ... Oui
Joe Phillips

Réponses:

282

Vous pouvez utiliser le débordement de texte: points de suspension; qui, selon caniuse, est pris en charge par tous les principaux navigateurs.

Voici une démo sur jsbin.

.cut-text { 
  text-overflow: ellipsis;
  overflow: hidden; 
  width: 160px; 
  height: 1.2em; 
  white-space: nowrap;
}
<div class="cut-text">
I like big buts and I can not lie.
</div>

Joe Phillips
la source
Cela semblait fonctionner dans Firefox 15.0.1: w3schools.com/cssref/tryit.asp?filename=trycss3_text-overflow
Jace
Oui, il semble fonctionner dans les versions plus récentes. Évidemment, cette réponse date de quelques années.
Joe Phillips
Firefox a commencé à prendre en charge cela à partir de la version 7, qui a été publiée dans la seconde moitié de 2011.
Richard Ev
1
Je peux utiliser mon bon sens pour dire que cette réponse est "correcte" sur la base des votes et des commentaires. Cependant, je ne vois pas en réalité comment cette réponse est "juste". J'ai utilisé à la fois overflow: hidden;et text-overflow: ellipsis;dans un <p>élément (c'est-à-dire un élément de bloc) et ...je n'ai trouvé aucun à la fin (bien sûr, je m'assure qu'il déborde bien). J'ai également essayé cela sans la overflow: hidden;partie, et aussi avec un <span>élément à l'intérieur de l' <p>élément où l' <p>élément avait overflow: hidden;et <span>avait text-overflow: ellipsis;Peu importe comment
j'essayais
2
Eh bien, je pense que je connais le problème. J'essaie de restreindre le débordement en fonction de max-heightce que je ne peux pas avoir white-space:réglé surnowrap
VoidKing
89

Vérifiez l'extrait de code suivant pour votre problème

div{
  width : 100px;
  overflow:hidden;
  display:inline-block;
  text-overflow: ellipsis;
  white-space: nowrap;
}
<div>
    The Alsos Mission was an Allied unit formed to investigate Axis scientific developments, especially nuclear, chemical and biological weapons, as part of the Manhattan Project during World War II. Colonel Boris Pash, a former Manhattan P
</div>

Arjun
la source
4
up pour ajouter "white-space: nowrap;" qui pourrait être nécessaire dans certains cas
leo
2
comment faire disparaître le texte pour afficher 2 lignes?
Martian2049
1
@ Matian2040 vous pouvez ajuster en donnant une hauteur fixe et des styles cachés de débordement, vérifiez ce violon jsfiddle.net/5135L4bx
Arjun
1
Oh je vois. j'ai essayé. mais il semble que deux lignes signifient qu'il n'y aura pas de ... à la fin?
Martian2049
1
display: inline-block;était le composant manquant pour moi. Je vous remercie.
Seth
18

Essayez ceci si vous souhaitez restreindre les lignes jusqu'à 3 et après trois lignes, les points apparaîtront. Si nous voulons augmenter les lignes, changez simplement la valeur de -webkit-line-clamp et donnez la largeur pour la taille div.

div {
   display: -webkit-box;
   -webkit-line-clamp: 3;
   -webkit-box-orient: vertical;
   overflow: hidden;
   text-overflow: ellipsis;
}
Nagendra Matala
la source
excuses, je ne sais pas comment j'ai supprimé tes mots comme ça!
Alec
fonctionne très bien sur Chrome, mais notez que cela ne fonctionnera pas sur Firefox
Ken Bigler
Comment faire cela sur un autre navigateur, par exemple Firefox? Edit: stackoverflow.com/questions/33058004/…
user3187724
17

J'espère que cela vous sera utile:

.text-with-dots {
    display: block;
    max-width: 98%;
    white-space: nowrap;
    overflow: hidden !important;
    text-overflow: ellipsis;
}
<div class='text-with-dots'>Some texts here Some texts here Some texts here Some texts here Some texts here Some texts here </div>

Vu Phan
la source
15

Oui, via la text-overflowpropriété en CSS 3. Attention: il n'est pas encore universellement supporté dans les navigateurs.

ceejayoz
la source
3
La prise en charge du navigateur est plutôt bonne maintenant, en février 2012. Voir caniuse.com/#search=text-overflow
Simon East
1
Ah, tu es la raison pour laquelle cette question est apparue trois ans plus tard.
M. Lister
8

Dans bootstrap 4 , vous pouvez ajouter une .text-truncateclasse pour tronquer le texte avec des points de suspension.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

<!-- Inline level -->
<span class="d-inline-block text-truncate" style="max-width: 190px;">
  I like big butts and I cannot lie
</span>

Penny Liu
la source
6
<style>
    .dots
    {
        display: inline-block;
        width: 325px;
        white-space: nowrap;
        overflow: hidden !important;
        text-overflow: ellipsis;
    }

    .dot
    {
        display: inline-block;
        width: 185px;
        white-space: nowrap;
        overflow: hidden !important;
        text-overflow: ellipsis;
    }
</style>
Cuteboy_Max
la source
3

La plupart des solutions utilisent ici une largeur statique. Mais cela peut parfois être faux pour certaines raisons.

Exemple: j'avais une table avec plusieurs colonnes. La plupart d'entre eux sont étroits (largeur statique). Mais la colonne principale doit être aussi large que possible (dépend de la taille de l'écran).

HTML:

<table style="width: 100%">
  <tr>
    <td style="width: 60px;">narrow</td>
    <td>
      <span class="cutwrap" data-cutwrap="dynamic column can have really long text which can be wrapped on two rows, but we just need not wrapped texts using as much space as possible">
        dynamic column can have really long text which can be wrapped on two rows
        but we just need not wrapped texts using as much space as possible
      </span>
    </td>
  </tr>
</table>

CSS:

.cutwrap {
  position: relative;
  overflow: hidden;
  display: block;
  width: 100%;
  height: 18px;
  white-space: normal;
  color: transparent !important;
}
.cutwrap::selection {
  color: transparent !important;
}
.cutwrap:before {
  content: attr(data-cutwrap);
  position: absolute;
  left: 0;
  right: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #333;
}
/* different styles for links */
a.cutwrap:before {
  text-decoration: underline;
  color: #05c;
}
Maju
la source
3
<!DOCTYPE html>
<html>
<head>
<style>
.cardDetaileclips{
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 3; /* after 3 line show ... */
    -webkit-box-orient: vertical;
}
</style>
</head>
<body>
<div style="width:100px;">
  <div class="cardDetaileclips">
    My Name is Manoj and pleasure to help you.
  </div>
</div> 
</body>
</html>
manoj patel
la source
-1

masquer le texte au chargement et afficher en survol

<span class="hide-text"> How to hide text by dots and show text on hover</span>

.hide-text {
    width: 70px;
    display: inline-block;
    white-space: nowrap;
    overflow: hidden !important;
    text-overflow: ellipsis;
  }

  span:hover {
     white-space: unset;
     text-overflow: unset;
  }
Rohit Parte
la source