Ich habe eine Tabellenzelle, für die ich immer eine bestimmte Breite haben möchte. Es funktioniert jedoch nicht mit großen Zeichenfolgen mit nicht beabstandetem Text. Hier ist ein Testfall:
td {
border: solid green 1px;
width: 200px;
overflow: hidden;
}
<table>
<tbody>
<tr>
<td>
This_is_a_terrible_example_of_thinking_outside_the_box.
</td>
</tr>
</tbody>
</table>
Wie kann ich erreichen, dass der Text am Rand der Box abgeschnitten wird, anstatt die Box erweitern zu lassen?
vertical-align:middle
und selbst das Hinzufügen zum DIV behebt das Problem nicht.Wenden Sie CSS
table-layout:fixed;
(und manchmalwidth:<any px or %>
) auf die TABELLE und denwhite-space: nowrap; overflow: hidden;
Stil auf TD an. Stellen Sie dann die CSS-Breiten für die richtigen Zellen- oder Spaltenelemente ein.Bezeichnenderweise werden die Spaltenbreiten von Tabellen mit festem Layout durch die Zellenbreiten in der ersten Zeile der Tabelle bestimmt. Wenn sich in der ersten Zeile TH-Elemente befinden und Breiten auf TD (und nicht auf TH) angewendet werden, gilt die Breite nur für den Inhalt des TD (Leerraum und Überlauf können ignoriert werden). Die Tabellenspalten werden unabhängig von der eingestellten TD-Breite gleichmäßig verteilt (da keine Breiten angegeben sind [für TH in der ersten Zeile]), und die Spalten haben [berechnete] gleiche Breiten. Die Tabelle berechnet die Spaltenbreite basierend auf der TD-Breite in den nachfolgenden Zeilen nicht neu. Legen Sie die Breite für die ersten Zellenelemente fest, auf die die Tabelle stoßen soll.
Alternativ und der sicherste Weg zu Satz Spaltenbreiten zu verwenden ist
<COLGROUP>
und<COL>
Tags in der Tabelle auf jedem feste Breite COL mit der CSS Breite gesetzt. CSS in Bezug auf die Zellenbreite spielt sich besser ab, wenn die Tabelle die Spaltenbreiten im Voraus kennt.quelle
Ich bin mit dem spezifischen Problem nicht vertraut, aber Sie könnten ein Div usw. in das td stecken und einen Überlauf darauf einstellen.
quelle
Hier ist eine Lösung für Sie, aber ich verstehe nicht wirklich, warum es funktioniert:
Das Einwickeln des Zelleninhalts in ein div.
quelle
overflow:hidden
kann entfernt werdentd
, und die Breite desdiv
kann auf 100% eingestellt werden, so dass es mit jedertd
Breite funktioniert (einschließlich automatisch dimensionierter!)Die beste Lösung besteht darin, ein div in eine Tabellenzelle mit einer Breite von Null zu setzen. Tbody-Tabellenzellen erben ihre Breiten von den im Kopf definierten Breiten. Position: Relative und negative Marge sollten den Trick machen!
Hier ist ein Screenshot: https://flic.kr/p/nvRs4j
quelle
Sie müssen die Stilattribute der Tabelle festlegen:
width
undtable-layout: fixed;
den 'Überlauf: versteckt' lassen; Attribut funktionieren richtig.Imo funktioniert dies besser als die Verwendung von divs mit dem
width
style-Attribut, insbesondere wenn es für dynamische Größenänderungsberechnungen verwendet wird. Die Tabelle verfügt über ein einfacheres DOM, das die Manipulation erleichtert, da keine Korrekturen für Auffüllen und Rand erforderlich sindAls Extra müssen Sie nicht die Breite für alle Zellen festlegen, sondern nur für die Zellen in der ersten Zeile.
So was:
quelle
Ich hatte gerade ein ähnliches Problem und musste zuerst das
<div>
Innere des verwenden<td>
(John MacIntyres Lösung funktionierte aus verschiedenen Gründen nicht für mich).Beachten Sie aber , dass
<td><div>...</div></td>
nicht gültig Platzierung für ein div ist so stattdessen eine verwende ich<span>
mitdisplay:block;
Set. Es validiert jetzt gut und funktioniert.quelle
Einfachste und einfachste Lösung, die funktioniert:
quelle
Um es einfacher zu machen, schlage ich vor, ein Textfeld in das td einzufügen, das den Überlauf automatisch verwaltet
<td><textarea autofocus>$post_title</textarea></td>
müssen verbessert werden
quelle
zeigt 123456 an
quelle