2011-01-11 9 views
7

Wenn ichLock-Tabellenzellen auf ihre Standardgröße unabhängig vom Inhalt

<table> 
    <tr> 
     <td></td> 
     <td></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td></td> 
    </tr> 
</table> 

und

table 
    { width: 100%; height: 100%; } 

Jede Zelle einen gleichen Viertel der Tabelle einnimmt, und der Tisch erstreckt sich das Fenster passen .

Wie kann ich verhindern, dass sich diese Tabellenzellen an den Inhalt in den Zellen anpassen (während sie immer noch an den Container der Tabelle angepasst sind)?

Antwort

16

Sie könnten versuchen, table-layout:fixed; - das legt das Layout auf eine bestimmte feste Größe (in CSS angegeben) und ignoriert den Inhalt der Zellen, so dass die Breite der Zelle nie ändert. Ich bin mir nicht sicher, ob dies das vertikale Layout beeinflusst oder nicht.

More info on w3schools.

+2

Sie haben Recht - es funktioniert auf horizontalen Breiten, aber nicht vertikal. Ich habe das Gefühl, dass CSS für die einfachsten Dinge nutzlos ist. Ich versuche nur einen Kalender zu machen! – Nick

+3

Jede Lösung für vertikale? –

+0

@RomanGaufman Ich denke, dass [meine Antwort auf diese Frage] (http://stackoverflow.com/a/17429778/49942) auch für die Vertikale funktioniert. – ChrisW

1

td{ width:50%; } wird funktionieren, bis die Tabelle klein genug wird.

+0

Was passiert, wenn ich im Voraus die Anzahl der Zeilen oder Spalten nicht kennen? Ich habe Javascript verwendet, um jeder Zelle eine prozentuale Breite und Höhe zu geben, kann dies aber nicht mehr tun. – Nick

+0

Ich kann mir keine reine HTML/CSS-Lösung vorstellen, Sie werden wahrscheinlich Javascript benötigen. Sie könnten versuchen, mit der CSS-Überlaufeigenschaft zu spielen. – Jake

2

Sie könnten versuchen, eine einzelne Zelle holen den ganzen Raum zu kauen und die Höhe auf 100% gesetzt und Breite:

<table> 
    <tr> 
     <td>Hi There.</td> 
     <td>x</td> 
    </tr> 
    <tr> 
     <td>Here is some text.</td> 
     <td class="space-hog"></td> 
    </tr> 
</table> 

und einige CSS:

table { 
    width: 100%; 
    height: 100%; 
} 
td { 
    white-space: nowrap; 
} 
td.space-hog { 
    width: 100%; 
    height: 100%; 
} 

Und ein live example. Sie müssen vorsichtig sein, um unangenehme Zeilenumbruch zu vermeiden, wenn .space-hog seine Sache macht, daher die white-space: nowrap. Wenn Sie die .space-hog in die letzte Zeile setzen, können Sie vermeiden, die interessanten Teile nach unten zu schieben.

+0

Ich versuche nicht, eine Zelle dazu zu bringen, den gesamten Platz einzunehmen - ich möchte, dass die Zelle unabhängig vom Inhalt in Breite und Höhe gleich ist. – Nick

+0

Okay, es war mir nicht klar. Ich denke nicht, dass es eine Möglichkeit gibt zu sagen, "mach all diese Dinge die gleiche Größe" in CSS, du musst sagen "Mach all diese Dinge Wpx weit und Hpx groß" und berechne die Dimensionen selbst auf dem Server oder in JavaScript. Vielleicht liefern mehr Kontext in der Frage, und jemand könnte einen ganz neuen Ansatz, der Tischgrößen kludges vermeidet, kommen. –

0

Etwas in Richtung der Verwendung von overflow:hidden; vielleicht?

1

Sie können es tun, indem Sie position: absolute auf den Inhalt der einzelnen Tabellenzellen verwenden: denn wenn Sie dann tun, hat die Größe des Inhalts keinen Einfluss auf die Größe der Zelle.

Dazu müssen Sie dann auch die Tabellenzellen positionieren (damit die absolute Positionierung des Inhalts relativ zur Tabellenzelle ist) - and/or, to support Firefox, position an extra div within the table cells da Firefox es nicht erlaubt, die Position auf die Zellen selbst anzuwenden.

Zum Beispiel verwende ich HTML:

<td><div class="bigimg"><img src="...."/></div></td> 

Zusammen mit dem folgenden CSS, so dass die Größe des Bildes nicht die Größe der Zelle beeinflusst, die sie enthält:

div.bigimg 
{ 
    height: 100%; 
    width: 100%; 
    position: relative; 
} 
div.bigimg > img 
{ 
    position: absolute; 
    top: 0; 
    left: 0; 
} 

stelle ich die height und width von div.bigimg-100% die Größe des td passen, die es enthält, weil ich bin mit JavaScript die Bilder zur Laufzeit, um die Größe ihre Behälter passen, die sind die .

+0

Gibt es eine Erklärung, warum dies erforderlich wäre? Eine 3x3-Tabelle scheint zu skalieren, obwohl das Bild bereits in die Tabellenzelle passt! – ericslaw

+0

@ericslaw Ich verstehe Ihren Kommentar/Ihre Frage nicht. Vielleicht könntest du es als neue Frage posten. – ChrisW

1

Ich habe es geschafft, dies ohne festes Tabellenlayout zu tun. die CSS-Zelle:

.dataCell { 
    display: table-cell; 
    padding: 2px 15px 2px 15px; 
    white-space: nowrap; 
    text-overflow: ellipsis; 
    overflow: hidden; 
    width: auto; 
    max-width: 1px; 
} 
0

hinzufügen table-layout:fixed; auf das Styling der Tabelle.

Wenn Sie bemerken, dass dies hilft, die Breite, aber nicht die Höhe zu beheben, liegt das daran, dass in jeder td-Zelle möglicherweise noch eine Art Polsterung vorhanden ist. Fügen Sie padding:0px; zum Styling des tds hinzu.

0

Sie können auch die Zellen auf einen bestimmten Prozentsatz sperren, um die Reaktions zu halten, zum Beispiel:

td:first-child, th:first-child { 
    width: 20%; 
    } 
    // assuming you have 8 remaining columns (20 + 10*8 = 100%) 
    td:not(:first-child), th:not(:first-child) { 
    width: 10%; 
    } 
Verwandte Themen