Betrachten Sie das folgende Beispiel: ( Live-Demo hier )
$(function() {
console.log("width = " + $("td").width());
});
td {
border: 1px solid black;
width: 50px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
<tbody>
<tr>
<td>Hello Stack Overflow</td>
</tr>
</tbody>
</table>
Die Ausgabe lautet : width = 139
, und die Auslassungspunkte werden nicht angezeigt.
Was fehlt mir hier?
width
undheight
auf dem Tisch werden Zellen immer als minimale Breite und Höhe verwendet. Tabellenzellen sind unterschiedlich!Antworten:
Anscheinend fügte hinzu:
löst auch das Problem.
Eine andere mögliche Lösung besteht darin,
table-layout: fixed;
die Tabelle festzulegen und sie auch festzulegenwidth
. Zum Beispiel: http://jsfiddle.net/fd3Zx/5/quelle
display: table-cell
(Standardeinstellung fürtd
Elemente) akzeptieren keine Breite.display: block;
Art besiegt den Zweck der Verwendung einer Tabelle. Ich mag dietable-layout: fixed;
Option, es hat gut für mich funktioniert.table-layout:fixed
verteilt die Breite der Spalten weniger intelligent. Gibt es eine andere Option, die die Spaltenbreite auf die gleiche Weisetable-layout: normal
zuweist und die Auslassungspunkte dennoch korrekt anzeigt?Es ist auch wichtig zu setzen
Auf die enthaltende Tabelle, damit es auch in IE9 gut funktioniert (wenn Sie die maximale Breite verwenden).
quelle
Wie bereits erwähnt, können Sie verwenden
td { display: block; }
, dies macht jedoch den Zweck der Verwendung einer Tabelle zunichte.Sie können verwenden,
table { table-layout: fixed; }
aber vielleicht möchten Sie, dass es sich für einige Spalten anders verhält.Der beste Weg, um das zu erreichen, was Sie wollen, besteht darin, Ihren Text in a zu verpacken
<div>
und Ihr CSS wie folgt auf das<div>
(nicht auf das<td>
) anzuwenden :quelle
Versuchen Sie es mit
max-width
stattwidth
, die Tabelle berechnet die Breite weiterhin automatisch.Funktioniert auch in
ie11
(mit ie8-Kompatibilitätsmodus).jsfiddle .
quelle
Demoseite
Für Tabellen mit dynamischer Breite habe ich den folgenden Weg gefunden, um zufriedenstellende Ergebnisse zu erzielen. Jeder ,
<th>
der will , wird getrimmter Text Fähigkeit haben sollte , ein inneres Wickelelement aufweist , das wickelt den Inhalt der<th>
damittext-overflow
an der Arbeit.Dies führt effektiv dazu, dass die Breite des Elements an die Breite des Ansichtsfensters (Browserfenster) "gebunden" wird, und führt zu einem reaktionsschnellen Inhaltsausschnitt.
vw
Stellen Sie die Einheiten auf einen zufriedenstellenden Wert ein.Minimales CSS:
Hier ist eine ausführbare Demo:
quelle
Ich bot nur eine Alternative an, da ich dieses Problem hatte und keine der anderen Antworten hier den gewünschten Effekt hatte. Also habe ich stattdessen eine Liste verwendet. Semantisch gesehen könnten die Informationen, die ich ausgegeben habe, sowohl als tabellarische Daten als auch als aufgelistete Daten angesehen werden.
Am Ende habe ich also Folgendes getan:
Also
ul
isttable
,li
isttr
undspan
ist im Grundetd
.Dann setze ich in CSS die
span
Elemente aufdisplay:block;
undfloat:left;
(ich bevorzuge diese Kombination,inline-block
da sie in älteren Versionen von IE funktioniert, um den Float-Effekt zu löschen, siehe: http://css-tricks.com/snippets/css/clear- fix / ) und auch die Ellipsen haben:Dann legen Sie nur noch die
max-widths
Spannweiten fest, damit die Liste wie eine Tabelle aussieht.quelle
<td><ul>...</ul></td>
)? Es scheint bei mir nicht zu funktionieren :(Anstatt Auslassungspunkte zu verwenden, um das Problem des Überlaufens von Text zu lösen, stellte ich fest, dass eine deaktivierte und gestaltete Eingabe besser aussah und es dem Benutzer dennoch ermöglicht, die gesamte Zeichenfolge anzuzeigen und auszuwählen, wenn dies erforderlich ist.
Es sieht aus wie ein Textfeld, ist jedoch hervorhebbar und daher benutzerfreundlicher
quelle
Überprüfen Sie die
box-sizing
CSS-Eigenschaft Ihrertd
Elemente. Ich hatte ein Problem mit der CSS-Vorlage, die denborder-box
Wert festlegt . Du musst einstellenbox-sizing: content-box
.quelle
Lass deine Tische so wie sie sind. Wickeln Sie den Inhalt einfach in die TDs mit einem Bereich ein, auf den das Kürzungs-CSS angewendet wird.
quelle
Wenn Sie die maximale Breite nicht auf td setzen möchten (wie in dieser Antwort ), können Sie die maximale Breite auf div setzen:
function so_hack(){}
http://jsfiddle.net/fd3Zx/754/function so_hack(){}
Hinweis: 100% funktioniert nicht, aber 99% machen den Trick in FF. Andere moderne Browser benötigen keine albernen Div-Hacks.
quelle