Treffen Sie Fred. Er ist ein Tisch:
<table border="1" style="width: 100%;">
<tr>
<td>This cells has more content</td>
<td>Less content here</td>
</tr>
</table>
Freds Wohnung hat die bizarre Angewohnheit, ihre Größe zu ändern, deshalb hat er gelernt, einige seiner Inhalte zu verbergen, um nicht alle anderen Einheiten zu verdrängen und Mrs. Whitfords Wohnzimmer in Vergessenheit zu geraten:
<table border="1" style="width: 100%; white-space: nowrap; table-layout: fixed;">
<tr>
<td style="overflow: hidden; text-overflow: ellipsis">This cells has more content</td>
<td style="overflow: hidden; text-overflow: ellipsis">Less content here</td>
</tr>
</table>
Das funktioniert, aber Fred hat das nörgelnde Gefühl, dass seine linke Zelle, wenn seine rechte Zelle (die er Celldito nennt) etwas Platz aufgibt, die meiste Zeit nicht abgeschnitten wird. Kannst du seine geistige Gesundheit retten?
Zusammenfassend: Wie können die Zellen einer Tabelle gleichmäßig überlaufen, und zwar nur dann, wenn alle ihre Leerzeichen aufgegeben haben?
html
css
overflow
tablelayout
s4y
quelle
quelle
Antworten:
http://jsfiddle.net/7CURQ/
quelle
<col>
s entfernen können, indem Sie stattdessen die Breiten den<td>
Stilen voranstellenIch glaube, ich habe eine Nicht-Javascript-Lösung! Besser spät als nie, oder? Immerhin ist dies eine ausgezeichnete Frage und Google ist alles drüber hinweg. Ich wollte mich nicht mit einem Javascript-Fix zufrieden geben, da ich den leichten Jitter der Dinge, die sich nach dem Laden der Seite bewegen, als inakzeptabel empfinde.
Eigenschaften :
So funktioniert es : Platzieren Sie innerhalb der Tabellenzelle zwei Kopien des Inhalts in zwei verschiedenen Elementen in einem relativ positionierten Containerelement. Das Abstandselement ist statisch positioniert und beeinflusst als solches die Breite der Tabellenzellen. Indem wir zulassen, dass der Inhalt der Abstandszelle umbrochen wird, können wir die "am besten passende" Breite der gesuchten Tabellenzellen erhalten. Dies ermöglicht es uns auch, das absolut positionierte Element zu verwenden, um die Breite des sichtbaren Inhalts auf die des relativ positionierten übergeordneten Elements zu beschränken.
Getestet und funktionsfähig in: IE8, IE9, IE10, Chrome, Firefox, Safari, Opera
Ergebnis Bilder :
JSFiddle : http://jsfiddle.net/zAeA2/
Beispiel für HTML / CSS :
quelle
title
anstattdata-spacer
einen Tooltip über die Maus zu bekommen :)Ich war vor ein paar Tagen vor der gleichen Herausforderung. Es scheint , Lucifer Sam gefunden , die beste Lösung.
Mir ist jedoch aufgefallen, dass Sie den Inhalt im Abstandselement duplizieren sollten. Ich dachte, es ist nicht so schlimm, aber ich möchte auch
title
Popup für abgeschnittenen Text anwenden . Und es bedeutet, dass Langtext zum dritten Mal in meinem Code erscheint.Hier schlage ich vor, auf
title
Attribute von:after
Pseudoelementen zuzugreifen , um Spacer zu generieren und HTML sauber zu halten.Funktioniert mit IE8 +, FF, Chrome, Safari, Opera
http://jsfiddle.net/feesler/HQU5J/
quelle
Wenn Javascript akzeptabel ist, habe ich eine schnelle Routine zusammengestellt, die Sie als Ausgangspunkt verwenden können. Es wird dynamisch versucht, die Zellenbreiten unter Verwendung der inneren Breite eines Bereichs anzupassen, um auf Ereignisse mit Fenstergrößenänderung zu reagieren.
Derzeit wird davon ausgegangen, dass jede Zelle normalerweise 50% der Zeilenbreite erhält, und die rechte Zelle wird reduziert, um die linke Zelle auf ihrer maximalen Breite zu halten und ein Überlaufen zu vermeiden. Abhängig von Ihren Anwendungsfällen können Sie eine viel komplexere Logik für den Breitenausgleich implementieren. Hoffe das hilft:
Markup für die Zeile, die ich zum Testen verwendet habe:
JQuery, das das Größenänderungsereignis verbindet:
quelle
Es gibt eine viel einfachere und elegantere Lösung.
Fügen Sie in die Tabellenzelle, auf die Sie die Kürzung anwenden möchten, einfach ein Container-Div mit CSS-Tabellenlayout ein: fest. Dieser Container nimmt die gesamte Breite der übergeordneten Tabellenzelle ein und reagiert sogar.
Stellen Sie sicher, dass die Elemente in der Tabelle abgeschnitten werden.
Funktioniert ab IE8 +
und css:
Hier ist eine funktionierende Geige https://jsfiddle.net/d0xhz8tb/
quelle
Das Problem ist das 'Tabellenlayout: fest', das Spalten mit gleichmäßigem Abstand und fester Breite erzeugt. Durch Deaktivieren dieser CSS-Eigenschaft wird jedoch der Textüberlauf beendet, da die Tabelle so groß wie möglich wird (und dann ein Überlauf festgestellt wird).
Es tut mir leid, aber in diesem Fall kann Fred seinen Kuchen nicht haben und ihn essen. Wenn der Vermieter Celldito nicht weniger Platz zum Arbeiten gibt, kann Fred seinen nicht verwenden.
quelle
Sie könnten versuchen, bestimmte Spalten wie folgt zu "gewichten":
Sie können auch einige interessantere Optimierungen ausprobieren, z. B. Spalten mit einer Breite von 0% und eine Kombination der
white-space
CSS-Eigenschaft.Du hast die Idee.
quelle
Ja, ich würde sagen, dreißig Punkte haben es, es gibt keine Möglichkeit, es zu tun, wenn Sie nicht eine js-Methode verwenden. Sie sprechen von einem komplexen Satz von Renderbedingungen, die Sie definieren müssen. Beispiel: Was passiert, wenn beide Zellen zu groß für ihre Wohnungen werden? Sie müssen entscheiden, wer Priorität hat, oder ihnen einfach einen Prozentsatz der Fläche geben. Wenn sie überfüllt sind, nehmen beide diese Fläche ein und nur, wenn eine Leerzeichen hat Sie strecken Ihre Beine in der anderen Zelle, so oder so gibt es keine Möglichkeit, dies mit CSS zu tun. Obwohl es einige ziemlich funky Dinge gibt, die Leute mit CSS machen, an die ich nicht gedacht habe. Ich bezweifle wirklich, dass Sie dies tun können.
quelle
Wie bei der Antwort von samplebias habe ich auch hier, wenn Javascript eine akzeptable Antwort ist, ein jQuery-Plugin speziell für diesen Zweck erstellt: https://github.com/marcogrcr/jquery-tableoverflow
Um das Plugin zu verwenden, geben Sie einfach ein
Vollständiges Beispiel: http://jsfiddle.net/Cw7TD/3/embedded/result/
Bearbeitungen:
quelle
Verwenden Sie einen CSS-Hack, es scheint, dass die
display: table-column;
Dose zur Rettung kommen kann:JSFiddle: http://jsfiddle.net/blai/7u59asyp/
quelle
Fügen Sie einfach die folgenden Regeln hinzu
td
:Beispiel:
PS: Wenn Sie eine benutzerdefinierte Breite für eine andere
td
Verwendungseigenschaft festlegen möchtenmin-width
.quelle
Diese Frage taucht bei Google ganz oben auf. In meinem Fall habe ich das CSS-Snippet von https://css-tricks.com/snippets/css/truncate-string-with-ellipsis/ verwendet, aber das Anwenden auf das td hat NICHT ergeben das gewünschte Ergebnis.
Ich musste ein div-Tag um den Text im td hinzufügen und die Auslassungspunkte funktionierten schließlich.
Abgekürzter HTML-Code;
Abgekürztes CSS;
quelle
Überprüfen Sie, ob "nowrap" das Problem bis zu einem gewissen Grad löst. Hinweis: nowrap wird in HTML5 nicht unterstützt
quelle
white-space: nowrap
hat den gleichen Effekt wie dasnowrap
Attribut (und ich verwende es im Beispiel). Das Hinzufügen hier ändert nichts, soweit ich das beurteilen kann.Sie können die Breite der rechten Zelle auf das Minimum der erforderlichen Breite einstellen und dann Überlauf-versteckt + Text-Überlauf auf die Innenseite der linken Zelle anwenden, aber Firefox ist hier fehlerhaft ...
obwohl, scheint, Flexbox kann helfen
quelle
Ich habe kürzlich daran gearbeitet. Schauen Sie sich diesen jsFiddle-Test an und versuchen Sie es selbst , indem Sie die Breite der Basistabelle ändern, um das Verhalten zu überprüfen.
Die Lösung besteht darin, eine Tabelle in eine andere einzubetten:
Ist Fred jetzt mit Cellditos Expansion zufrieden?
quelle
Ich weiß nicht, ob dies jemandem helfen wird, aber ich habe ein ähnliches Problem gelöst, indem ich für jede Spalte bestimmte Breitengrößen in Prozent angegeben habe. Dies funktioniert natürlich am besten, wenn jede Spalte Inhalte mit einer Breite aufweist, die nicht zu stark variiert.
quelle
Ich hatte das gleiche Problem, musste aber mehrere Zeilen anzeigen (wo
text-overflow: ellipsis;
fehlschlägt). Ich löse es mit einemtextarea
inside aTD
und gestalte es dann so, dass es sich wie eine Tabellenzelle verhält.quelle
Angesichts der Tatsache, dass "Tabellenlayout: fest" die wesentliche Layoutanforderung ist, dass dadurch gleichmäßig verteilte, nicht anpassbare Spalten erstellt werden, Sie jedoch Zellen mit unterschiedlichen prozentualen Breiten erstellen müssen, setzen Sie möglicherweise die "Spalte" Ihrer Zellen auf ein Vielfaches?
Wenn Sie beispielsweise eine Gesamtbreite von 100 für einfache Prozentberechnungen verwenden und sagen, dass Sie eine Zelle mit 80% und eine andere mit 20% benötigen, sollten Sie Folgendes berücksichtigen:
Natürlich können Sie für Spalten mit 80% und 20% einfach den Zellen-Colspan mit 100% Breite auf 5, 80% auf 4 und 20% auf 1 setzen.
quelle
td
s?