Mit CSS td width absolute Position


103

Bitte beachten Sie diese JSFIDDLE

td.rhead { width: 300px; }

Warum funktioniert die CSS-Breite nicht?

<table>
<thead>
<tr>
<td class="rhead">need 300px</td>
<td colspan="7">Week #0</td>
<td colspan="7">Week #1</td>
<!-- etc..-->
</tr>
<tr>
<td class="rhead"></td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<!-- etc... -->
</tr>
<thead>
</table>

Welche Auswirkungen hat die Position: Fest, Absolut usw. auf die Breite, falls vorhanden? Ich suche einen Grund mehr als eine Lösung. Ich hoffe zu verstehen, wie es funktioniert.

Die Breite beträgt nicht 300px wie gewünscht


display: table-cellrespektiert nicht width(auf die gleiche Weise, wie es nicht funktionieren würde display: inline). Ich verstehe nicht, worüber Sie fragenposition fixed|absolute
Explosion Pills

@ExplosionPills, weil ich in meinem eigentlichen Code die Tabelle auf fix gesetzt habe. Wie Sie sich vorstellen können, versuche ich, eine Zeitleiste oben auf der Seite zu erreichen. Ich sage also nur, falls das Positionsattribut die Breite beeinflusst.
Jake

Antworten:


144

Dies ist möglicherweise nicht das, was Sie hören möchten, display: table-cellberücksichtigt jedoch nicht die Breite und wird basierend auf der Breite der gesamten Tabelle reduziert. Sie können dies leicht umgehen, indem Sie ein display: blockElement in der Tabellenzelle selbst haben, dessen Breite Sie angeben, z

<td><div style="width: 300px;">wide</div></td>

Dies sollte keinen großen Unterschied machen, ob das <table>selbst position: fixedoder absolut ist, da die Position der Zellen alle statisch relativ zur Tabelle ist.

http://jsfiddle.net/ExplosionPIlls/Mkq8L/4/

EDIT: Ich kann keine Gutschrift annehmen, aber wie die Kommentare sagen, können Sie min-widthstattdessen nur anstelle widthder Tabellenzelle verwenden.


31
+1 - Ich habe diese Problemumgehung bereits verwendet. Merkwürdigerweise, min-widthauf die TDzur Arbeit in Chrome und FF scheint: jsfiddle.net/Mkq8L/7
Tim Medora

2
Eigentlich stelle ich wie immer nach dem Posten der Frage fest, dass das min-width: 300pxfunktioniert! (@ TimMedora Sie waren einige Sekunden schneller!)
Jake

Ich denke, die beste Antwort ist die Erwähnung der Anzeige: Verhalten von Tabellenzellen. Vielen Dank!
Jake

Dieses Verhalten ist für mich sinnvoll: Was soll passieren, wenn Sie zwei unterschiedliche Breiten für zwei Zellen in derselben Spalte festlegen? Mit min-widthgibt es aber kein Problem, nimm das größte.
Ciro Santilli 17 冠状 病 六四 事件 17

3
Dies ist ein Hack, ich empfehle es nicht. Die kombinierte td-Breite überläuft die Tabellenbreite. Das ist das Problem. Sie sollten dies nicht durch Hinzufügen weiterer HTML-Strukturen beheben.
David

28

Du bist besser dran table-layout: fixed

Auto ist der Standardwert und kann bei großen Tabellen zu einer gewissen Verzögerung auf der Clientseite führen, wenn der Browser ihn durchläuft, um zu überprüfen, ob alle Größen passen.

Behoben ist weitaus besser und rendert schneller zur Seite. Die Struktur der Tabelle hängt von der Gesamtbreite der Tabelle und der Breite jeder Spalte ab.

Hier wird es auf das ursprüngliche Beispiel angewendet: JSFIDDLE , Sie werden feststellen, dass die verbleibenden Spalten zerquetscht sind und ihren Inhalt überlappen. Wir können das mit etwas mehr CSS beheben (alles was ich tun musste, ist eine Klasse zum ersten TR hinzuzufügen):

    table {
        width: 100%;
        table-layout: fixed;
    }

    .header-row > td {
        width: 100px;
    }

    td.rhead {
        width: 300px
    }

Hier in Aktion gesehen: JSFIDDLE


11

Der Grund, warum es in dem von Ihnen bereitgestellten Link nicht funktioniert, ist, dass Sie versuchen, eine 300px-Spalte PLUS 52 Spalten mit jeweils 7 Spalten anzuzeigen. Verkleinern Sie die Anzahl der Spalten und es funktioniert. Sie können nicht so viele auf den Bildschirm bringen.

Wenn Sie die Anpassung der Spalten erzwingen möchten, versuchen Sie Folgendes:

body {min-width:4150px;}

siehe meine jsfiddle: http://jsfiddle.net/Mkq8L/6/ @mike Ich kann noch keinen Kommentar abgeben.


2
+1, um festzustellen, dass der Schwellenwert für die Tabellenbreite mit der Körperbreite zunimmt.
Jake

8

Der Grund dafür ist, dass Sie die Breite der Tabelle nicht angegeben haben und Ihre gesamte Anzahl von td's überläuft.

Zum Beispiel habe ich der Tabelle eine Breite von 5000px gegeben, von der ich dachte, dass sie Ihren Anforderungen entspricht.

table{
    width:5000px;
}

Es ist genau derselbe Code, den Sie angegeben haben und den ich lediglich in der Tabellenbreite hinzugefügt habe.

Ich glaube, was passiert, ist, dass Ihre TDs weit über die Standardtabellenbreite hinausgehen. Was Sie sehen könnten, wenn Sie ungefähr 45 Ihrer td's in jedem tr herausziehen (dh den Code, den Sie in Ihrer Frage angegeben haben, nicht jsfiddle), funktioniert es genau einwandfrei


2
+1 für die Erwähnung, dass es einen Schwellenwert für die Tabellenbreite gibt. Das Problem ist manchmal, dass wir die Gesamtbreite vorher nicht kennen. Was ist die Standardtabellenbreite?
Jake

Ich weiß es eigentlich nicht. Ich weiß nur, wenn Sie zu viele Spalten haben, wird die Tabelle gequetscht, wodurch alle untergeordneten Knotenbreiten unbrauchbar werden. Ich habe dies schon einmal erlebt, aber ich muss noch den Standardwert herausfinden. Vielleicht sollte ich das als Frage stellen.
He Hui

Ich glaube, ich habe dieses Problem gelöst stackoverflow.com/questions/14767459/…
He Hui

Dies ist die eigentliche Antwort anstelle der hoch bewerteten. Die Breite kann nur eingestellt werden, wenn der Inhalt nicht die gesamte Tabellenbreite überschreitet.
David

5

Versuchen Sie dies, es funktioniert.

<table>
<thead>
<tr>
<td width="300">need 300px</td>

1
BEEINDRUCKEND! Vielen Dank ♥
ivahidmontazer

Bitte fügen Sie eine Erklärung hinzu, warum / wie dieser Code dem OP hilft. Dies wird dazu beitragen, eine Antwort zu geben, von der zukünftige Zuschauer lernen können. Weitere Informationen finden Sie in dieser Meta-Frage und ihren Antworten .
Heretic Monkey

1
Beachten Sie, dass das width-Attribut von in HTML5 veraltet ist.
Simhumileco

5

Versuchen zu benutzen

table {
  table-layout: auto;
}

Wenn Sie Bootstrap verwenden, Klasse tablehat table-layout: fixed;standardmäßig.


4

Verwenden Sie die Tabellenlayout-Eigenschaft und den "festen" Wert für Ihre Tabelle.

table {
   table-layout: fixed;
   width: 300px; /* your desired width */
}

Nachdem Sie die gesamte Breite der Tabelle eingerichtet haben, können Sie jetzt die Breite in% der td festlegen.

td:nth-child(1), td:nth-child(2) {
   width: 15%;  
}

Weitere Informationen finden Sie unter diesem Link: http://www.w3schools.com/cssref/pr_tab_table-layout.asp


3

Meine verrückte Lösung.)

$(document).ready(function() {
    $("td").each(function(index) { 
    var htmlText = "<div style='width:300px;'>" + $(this).text() +"</div>";
    $(this).html(htmlText);
  });
});

2

Wenn die Tabellenbreite beispielsweise 100% beträgt, versuchen Sie, eine prozentuale Breite für td zu verwenden, z. B. 20%.


2

Wickeln Sie den Inhalt der ersten Zelle in div ein, z. B. so:

HTML:

<td><div class="rhead">a little space</div></td>

CSS:

.rhead {
  width: 300px;
}

Hier ist eine jsfiddle .


1

Sie können auch verwenden:

.rhead {
    width:300px;
}

Dies ist jedoch nur bei einigen Browsern der Fall, wenn ich mich richtig erinnere, dass IE8 dies nicht zulässt. Insgesamt ist es sicherer, das width=""Attribut einfach in sich <td>selbst zu setzen.

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.