Ein Browser rendert die Elemente eines HTML-Dokuments ohne CSS von links nach rechts und von oben nach unten, in derselben Reihenfolge, in der sie im Dokument vorkommen. Dies wird als Fluss der Elemente in HTML bezeichnet.
Zusätzlich zu den Eigenschaften, die es zum Formatieren von HTML-Elementen bereitstellt, enthält CSS Eigenschaften, die die Positionierung von Elementen durch einen Browser ändern. Diese Eigenschaft geben an, wo sich ein Element auf einer Seite befindet, ob das Element Zeilen mit anderen Elementen teilen kann und andere damit verbundene Attribute.
In dieser Lektion lernen wir fünf Eigenschaften zum Anpassen der Position von HTML-Elementen im Browser kennen:
position
display
z-index
float
clear
Jede dieser Eigenschaften ermöglicht es uns, Elemente auf einer Webseite zu positionieren und anzuzeigen. Sie können in Verbindung mit allen anderen uns bekannten Stileigenschaften verwendet werden.
Schauen wir uns die Blockebenenelemente im Bild unten an:
Elemente auf Blockebene wie diese Kästchen bilden einen Block mit der gesamten Breite ihrer übergeordneten Elemente und verhindern, dass andere Elemente im gleichen horizontalen Raum erscheinen.
Beachten wir auch das die Elemente auf Blockebene im Bild oben eine eigene Raumlinie einnehmen und sich daher nicht überlappen. Im Browser auf der rechten Seite können wir sehen, dass Elemente auf Blockebene auch konsistent auf der linken Seite des Browsers angezeigt werden. Dies ist die Standardposition für Elemente auf Blockebene.
Die Standardposition eines Elements kann durch Festlegen seiner Positionseigenschaft geändert werden. Die Positionseigenschaft kann einen von fünf Werten annehmen:
static - der Standardwert (muss nicht angegeben werden)
relative
absolute
fixed
sticky
In den nächsten Übungen lernen wir die Werte in der obigen Liste kennen. Für den Moment ist es wichtig zu verstehen, dass wir die Eigenschaft position eines HTML-Elements nicht festlegen müssen, wenn wir die Standardposition eines HTML-Elements bevorzugen.
Eine Möglichkeit, die Standardpostion eines Elements zu ändern, besteht darin, seine Positionseigenschaft auf relativ zu setzen.
Mit diesem Wert können wir ein Element relativ zu seiner statischen Standardposition auf der Webseite positionieren.
Obwohl der Code im obigen Beispiel den Browser anweist, eine relative Positionierung des .green-box Elements zu erwarten, gibt er nicht an, wo das .green-box Element auf der Seite positioniert werden soll. Dies geschieht, indem der Positionsdeklaration eine oder mehrere der folgenden Offset-Eigenschaften beigefügt werden, die das Element von seiner standardmäßigen statischen Position wegbewegen:
top - verschiebt das Element von oben nach unten.
bottom - verschiebt das Element von unten nach oben.
left - verschiebt das Element von der linken Seite weg (nach rechts).
right - verschiebt das Element von der rechten Seite weg (nach links).
Wir können Werte unter anderem in Pixeln, Ems oder Prozentsätzen angeben, um genau festzulegen, wie weit das Element verschoben werden soll. Es ist außerdem wichtig zu beachten, dass Offset-Eigenschaften nicht funktionieren, wenn die Positionseigenschaft des Elements die standardmäßige statische Eigenschaft ist.
Im obigen Beispiel wird das Element der green-box Klasse von seiner statischen Standardposition um 50 Pixel nach unten und um 120 Pixel nach rechts verschoben. Das Bild unten zeigt die neue Position der Box.
Das Versetzen des relativen Elements hat keine Auswirkungen auf die Positionierung anderer Elemente.
Eine andere Möglichkeit, die Position eines Elements zu ändern, besteht darin, seine Position auf absolute zu setzen.
Wenn die Position eines Elements auf absolute gesetzt ist, ignorieren alle anderen Elemente auf der Seite das Element und verhalten sich, als wäre es nicht auf der Seite vorhanden. Das Element wird relativ positioniert zu seinem am nächsten positionierten übergeordneten Element, während Offset-Eigenschaften verwendet werden können, um von dort aus die endgültige Position zu bestimmen.
Sehen wir uns das Bild unten an:
Der Text "This website is in progress..." wird von seiner statischen Position in der oberen linken Ecke des übergeordneten Containers verschoben. Er verfügt über die Offset-Eigenschaftsdeklaration top: 300px; und right: 0px; , wodurch er 300 Pixel weiter unten und 0 Pixel vom rechten Seitenrand entfernt positioniert wird.
Wenn die Position eines Elements auf absolute gesetzt wird, wie in der letzten Übung, wird das Element zusammen mit dem Rest des Dokuments gescrollt, wenn ein Benutzer scrollt.
Wir können ein Element an einer bestimmten Position auf der Seite fixieren (unabhängig vom Scrollen des Benutzers), indem wir seine Position auf fixed setzen und es mit den bekannten Offset-Eigenschaften versehen (top, bottom, left und right).
Im obigen Beispiel bleibt das Element .title an seiner Position fixiert, unabhängig davon, wohin der Benutzer auf der Seite scrollt, wie im Bild unten:
Diese Technik wird häufig für Navigationsleisten auf einer Webseite verwendet.
Da static positionierte relative Elemente im normalen Dokumentfluss verbleiben, werden diese Elemente auch gescrollt, wenn ein Benutzer die Seite (oder das übergeordnete Element) scrollt. Da fixed positionierte absolute Elemente aus dem Dokumentfluss entfernt werden, bleiben diese Elemente an ihrer angegebenen Offsetposition, wenn ein Benutzer scrollt.
Der sticky Wert ist ein weiterer Positionswert, der ein Element im Dokumentfluss hält, während der Benutzer scrollt, aber an einer angegebenen Position bleibt, wenn die Seite weiter gescrollt wird. Dies geschieht durch die Verwendung des sticky Werts zusammen mit den bekannten Offset-Eigenschaften sowie einer neuen.
Im obigen Beispiel bleibt das .box-bottom <div> an seiner relativen Position und scrollt wie gewohnt. Wenn es 240 Pixel von oben erreicht, bleibt es an dieser Position, bis es den unteren Rand seines übergeordneten Containers erreicht, wo es sich "löst" und sich wieder dem Fluss des Dokuments anschließt.
Wenn Boxen auf einer Webseite eine Kombination verschiedener Positionen haben, können sich die Boxen (und damit ihr Inhalt) überlappen, wodurch der Inhalt schwer zu lesen oder zu konsumieren ist.
Im obigen Beispiel überlappt das .green-box Element das .blue-box Element.
Die z-index Eigenschaft steuert, wie weit hinten oder vorne ein Element auf der Webseite erscheinen soll, wenn sich Elemente überlappen. Dies kann man sich als die Tiefe von Elementen vorstellen, wobei tiefere Elemente hinter flacheren Elementen erscheinen.
Die z-index Eigenschaft akzeptiert ganzzahlige Werte. Abhängig von ihren Werten weisen die Ganzzahlen den Browsern an, in welcher Reihenfolge Elemente auf der Webseite geschichtet werden sollen.
Im obigen Beispiel haben wir die .blue-box Position auf relative und den Z-Index auf 1 gesetzt. Wir haben die Position auf relative geändert, da die Z-Index Eigenschaft bei statischen Elementen nicht funktioniert. Der Z-Index von 1 verschiebt das .blue-box Element nach vorne, da der Z-Index Wert nicht explizit für das .green-box Element angegeben wurde, was bedeutet, dass es einen Standard-Z-Index-Wert von 0 hat.
Sehen wir uns das an im Beispielbild unten:
Jedes HTML-Element verfügt über einen Standardanzeigewert, der vorgibt, ob es den horizontalen Raum mit anderen Elementen teilen kann. Einige Elemente füllen den gesamten Browser von links nach rechts aus, unabhängig von der Größe ihres Inhalts. Andere Elemente nehmen nur so viel horizontalen Platz ein, wie ihr Inhalt erfordert und können direkt neben anderen Elementen platziert werden.
In dieser Lektion behandeln wir drei Werte für die Anzeigeeigenschaft:
inline
block
inline-block
Die Standardanzeige für einige Elemente, wie z.B. <em>, <strong> und <a>, wird als Inline bezeichnet. Inline-Elemente verfügen über eine Box, die ihren Inhalt eng umschließt, nur so viel Platz einnimmt, wie für die Anzeige ihres Inhalts erforderlich ist und nicht nach jedem Element eine neue Zeile erfordert. Die Höhe und Breite dieser Elemente kann im CSS-Dokument nicht angegeben werden. Beispielsweise wird der Text eines Ankertags (<a>) standardmäßig in derselben Zeile wie der umgebende Text angezeigt und ist nur so breit wie nötig, um seinen Inhalt aufzunehmen. Die Größe von inline Elementen kann nicht mit den CSS-Eigenschaften height oder width geändert werden.
Im obigen Beispiel ist das <em> Element inline, da es seinen Inhalt in derselben Zeile anzeigt wie den umgebenden Inhalt, einschließlich des Ankertags. In diesem Beispiel wird Folgendes angezeigt:
Um mehr über inline Elemente zu erfahren, gibt es die MDN-Dokumentation.
Die CSS-Anzeigeeigenschaft bietet die Möglichkeit, jedes Element zu einem Inline-Element zu machen. Dazu gehören Elemente, die standardmäßig nicht inline sind, wie Absätze, Divs und Überschriften.
Das CSS im obigen Beispiel ändert die Anzeige aller <h1> Elemente in inline. Der Browser rendert <h1> Elemente in derselben Zeile wie andere Inline-Elemente unmittelbar davor oder danach (falls vorhanden).
Einige Elemente werden nicht in derselben Zeile wie der sie umgebende Inhalt angezeigt. Diese werden als Elemente auf Blockebene bezeichnet. Diese Elemente füllen standardmäßig die gesamte Breite der Seite aus, ihre Breiteneigenschaft kann jedoch auch festgelegt werden. Sofern nicht anders angegeben, haben sie die Höhe, die zur Aufnahme ihres Inhalts erforderlich ist.
Zu den Elementen, die standardmäßig auf Blockebene sind, gehören alle Ebenen von Überschriftenelementen (<h1> bis <h6>), <p>, <div> und <footer>. Eine vollständige Liste der Elemente auf Blockebene finden wir bei der MDN-Dokumentation.
Im obigen Beispiel werden alle <strong> Elemente in einer eigenen Zeile ohne Inhalt direkt auf beiden Seiten angezeigt, auch wenn ihr Inhalt möglicherweise nicht die Breite der meisten Computerbildschirme ausfüllt.
Der dritte Wert für die Anzeigeeigenschaft ist inline-block. Die Inline-Block-Anzeige kombiniert Funktionen von Inline- und Blockelementen. Inline-Block-Elemente können nebeneinander erscheinen und wir können ihre Abmessungen mithilfe der Eigenschaft "width" und "height" festlegen. Bilder sind das beste Beispiel für Standard-Inline-Block-Elemente.
Die folgenden <div>s werden beispielsweise in derselben Zeile und mit den angegebenen Abmessungen angezeigt:
Werfen wir einen Blick auf den Code:
Es gibt drei rechteckige Divs, die jeweils einen Textabstand enthalten. Die .rectangle <div>s erscheinen alle inline (vorausgesetzt, es ist genügend Platz von links nach rechts vorhanden) mit einer Breite von 200 Pixeln und einer Höhe von 300 Pixeln, auch wenn der darin enthaltene Text möglicherweise keine 200 x 300 Pixel an Raum benötigt.
Bisher haben wir gelernt, wie wir die genaue Position eines Elements mithilfe von Offset-Eigenschaften angeben. Wenn wir einfach nur ein Element so weit wie möglich nach links und rechts im Container verschieben möchten, können wir die float Eigenschaft verwenden.
Die Float-Eigenschaft wird häufig zum Umbrechen von Text um ein Bild verwendet. Beachten wir jedoch, dass das Verschieben von Elementen nach links oder rechts für Layoutzwecke besser für Tools wie CSS-Raster und Flexbox geeigent ist, die wir später kennenlernen werden.
Die Float-Eigenschaft wird mit diesem Werten festgelegt:
left - Verschiebt Elemente so weit wie möglich nach links.
right - Verschiebt Elemente so weit wie möglich nach rechts.
Im obigen Beispiel verschieben wir das .orange-section Element nach rechts. Dies funktioniert für statische und relativ positionierte Elemente. Sehen wir uns das Ergebnis des folgenden Codes an:
Für schwebende Elemente muss eine Breite angegeben werden, wie im obigen Beispiel. Andernfalls nimmt das Element die volle Breite seines enthaltenden Elements ein und eine Änderung des Float-Werts führt zu keinen sichtbaren Ergebnis.
Die Eigenschaft float kann auch verwendet werden, um mehrere Elemente gleichzeitig schweben zu lassen. Wenn jedoch mehrere schwebende Elemente unterschiedliche Höhen haben, kann sich dies auf deren Anordnung auf der Seite auswirken. Insbesondere können Elemente aneinander "stoßen" und es anderen Elementen nicht ermöglichen, sich ordnungsmäßig nach links oder rechts zu bewegen.
Die Eigenschaft clear gibt an, wie sich Elemente verhalten sollen, wenn sie auf der Seite aneinander stoßen. Es kann einen der folgenden Werte annehmen:
left - Die linke Seite des Elements berührt kein anderes Element innerhalb desselben enthaltenden Elements.
right - Die rechte Seite des Element berührt kein adneres Element innerhalb desselben enthaltenden Elements.
both - Keine Seite des Elements berührt ein anderes Element innerhalb desselben enthaltenden Elements.
none - Das Element kann jede Seite berühren.
Im obigen Beispiel werden alle <div>s auf der Seite auf der linken Seite angezeigt. Das Element mit der Klasse special wurde nicht ganz nach links verschoben, da ein größeres <div> seine Positionierung blockierte. Indem die Eigenschaft clear auf left gesetzt wird, wird das special <div> ganz auf die linke Seite der Seite verschoben.
Tolle Arbeit! In dieser Lektion haben wir gelernt, wie wir die Positionierung von Elementen auf einer Webseite steuern.
Sehen wir uns noch einmal an, was wir bisher gelernt haben:
Mit der position Eigenschaft können wir die Position eines Elements angeben.
Bei der Einstellung relative ist die Position eines Elements relativ zu seiner Standardposition auf der Seite.
Bei der Einstellung absolute ist die Position eines Elements relativ zu seinem nächstgelegenen übergeordneten Element. Es kann an einen beliebigen Teil der Webseite angeheftet werden, bewegt sich aber dennoch mit dem Rest des Dokuments, wenn die Seite gescrollt wird.
Bei der Einstellung fixed kann die Position eines Elements an jedem beliebigen Teil der Webseite angeheftet werden. Das Element bleibt in jedem Fall im Blick.
Bei der Einstellung sticky kann ein Element an einer definierten Versatzposition bleiben, wenn der Benutzer durch seinen übergeordneten Container scrollt.
Der Z-Index eines Elements gibt an, wie weit hinten oder vorne ein Element auf der Seite erscheint, wenn es andere Elemente überlappt.
Mit der Eigenschaft display können wir steuern, wie ein Element in einem Dokument vertikal und horizontal fließt.
inline Elemente nehmen so wenig Platz wie möglich ein und ihre Breite oder Höhe kann nicht manuell angepasst werden.
block Elemente nehmen die Breite ihres Containers ein und können manuell in der Höhe angepasst werden.
inline-block Elemente können eine festgelegte Breite und Höhe haben, sie können aber auch nebeneinander erscheinen und nicht ihre gesamte Containerbreite einnehmen.
Mit der float Eigenschaft können Elemente auf einer Webseite so weit wie möglich nach links oder nach rechts verschoben werden.
Mit der clear Eigenschaft können wir die linke und rechte Seite eines Elements (oder beide) löschen.
In Kombination mit einem Verständnis des Box-Modells kann die Positionierung optisch ansprechende Webseiten erstellen. Bisher haben wir uns auf das Hinzufügen von Inhalten in Form und Text zu einer Webseite konzentriert. In der nächsten Lektion erfahren wir, wie wir Bilder zu einer Webseite hinzufügen und bearbeiten.
Vordergrundfarbe vs. Hintergrundfarbe
Hexadezimal
RGB Farben
Hex und RGB
Farbton, Sättigung und Helligkeit
Deckkraft und Alpha