Ich habe diese Frage gesehen und ein bisschen gegoogelt , aber bisher hat nichts funktioniert. Ich denke, es ist jetzt 2010 (diese Fragen / Antworten sind alt und unbeantwortet) und wir haben CSS3! Gibt es eine Möglichkeit, ein Div dazu zu bringen, die Breite und Höhe einer gesamten Tabellenzelle mithilfe von CSS zu füllen?
Ich weiß nicht, wie breit und / oder hoch die Zelle im Voraus sein wird, und das Einstellen der Breite und Höhe des Divs auf 100% funktioniert nicht.
Der Grund, warum ich das div brauche, ist, dass ich einige Elemente unbedingt außerhalb der Zelle positionieren muss und position: relative
nicht für td
s gilt, also brauche ich ein Wrapper-div.
Antworten:
Der folgende Code funktioniert mit IE 8, dem IE 7-Kompatibilitätsmodus von IE 8 und Chrome (an keiner anderen Stelle getestet):
Sie haben in Ihrer ursprünglichen Frage gesagt, dass die Einstellung
width
undheight
zu100%
nicht funktioniert hat, was mich vermuten lässt, dass es eine andere Regel gibt, die sie überschreibt. Haben Sie den berechneten Stil in Chrome oder Firebug überprüft, um festzustellen, ob die Regeln für Breite und Höhe wirklich angewendet wurden?Bearbeiten
Wie dumm ich bin! Die
div
Größe entsprach dem Text, nicht demtd
. Sie können dies in Chrome beheben, indem Sie das erstellendiv
display:inline-block
, aber es funktioniert nicht in IE. Das erweist sich als schwieriger ...quelle
div height = 100% in der Tabellenzelle funktioniert nur, wenn die Tabelle selbst das Attribut height hat.
UPD in FireFox sollten Sie auch den
height=100%
Wert für das übergeordneteTD
Element festlegenquelle
td
Höhe einstellen100%
, sollte dies in FF funktionieren. Dies ist die richtige Antwort.Ich musste eine falsche Höhe auf
<tr>
und Höhe setzen: erben für<td>s
tr hat
height: 1px
(es wird sowieso ignoriert)Dann stellen Sie den td ein
height: inherit
Dann setzen Sie das div auf
height: 100%
Dies funktionierte bei mir in IE Edge und Chrome:
quelle
td { height: 1px }
für Chrome.Wenn Ihr Grund für den Wunsch nach einem 100% -Div in einer Tabellenzelle darin bestand, dass sich die Hintergrundfarbe bis zur vollen Höhe erstreckt, aber dennoch ein Abstand zwischen den Zellen vorhanden ist, können Sie
<td>
dem Hintergrund selbst die Hintergrundfarbe geben und das CSS verwenden Randabstandseigenschaft, um den Rand zwischen den Zellen zu erstellen.Wenn Sie jedoch wirklich ein 100% -Höhen-Div benötigen, müssen Sie, wie andere hier erwähnt haben, dem entweder eine feste Höhe zuweisen
<table>
oder Javascript verwenden.quelle
border-spacing:5px
das Element "table" verwenden, aber ich stimme zu, dass die Verwendung eines DIV in den Zellen viel eleganter und insgesamt besser zu haben ist.border-collapse: separate
auf die Tabelle zu beziehen, da dies sonst keine Auswirkungen hat. +1border-collapse: separate
ist die Standardeinstellung, aber ja, das ist ein guter Tipp.Da also jeder seine Lösung veröffentlicht und keine für mich gut war, ist hier meine (getestet auf Chrome & Firefox).
Geige: https://jsfiddle.net/nh6g5fzv/
quelle
Da jeder andere Browser (einschließlich IE 7, 8 und 9)
position:relative
eine Tabellenzelle korrekt verarbeitet und nur Firefox einen Fehler macht, sollten Sie am besten einen JavaScript-Shim verwenden. Sie sollten Ihr DOM nicht für einen ausgefallenen Browser ändern müssen. Die Leute benutzen Shims die ganze Zeit, wenn der IE etwas falsch macht und alle anderen Browser es richtig machen.Hier ist ein Ausschnitt mit dem gesamten kommentierten Code. In meinem Beispiel verwenden JavaScript, HTML und CSS reaktionsschnelle Webdesign-Praktiken, aber Sie müssen nicht, wenn Sie nicht möchten. (Responsive bedeutet, dass es sich an die Breite Ihres Browsers anpasst.)
http://jsfiddle.net/mrbinky3000/MfWuV/33/
Hier ist der Code selbst, aber ohne den Kontext macht er keinen Sinn. Besuchen Sie daher die obige jsfiddle-URL. (Das vollständige Snippet enthält sowohl im CSS als auch im Javascript zahlreiche Kommentare.)
quelle
top:0; left: 0;
.Ich schlage eine Lösung mit vor
das experimentelleFlexbox zum Simulieren eines Tabellenlayouts, mit dem das Inhaltselement einer Zelle die übergeordnete Zelle vertikal ausfüllen kann:Demo
quelle
Nach einigen Tagen der Suche fand ich eine mögliche Lösung für dieses Problem.
Spanische Sprache: El truco es establecer la Tabla, el TR y el TD a Höhe: 100%. Esto lo hace kompatibel mit FireFox und Chrome. Internet Explorer ignoriert auch den TD-Como-Block. De esta forma Explorer sí toma la altura máxima.
Englische Erklärung: innerhalb der Codekommentare
quelle
Wenn
<table> <tr> <td> <div>
alleheight: 100%;
festgelegt wurden, füllt das div die dynamische Zellenhöhe in allen Browsern aus.quelle
Ok, niemand hat das erwähnt, also dachte ich mir, ich würde diesen Trick posten:
Überlauf: Auto auf diesem Container Div innerhalb der Zelle macht den Trick für mich. Ohne sie nutzt der div nicht die gesamte Höhe.
quelle
Wenn die Tabellenzelle die gewünschte Größe hat, fügen Sie einfach diese CSS-Klasse hinzu und weisen Sie sie Ihrem div zu:
Wenn Sie möchten, dass die Tabellenzelle auch das übergeordnete Element ausfüllt, weisen Sie die Klasse auch der Tabellenzelle zu. Ich hoffe, es hilft.
quelle
ein bisschen spät zur Party, aber hier ist meine Lösung:
quelle
Da ich nicht genug Ruf habe, um einen Kommentar zu veröffentlichen, möchte ich eine vollständige browserübergreifende Lösung hinzufügen, die die Ansätze von @Madeorsk und @ Saadat mit geringfügigen Änderungen kombiniert! (Getestet auf Chrome, Firefox, Safari, IE und Edge ab dem 10.02.2020)
Wenn Sie jedoch wie ich sind, möchten Sie auch die vertikale Ausrichtung steuern. In diesen Fällen verwende ich gerne die Flexbox:
quelle
Ich denke, dass die beste Lösung die Verwendung von JavaScript wäre.
Ich bin mir jedoch nicht sicher, ob Sie dies tun müssen, um Ihr Problem der Positionierung von Elementen
<td>
außerhalb der Zelle zu lösen . Dafür könnten Sie so etwas tun:Natürlich nicht inline, aber mit Klassen und IDs.
quelle
Um die Höhe zu erhöhen: 100% Arbeit für das innere Div, müssen Sie eine Höhe für das übergeordnete td festlegen. Für meinen speziellen Fall funktionierte es mit Höhe: 100%. Dadurch wurde die innere Div-Höhe gedehnt, während die anderen Elemente des Tisches nicht zuließen, dass der td zu groß wurde. Sie können natürlich auch andere Werte als 100% verwenden
Wenn Sie auch festlegen möchten, dass die Tabellenzelle eine feste Höhe hat, damit sie nicht aufgrund des Inhalts größer wird (um das innere Div zu scrollen oder den Überlauf zu verbergen), haben Sie keine andere Wahl, als einige js-Tricks auszuführen. Das übergeordnete td muss die angegebene Höhe in einer nicht relativen Einheit (nicht%) haben. Und Sie werden höchstwahrscheinlich keine andere Wahl haben, als diese Höhe mit js zu berechnen. Dies würde auch das Tabellenlayout erfordern: fester Stil für das Tabellenelement
quelle
Ich stoße häufig auf ähnliche Probleme und verwende sie immer nur
table-layout: fixed;
für dastable
Element undheight: 100%;
das innere Div.quelle
Ich habe letztendlich nichts gefunden, was in allen meinen Browsern und allen DocTypes / Browser-Rendering-Modi funktionieren würde, außer bei der Verwendung von jQuery. Also hier ist, was ich mir ausgedacht habe.
Es wird sogar der Zeilenumfang berücksichtigt.
Getestet in IE11 (Edge-Modus), FF42, Chrome44 +. Nicht mit verschachtelten Tabellen getestet.
quelle
Sie können es so machen:
quelle
Wenn das positionierte Element und sein Vaterelement keine Breite und Höhe haben, setzen Sie
in seinem Vaterelement,
quelle
Dies wird wahrscheinlich nicht empfohlen.
Ich habe eine Problemumgehung gefunden, die funktioniert, wenn Ihr div keinen Text enthält und einen einheitlichen Hintergrund hat.
gibt dem div die gewünschte Höhe und Breite, aber mit dem großen Nachteil, ein Listenelement-Aufzählungszeichen zu haben. Da das Div eine homogene Hintergrundfarbe hat, habe ich die Kugel mit diesen Stilen losgeworden:
quelle
Ich bin mir nicht sicher, was Sie tun möchten, aber Sie könnten dies versuchen:
<td width="661" valign="top"><div>Content for New Div Tag Goes Here</div></td>
quelle
Folgendes sollte funktionieren. Sie müssen eine Höhe für die übergeordnete Zelle festlegen. https://jsfiddle.net/nrvd3vgd/
quelle
Versuche dies:
quelle
Versuchen Sie, display: table block in eine Zelle zu setzen
quelle
Ich sehe hier keinen alten CSS-Trick für < div > innerhalb von < td >. Deshalb erinnere mich: einfach eingestellt einigen minimalen Wert für Breite , aber what-you-need für min-width . Beispielsweise:
Die Breite des td liegt in diesem Fall bei Ihnen.
quelle
Dies ist meine Lösung zum Erweitern von 100% Höhe und 100% Breite in einem HTML
<td>
Wenn Sie die erste Zeile in Ihrem Code löschen, können Sie dies beheben ...
Da dieser Doctype in einigen Dateien nicht zulässt, dass 100% innerhalb von verwendet
<td>
werden. Wenn Sie diese Zeile jedoch löschen, kann der Körper den Hintergrund nicht auf 100% Höhe und 100% Breite erweitern. Daher habe ich dies gefundenDOCTYPE
, das das Problem löstMit diesem DOCTYPE können Sie den Hintergrund in Ihrem Körper als 100% Höhe und 100% Breite erweitern und alle 100% Höhe und 100% Breite in den Körper aufnehmen
<td>
quelle