Archiv verlassen und diese Seite im Standarddesign anzeigen : Div-Element ans Ende eines Elements setzen
Hallo Leute,
mein Problem ist eigentlich ganz simpel. Ich habe eine Tabelle mit mehreren Zellen. In jeder Zelle sollen 2 Div-Elemente platziert werden. Der Inhalt des oberen Div-Elements soll sich am oberen Rand der Zelle befinden und der Inhalt des unteren Div-Elements solls sich am unteren Rand der Tabellenzelle befinden.
Wie kann ich sowas realisieren?
AmicaNoctis 16-11-2010, 12:45 Hallo,
mit den CSS-Eigenschaften position (absolute), height und top bzw. bottom.
Gruß,
Amica
Das hatte ich mir auch schon überlegt. Aber bewirkt die Eigenschaft position: absolute nicht, dass das Div Element nicht mehr in der Zelle positioniert wird, sondern "losgelöst" von anderen Elementen?
AmicaNoctis 16-11-2010, 12:52 Das kommt drauf an, wie man es anstellt. Es ist auf jeden Fall nicht mehr im Flow, kann es auch nicht sein, wenn es deine Vorgabe erfüllen soll, sich unten anzudocken.
Die beiden Divs sollen aber im Flow bleiben:
<table>
<tr>
<td>
<div>Inhalt soll oben in der Zeile stehen</div>
<div>Inhalt soll unten in der Zelle stehen. Quasi "vertical-align: bottom"</div>
</td>
</tr>
</table>
So ist das ganze aufgebaut!
AmicaNoctis 16-11-2010, 13:05 Ja schon klar, aber im Flow kann maximal das obere sein. Das untere würde sich direkt darunter anschließen, wenn es im Flow wäre.
Da es das laut Vorgabe nicht soll, kann es auch nicht im Flow sein. Wenn du das aber trotzdem verlangst, schaffst du ein unmögliches Szenario. Nimm position: absolute.
Alles klar. Dann werd ich mir da eine Alternative einfallen lassen :)
Muss ich wohl doch auf eine Tabelle in einer Tabelle zurückgreifen!
Ich würde es eher mit position: relative probieren.
Peter
AmicaNoctis 16-11-2010, 13:12 Ich würde es eher mit position: relative probieren.
Peter
Warum? Dann müssen alle Tabellenzellen gleich hoch sein oder man macht sich das Leben schwer, jedes div einzeln auszurichten.
@Tarlar: Warum? Wieso meinst du, dass du mit verschachtelten Tabellen besser dran bist?
Laut seinem Code hat er nur eine.
Peter
AmicaNoctis 16-11-2010, 13:16 Laut seinem Code hat er nur eine.
Peter
Ist position: absolute; bottom: 0 nicht trotzdem viel einfacher als position: relative; top: (zellenhöhe - obereDivHöhe - untereDivHöhe)px?
Ich würd das dann so lösen:
<table>
<tr>
<td>
<table>
<tr><td>Oberer Teil</td></tr>
<tr><td valign="bottom">Unterer Teil</td></tr>
</table>
</td>
</tr>
</table>
AmicaNoctis 16-11-2010, 13:20 Ich nicht. ;)
Genau, mir gefällt die Lösung so auch nicht. Deshalb habe ich hier nachgefragt :D
Das Problem ist weiterhin, dass die Höhe der beiden Divs variieren kann. Daher kann ich für die beiden Divs keine feste Höhe und Abstände festlegen :-/
funzt doch ...
<style>
#dieZelle
{
width:500px;
display:block;
height:250px;
border:1px solid black;
padding:10px;
position:relative;
}
#oben
{
position: absolute;
top:0px;
width:100%;
height:60px;
border:1px solid blue;
}
#unten
{
position: absolute;
bottom:0px;
width:100%;
height:75px;
border:1px solid green;
}
</style>
<table>
<tr>
<td id="dieZelle">
<div id="oben">Oben</div>
<div id="unten">unten</div>
</td>
</tr>
</table>
AmicaNoctis 16-11-2010, 13:25 Du musst keine feste Höhe vergeben:
div.oben {}
/* ist von alleine an der richtigen Stelle (im Flow) */
div.unten { position: absolute; bottom: 0; }
/* nimmt sich ohne Höhenangabe den Platz den es braucht */
/* Edit: */
td { position: relative; }
/* Zelle zum offsetParent machen */
Ich habe derzeit noch das Problem, dass mir die Elemente mit der Eigenschaft position: absolute nicht mehr in der Zelle bleiben, sondern sich am Browserfenster ausrichten.
Muss ich der Zelle eine id geben, dass das funktioniert?
Edit:
Wyveres hat in seinem Beispiel die Zelle auf "display: block" gesetzt. Ohne das funktioniert das ganze nicht mehr. Ich kann "display: block" allerdings nicht verwenden, da ich mehrere Zelle nebeneinder platzieren möchte.
Ich habe nun die Lösung gefunden:
"display:block;" wird ersetzt durch "display: run-in;"
Danke für die Hilfe :)
AmicaNoctis 16-11-2010, 14:11 Siehe mein Edit: du musst noch die Zelle auf position: relative setzen.
Soweit hatte ich schon mitgedacht...trotzdem ging es nur mit position: relative nicht. das display: run-in musste sein.
Siehe mein Edit: du musst noch die Zelle auf position: relative setzen.
Nein, du brauchst noch ein weiteres Element, bspw. ein DIV, in der Zelle, um dem position:relative zu geben - Tabellenzellen kannst du nicht relativ positionieren.
Visual formatting model (http://www.w3.org/TR/CSS21/visuren.html#choose-position):
The effect of 'position:relative' on table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, and table-caption elements is undefined.
Und was wäre dann die korrekte Lösung?
Schrieb ich gerade schon.
Das hat leider bei mir auch nicht funktioniert, wenn ich dem oberen Div-Element position:relative gegeben habe...
Ich rede nicht vom oberen, sondern von einem weiteren, was du erst mal um die Tabellenzellen-Inhalte legen musst, weil position:relative direkt auf TD keine (definierte) Wirkung hat.
Vielen Dank!
Das war die Lösung :beer:
|