657 Stimmen

CSS text-overflow in einer Tabellenzelle?

Ich möchte CSS text-overflow in einer Tabellenzelle verwenden, so dass der Text, wenn er zu lang ist, um auf einer Zeile zu passen, mit einem Auslassungszeichen abgeschnitten wird, anstatt auf mehrere Zeilen umgebrochen zu werden. Ist das möglich?

Ich habe es so versucht:

td {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

Aber das white-space: nowrap scheint den Text (und seine Zelle) kontinuierlich nach rechts auszudehnen und die Gesamtbreite der Tabelle über die Breite ihres Containers hinaus zu schieben. Ohne diese Eigenschaft jedoch wird der Text weiterhin auf mehrere Zeilen umgebrochen, wenn er den Rand der Zelle erreicht.

12 Stimmen

Tabellenzellen gehen mit overflow nicht gut um. Versuchen Sie, ein div in die Zelle zu setzen und dieses div zu stylen.

27voto

jongala Punkte 497

Es scheint, dass wenn Sie table-layout: fixed; auf dem table-Element angeben, dann Ihre Styles für td wirksam werden sollten. Dies wird auch beeinflussen, wie die Zellen dimensioniert sind.

Sitepoint diskutiert die table-layout Methoden hier etwas genauer: http://reference.sitepoint.com/css/tableformatting

2 Stimmen

Das sollte die richtige Antwort sein, wenn Sie die Breite der Tabelle nicht angeben möchten.

20voto

Stickers Punkte 69404

Wenn es sich um eine prozentuale Tabellenbreite handelt oder Sie die feste Breite der Tabellenzelle nicht festlegen können, können Sie table-layout: fixed; verwenden, um es funktionieren zu lassen.

table {
  table-layout: fixed;
  width: 100%;
}
td {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
  border: 1px solid red;
}

    Lorem ipsum und Dim Sum ja ja ja. Lorem ipsum und Dim Sum ja ja ja. Lorem ipsum und Dim Sum ja ja ja. Lorem ipsum und Dim Sum ja ja ja. Lorem ipsum und Dim Sum ja ja ja.
    Lorem ipsum und Dim Sum ja ja ja. Lorem ipsum und Dim Sum ja ja ja. Lorem ipsum und Dim Sum ja ja ja. Lorem ipsum und Dim Sum ja ja ja. Lorem ipsum und Dim Sum ja ja ja.

10voto

abbr Punkte 5000

Umschließen Sie den Zellinhalt in einem Flexblock. Als Bonus passt sich die Zelle automatisch der sichtbaren Breite an.

table {
  width: 100%;
}

div.parent {
  display: flex;
}

div.child {
  flex: 1;
  width: 1px;
  overflow-x: hidden;
  text-overflow: ellipsis;
}

          xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

6 Stimmen

Ich musste außerdem white-space: nowrap; zur child Klasse hinzufügen.

4 Stimmen

Dies ist genau das gleiche wie alle anderen Lösungen hier, da es Spalten dazu zwingt, die gleiche Breite zu haben und das automatische Anpassen der Spalten deaktiviert.

7voto

Kjetil Hansen Punkte 106

Ich habe das gelöst, indem ich ein absolut positioniertes div innerhalb der Zelle (relativ) verwendet habe.

td {
    position: relative;
}
td > div {
    position: absolute;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 100%;        
}

Das ist alles. Dann können Sie entweder einen top-Wert zum div hinzufügen oder es vertikal zentrieren:

td > div {      
    top: 0;
    bottom: 0;
    margin: auto 0;
    height: 1.5em; // = Zeilenhöhe 
}

Um etwas Platz auf der rechten Seite zu bekommen, können Sie die max-width etwas reduzieren.

0 Stimmen

Es wäre schön mit einem JSFiddle, wie viele der anderen Antworten auf diese beliebte Frage.

0 Stimmen

Yep, das funktioniert, aber ich habe etwas andere Styles für Divs verwendet: links:0;oben:0;rechts:0;unten:0;Polsterung:2px; um die richtige Position zu erhalten und den gleichen Abstand wie in den Zellen der Tabelle zu haben.

3 Stimmen

Dies zwingt alle Spalten, gleich breit zu sein, daher ist es die gleiche Lösung wie das Festlegen der Tabelle auf feste Breite, nur mit einem zusätzlichen Element (div) verbunden.

7voto

user1338062 Punkte 10425

Dies hat in meinem Fall sowohl in Firefox als auch in Chrome funktioniert:

td {
  max-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  width: 100%;
}

0 Stimmen

Als ich das gemacht habe, wurden meine th und td falsch positioniert...

1 Stimmen

Dies hat auch bei mir in allen Browsern funktioniert, danke!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X