Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Div-Element ans Ende eines Elements setzen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Div-Element ans Ende eines Elements setzen


 
Tarlar
16-11-2010, 12:39 
 
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

 
Tarlar
16-11-2010, 12:49 
 
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.

 
Tarlar
16-11-2010, 12:58 
 
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.

 
Tarlar
16-11-2010, 13:06 
 
Alles klar. Dann werd ich mir da eine Alternative einfallen lassen :)

Muss ich wohl doch auf eine Tabelle in einer Tabelle zurückgreifen!

 
Kropff
16-11-2010, 13:06 
 
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?

 
Kropff
16-11-2010, 13:13 
 
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?

 
Tarlar
16-11-2010, 13:16 
 
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. ;)

 
Tarlar
16-11-2010, 13:22 
 
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 :-/

 
Wyveres
16-11-2010, 13:24 
 
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 */

 
Tarlar
16-11-2010, 13:48 
 
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.

 
Tarlar
16-11-2010, 14:11 
 
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.

 
Tarlar
16-11-2010, 14:36 
 
Soweit hatte ich schon mitgedacht...trotzdem ging es nur mit position: relative nicht. das display: run-in musste sein.

 
wahsaga
16-11-2010, 15:04 
 
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.

 
Tarlar
16-11-2010, 15:27 
 
Und was wäre dann die korrekte Lösung?

 
wahsaga
16-11-2010, 15:48 
 
Schrieb ich gerade schon.

 
Tarlar
16-11-2010, 15:53 
 
Das hat leider bei mir auch nicht funktioniert, wenn ich dem oberen Div-Element position:relative gegeben habe...

 
wahsaga
16-11-2010, 15:56 
 
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.

 
Tarlar
16-11-2010, 16:09 
 
Vielen Dank!

Das war die Lösung :beer:


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:33 Uhr.