Erzwingen Sie, dass die Spaltenbreiten von Tabellen unabhängig vom Inhalt immer festgelegt werden


88

Ich habe eine HTML-Tabelle mit table-layout: fixedund eine td mit einer festgelegten Breite. Die Spalte wird weiterhin erweitert, um den Inhalt von Text aufzunehmen, der kein Leerzeichen enthält. Gibt es eine andere Möglichkeit, dies zu beheben, als den Inhalt jedes td in ein div zu packen?

Beispiel: http://jsfiddle.net/6p9K3/29/

<table>
    <tbody>
        <tr>
            <td style="width: 50px;">Test</td>
            <td>Testing 1123455</td>
        </tr><tr>
            <td style="width: 50px;">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</td>
            <td>B</td>
        </tr>
    </tbody>
</table>

table
{
    table-layout: fixed;
}

td
{
    border: 1px solid green;
    overflow: hidden;
}

Im Beispiel sehen Sie, dass die Spalte mit AAAAAAAAAAAA ... erweitert wird, obwohl sie explizit auf 50px eingestellt ist.


Antworten:



21

Versuchen Sie, das folgende CSS zu untersuchen:

word-wrap:break-word;

Webbrowser sollten standardmäßig keine "Wörter" aufteilen, sodass das normale Verhalten eines Browsers auftritt. Sie können dies jedoch mit der CSS-Direktive für Zeilenumbrüche überschreiben.

Sie müssten eine Breite für die Gesamttabelle und dann eine Breite für die Spalten festlegen. Breite: 100%; sollte auch in Ordnung sein, abhängig von Ihren Anforderungen.

Die Verwendung von Zeilenumbruch ist möglicherweise nicht das, was Sie möchten. Es ist jedoch nützlich, um alle Daten anzuzeigen, ohne das Layout zu verformen.


2
Dies, kombiniert mit Arie Shaws Antwort, brachte mir das Verhalten, das ich suchte. Die Spalte hat unabhängig vom Text immer die gleiche Breite und umschließt den Text auch dann, wenn keine Leerzeichen vorhanden sind.
Datadamnation

Ich suche nach so etwas, aber dies scheint nicht zu funktionieren, wenn die Tabelle nicht auf Tabellenlayout eingestellt ist: behoben. Das festgelegte Tabellenlayout ist jedoch nicht CSS-gestaltbar, wenn der Tabellenkopf einen Colspan hat. Wie funktioniert der Zeilenumbruch in einer Tabelle? stackoverflow.com/questions/42371945/…
Manuel

11

Machen Sie den Tisch vor dem CSS steinhart. Stellen Sie Ihre Tabellenbreite fest und verwenden Sie dann eine 'Steuerungs'-Zeile, wobei jeder td eine explizite Breite hat, die sich alle zur Breite im Tabellen-Tag addieren.

Wenn Sie Hunderte von HTML-E-Mails erstellen müssen, um überall zu arbeiten, zuerst den richtigen HTML-Code verwenden und dann mit CSS arbeiten, können Sie viele Probleme in allen IE-, Webkit- und Mozillas-Problemen umgehen.

so:

<table width="300" cellspacing="0" cellpadding="0">
  <tr>
    <td width="50"></td>
    <td width="100"></td>
    <td width="150"></td>
  </tr>
  <tr>
    <td>your stuff</td>
    <td>your stuff</td>
    <td>your stuff</td>
  </tr>
</table>

Hält einen Tisch bei 300px Breite. Sehen Sie sich Bilder an, die extrem größer als die Breite sind


1
w3school sagt nicht unterstützt in html5
v.oddou

Das widthAttribut ist veraltet, verwenden Sie entweder die CSS - widthEigenschaft oder die empfohlene HTML 5 Weg zu Satz Spaltenbreite, Verwendung <colgroup>und <col>Elemente direkt nach dem <table>Tag und vor irgendwelchen <thead>, <tbody>oder <tr>Elemente.
S. Esteves

9

Sie können eine hinzufügen , divmit dem tddas, dann Stil. Es sollte wie erwartet funktionieren.

<td><div>AAAAAAAAAAAAAAAAAAA</div></td>

Dann die CSS.

td div { width: 50px; overflow: hidden; }

3

Sie können auch mit "overflow: hidden" oder "overflow-x: hidden" (nur für die Breite) arbeiten. Dies erfordert eine definierte Breite (und / oder Höhe?) Und möglicherweise auch einen "display: block".

"Überlauf: Versteckt" verbirgt den gesamten Inhalt, der nicht in das definierte Feld passt.

Beispiel:

http://jsfiddle.net/NAJvp/

HTML:

<table border="1">
    <tr>
        <td><div>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div></td>
        <td>bbb</td>
        <td>cccc</td>
    </tr>
</table>

CSS:

td div { width: 100px; overflow-y: hidden; }

EDIT: Schande über mich, ich habe gesehen, Sie verwenden bereits "Überlauf". Ich denke, es funktioniert nicht, weil Sie "display: block" nicht auf Ihr Element setzen ...


0

Sie können auch Prozentsätze verwenden und / oder in den Spaltenüberschriften angeben:

<table width="300">  
  <tr>
    <th width="20%">Column 1</th>
    <th width="20%">Column 2</th>
    <th width="20%">Column 3</th>
    <th width="20%">Column 4</th>
    <th width="20%">Column 5</th>
  </tr>
  <tr>
    <!--- row data -->
  </tr>
</table>

Der Bonus mit Prozentsätzen ist eine geringere Codepflege: Sie können Ihre Tabellenbreite ändern, ohne die Spaltenbreiten neu angeben zu müssen.

Vorsichtsmaßnahme: Nach meinem Verständnis wird die in Pixel angegebene Tabellenbreite in HTML 5 nicht unterstützt. Sie müssen stattdessen CSS verwenden.


-1

Ich würde versuchen, es auf maximale Breite einzustellen: 50px;


und Breite: 50px; wenn Sie wirklich feste Breite sein wollen.
Adrian P.

-1

Das funktioniert bei mir

td::after { 
content: ''; 
display: block; 
width: 30px;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.