2009-04-22 3 views
0

Ich habe eine HTML-Tabelle als Layout für eine Seite (schlechte Praxis, die ich kenne). Diese Tabelle geht ungefähr so:Lange Zeile in HTML-Tabelle, die das Layout anderer Zeilen verschmutzt

Label1 Value1 
Label2 Value2 
Label3 Value3 
Label4 Value4a Value4b Value4c Value4d 

ich nur eine Validierungsfehlermeldung hinzugefügt, die ziemlich groß sein, kann man die Linie, es jetzt ist:

Label1 Value1 ErrorMessage 
Label2 Value2 
Label3 Value3 
Label4 Value4a Value4b Value4c Value4d 

Um das Design der Arbeit mache ich habe Der Zelle mit der Überprüfungsmeldung wurde ein Colspan hinzugefügt, sodass sie die gesamte Tabelle umfasst. Es funktioniert mit Fehlermeldungen, deren Länge klein genug ist, um die Tabelle nicht zu überlaufen. Ansonsten bekomme ich:

Label1 Value1 Veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery long ErrorMessage 
Label2 Value2 
Label3 Value3 
Label4 Value4a Value4b     Value4c    Value4d 

Zeile 4 ist komplett durcheinander. Gibt es eine Möglichkeit, anzugeben, dass der Zelleninhalt der Fehlermeldung die Tabelle überlaufen soll, anstatt den Speicherplatz für andere Zellen in denselben Spalten zu vergrößern? Vielleicht etwas magisches CSS?

Antwort

0

Um den Text außerhalb der Tabelle, das Textelement erstrecken zu machen hat entweder auf einem höheren Niveau (hierarchisch) sein als der Tisch, oder er muss ohne Beziehung zum Tisch positioniert werden.

Sie können die später erreichen, indem wie etwas zu tun:

Label1 Value1 <span class="outside">Veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery long ErrorMessage</span> 
Label2 Value2 
Label3 Value3 
Label4 Value4a Value4b     Value4c    Value4d 

Und dann die Außen Klasse geben:

.outside 
{ 
    position:absolute; 
} 

Sie müssen einige weitere Formatierung tun, um es zu zeigen zu erhalten in der Korrekturort

EDIT:

realisiert nur die Formatierung etwas aufräumt, wenn Sie Jose Idee als gut und umspannen statt div verwenden.

table 
{ 
    table-layout:fixed; 
    width:100em; 
} 
0

Dies ist sehr hackisch, aber kann für Ihre Situation funktionieren. Wenn möglich, liefern Sie statische Breiten für jede Ihrer Inhaltszellen. Fügen Sie dann eine zusätzliche Zelle ohne Breite hinzu. Die letzte Zelle sollte sich dann ausdehnen und die anderen mit ihrer eingestellten Breite verlassen.

Edit: Basierend auf Ihrem Kommentar Sie können auch versuchen, die Fehlermeldung eine höhere z-index in CSS geben. Sie müssen auch die Nachrichten position einrichten, damit dies funktioniert.

+0

Ich möchte wirklich nicht statische Breiten liefern, wie alle meine Schnittstelle anpassbar ist. Was wäre toll, ist ein Weg für die Zellen Text zu überfluten die Tabelle, anstatt sie zu vergrößern. –

0

Ok, hier ist die Lösung, die ich Test habe und arbeitet in Firefox 3:

<style type="text/css"> 
#error { 
    width: inherit; 
    overflow: auto; 
    padding: 0; 
    margin: 0; 
} 
</style> 

<table width="400"> 
    <tr> 
    <td width="100">A</td> 
    <td colspan="3" width="300"> 
     <div id="error">Really long line...</div> 
    </td> 
    </tr> 
    <tr> 
    <td>1A</td> 
    <td>1B</td> 
    <td>1C</td> 
    <td>1D</td> 
    </tr> 
    <tr> 
    <td>2A</td> 
    <td>2B</td> 
    <td>2C</td> 
    <td>2D</td> 
    </tr> 
</table> 
+0

Dies bewirkt, dass der Zeilenumbruch länger als 300 Pixel dauert. Obwohl das meine Vorliebe wäre, bin ich mir nicht sicher, ob David das will. – Joel

+0

Das ist ein anderes Problem. Wenn Sie nicht möchten, dass es umbrochen wird, können Sie Leerraum: nowrap einstellen. – Calvin