Die Positionierungsmöglichkeiten der Divs werden selten gut erklärt, vor allem im
deutschsprachigen Raum. Daher hab ich mich mal entschlossen, selber ein kleines Tutorial zu
schreiben - jetzt, wo ichs endlich kapiert hab! *g*
Vielleicht hilfts ja dem einen oder anderen tatsächlich.
Eine kurze Anmerkung zur Bezeichnung: Mal heißen sie Ebenen, oder auch englisch Layer, das
dann so ins Deutsche übernommen wird. Ich finde das immer etwas missverständlich,
da ich mit "Ebene" immer was dreidimensionales verbinde.
Ich hab mich hier einfach mal für die Bezeichnung "das Div" entschieden,
mit der Benennung einfach nach dem Element - ich denke, es wird klar, was gemeint ist. Allerdings lassen sich fast
alle Positionierungsangaben genauso auch auf andere Elemente anwenden - nicht nur auf die Divs, die ja sonst
selber keine Eigenschaft haben.
Dies ist die Normalposition, man braucht es also nicht extra hinzuschreiben.
Wie verhalten sich die Divs also im Normalfall?
Wie bekomme ich nun aber Elemente nebeneinander? Zum Beispiel mit der Angabe float. Hier mal wieder ein paar Beispiele:
Wie man sieht, kann man mit der Eigenschaft float ne ganze Menge machen. Viele Layouts lassen sich alleine durch geschickten Einsatz von float realisieren.
Komischerweise wird die absolute Positionierung sehr häufig angewandt. Es ist leider auch die einzige Positionierungsart, die von den WYSIWYG-Editoren angeboten wird. Dabei widerspricht es eigentlich mehr oder weniger dem Grundgedanken der CSS-Designs. Wie geht aber nun die absolute Positionierung:
Für eine absolute Positionierung gibt man neben dem Befehl position:absolute noch Koordinaten an - für
das rote Div hier z.B. top:20px und left:30px.Bezugspunkt ist dabei immer die linke obere Ecke.
Absolut positionierte Divs richten sich entweder nach dem Elternelement, dass absolut oder relativ positioniert sein muss (hier mit
schwarzem Rand versehen) - wenn kein weiteres Elternelement da ist, dann richten sie sich einfach nach dem Body.
Absolut positionierte Divs können auch übereinander positioniert werden - die nehmen keine Rücksicht aufeinander wie die floatenden. Auch der Text wird einfach überdeckt. Wer als letztes im Quelltext steht, ist oben (wie hier der blaue).Das geht übrigens ganz ohne z-index - der kommt später noch ;-)
Vielleicht ist Euch ja schon das kleine blaue Kästchen oben rechts aufgefallen - das ist ein mit position fixed positioniertes Div. Die Position am Bildschirm bleibt unverändert, auch beim Scrollen. Allerdings funktioniert das nicht mit dem IE, der das Kästchen einfach hier zeigt, als sei es statisch positioniert. Insofern kann man diese Positionierung in der Praxis nicht wirklich einsetzen oder nur mit vielen Workarounds für den IE - schade eigentlich!
Nun gehts in die Höhe und die Divs werden wirklich zu Ebenen, die übereinander gestapelt werden können. Das geht, wie vorhin schon angemerkt, allerdings auch ohne z-index - mit dem z-index kann ich aber die Reihenfolge besser bestimmen. Dennoch wird der z-index zu häufig sinnlos angewandt und ich hab schon abenteuerliche Werte in Quelltexten gesehen (z-index 100 z.B.). Es gilt: das Div mit dem höheren z-index ist oben und man kann nur gleichartige Elemente stapeln - eigentlich nur absolut oder relativ positionierte (und jeweils gleiche), da die anderen ohnehin "Rücksicht aufeinander nehmen" und sich "aus dem Weg gehen".
Dieses Beispiel ist ganz interessant: Das rote Div wird relativ positioniert - die anderen beiden (grün und blau) befinden sich darin.
Das rote ist also das Elternelement, das nicht "gestapelt" werden kann - egal welcher z-index - es bleibt unten.(hier mal zur Verdeutlichung mit
z-index:2 ausgezeichnet - ist aber eigentlich völlig überfllüssig und soll nur demonstrieren, dass das Div in diesem Fall sowieso nicht darauf reagiert.)
Die anderen Elemente, obwohl sie herausragen und z.Tl größer sind als das Elternelement, richten sich aber an ihm aus.
Der blaue steht im Quelltext als erstes, hat aber z-index 1. Der grüne steht später im Quelltext, bleibt aber unter dem blauen, da
er mit z-index:0 versehen wurde.
Ich hoffe, die Positionierung der Elemente mit CSS ist nun etwas deutlicher geworden.Wenn es Fragen gibt, gerne eine Mail an mich, allerdings weiß ich auch längst nicht alles, sondern bin selber noch am Lernen.