CSS 2.1 ::Grundlegendes

Das Modell der visuellen Formatierung

Das Modell der visuellen Formatierung beschreibt, wie die Elemente innerhalb eines Webdokuments generiert und dargestellt werden, in welchem Verhältnis sie zueinander stehen und welche gegenseitigen Abhängigkeiten existieren. Es bezieht sich auf Medien, die der Mediengruppe visual zugeordnet sind und ist damit auf die folgenden Medientypen beschränkt: handheld, print, projection, screen, tty und tv. Die Auswirkungen der auf dieser Seite beschriebenen Berechnungen lassen sich gut beobachten, wenn man ein Browserfenster in der Größe verändert.

Der Bildschirm ist heute immer noch das wichtigste Medium im Web, deshalb nimmt auch die visuelle Formatierung in CSS einen relativ breiten Raum ein: allein 3 der 18 Abschnitte in der Spezifikation CSS 2.1 sind diesem Thema gewidmet.

Bei der Ausgabe eines Webdokuments muss der Browser grundsätzlich immer die gleichen Fragen beantworten:

  1. Wie werden die am Bildschirm dargestellten Boxes zuerst erzeugt?
  2. Nach welchem Schema werden die Boxes dann positioniert oder platziert?
  3. Wie werden die Abmessungen und die Lage jeder Box bestimmt?
  4. Was passiert, wenn Kindboxes über die Ränder der Elternbox hinaus stehen?
  5. Welche Box wird ausgegeben, wenn mehrere Boxes denselben Platz auf dem Bildschirm beanspruchen?
  6. Welchen Einfluss haben nicht-westliche Schreibrichtungen auf die Ausgabe der Boxes?

Die Antworten zu diesen sechs Fragen bilden deshalb die sechs Abschnitte des Modells der visuellen Formatierung. Man kann zusätzlich das Boxmodell und das Line- Box- Modell als Teile des Modells der visuellen Formatierung auffassen, das ist aber auch eine Frage der Philosophie.

Wir dürfen bei alledem aber nicht den Unterschied zwischen Elementen und Boxes vergessen. Elemente sind die Dinge, die wir auf dem Bildschirm sehen. Boxes sind unsichtbare Vierecke, also gedachte Hilfskonstruktionen, mit deren Hilfe die Elemente am Bildschirm platziert werden. Jedes Element erzeugt seine eigene Box und die umschließende Box für alle Nachfahrenelemente.

Im Folgenden sollen die sechs Fragen beantwortet werden, soweit die Antworten nicht auf anderen Seiten bereits gegeben sind.

Der Wert run-in korrekt dargestellt.
Oben: normale Darstellung einer Überschrift h2.
Mitte: h2 { display: run-in } mit nachfolgender Block- Box.
Unten: h2 { display: run-in } mit nachfolgender Inline- Box.

Generierung der Boxes

Wir können die HTML-Elemente in zwei Gruppen einteilen: Block- Level- Elemente, die Block- Boxes erzeugen, und Inline- Level- Elemente, die Inline- Boxes generieren. Diese beiden Zustände lassen sich auch durch die Werte block und inline der Eigenschaft display einstellen.

Run-In-Boxes

Display bietet zusätzlich den Wert run-in zur Generierung von Run-In-Boxes. Allgemein ausgedrückt, sind dies Block- Boxes, die in die nachfolgende Block- Box integriert und dem darin vorhandenen Inhalt vorangestellt werden. Eine Run-In-Box wird dadurch zur ersten Inline- Box der auf sie folgenden Block- Box, falls diese nicht floatiert oder absolut positioniert ist.

Enthält die Run-In-Box jedoch ihrerseits eine Block- Box als Nachkommenelement, dann wird sie selbst zur Block- Box.

Auch in allen anderen als den beiden oben genannten denkbaren Fällen wird eine Run-In-Box zur Block- Box.

Eine Run-In-Box erbt die Eigenschaften ihres Elternelementes, nicht die des Elementes, in das sie sich integriert. Run-In-Boxes verhalten sich ählich wie Inline-Block- Boxes, sollten mit diesen aber keinesfalls verwechselt werden.

Positionierungsschemata

In CSS 2.1 gibt es drei Möglichkeiten, Boxes zu positionieren. Mit Hilfe dieser Positionierungsarten allein ist es möglich, die Zugänglichkeit einer Website erheblich zu steigern, denn sie machen die Verwendung unsichtbarer Grafiken zu Layout-Zwecken komplett überflüssig.

  1. Erste Möglichkeit: Wir greifen nicht in die Positionierung ein und lassen den Elementen die Freiheit, ihre Boxes selbst zu positionieren. Sie nehmen dadurch auf dem Bildschirm einen Platz ein, der ihrer Reihenfolge und ihrem Auftreten im Dokumentstammbaum entspricht. Dies ist der normale Elementfluss.

    Dieses Schema umfasst alle Block- Boxes, Inline- Boxes und Run-In-Boxes, deren Positionierung als statisch oder relativ definiert ist (position: static oder position: relative).

  2. Wir können Boxes aber auch an einer bestimmten Stelle aus dem normalen Fluss lösen und sie ganz links oder ganz rechts am Rand des umschließenden Blocks (sprich: des Elternelementes) platzieren. Dieses Verfahren heißt floatierte Positionierung. Wir nutzen dazu die Eigenschaften float und clear. Die Einzelheiten des Schemas der floatierten Positionierung ist bereits in der Referenz der Eigenschaft float erläutert.

  3. Schließlich lassen sich Elemente auch vollständig aus dem normalen Fluss herauslösen und unabhängig, also nicht relativ zu anderen Elementen, am Bildschirm platzieren. Diese Möglichkeit wird absolute Positionierung genannt. Sie wird durch die Werte absolute oder fixed der Eigenschaft position deklariert. Dazu sind im Regelfall auch eine oder zwei der Eigenschaften top, right, bottom oder left notwendig.

Ermittlung von Abmessungen und Lage der erzeugten Boxes

Die Bestimmung der bildschirmgeografischen Lage der Elemente ist ein Gebiet, das theoretische und sehr detaillierte Beschreibungen erfordert, wenn es richtig erklärt werden soll. Das macht die Erläuterungen dazu relativ langwierig. Sie wurden deshalb auf die Extraseite 'Visuelle Formatierung — Breite und Höhe' ausgelagert.

Überfließen und Abschneiden von Inhalten

Dieser Punkt behandelt die Möglichkeit, Elemente unter bestimmten Bedingungen nur teilweise darzustellen. Das kann einmal der Fall sein, wenn ein Element über den Rand des umschließenden Blocks hinaussteht. Wie dann verfahren wird, regelt die Eigenschaft overflow.

Der andere Fall ist gegeben, wenn wir von einem Element einen bestimmten Teil ausschneiden und nur diesen Teil darstellen wollen. Das geht mit Hilfe der Eigenschaft clip.

Stapeln von Elementen

Dieser Abschnitt definiert ganz allgemein, welche Teile eines Webdokuments welche anderen Teile verdecken können. Im Einzelnen gibt es folgende Regelungen:

Rahmen und Hintergründe von Block- Level- Elementen im normalen Fluss:
Innerhalb des Elements stehen Hintergrundbilder vor der Hintergrundfarbe. Falls ein Rahmen deklariert wurde, steht dieser wiederum davor, er verdeckt also einen Teil des Hintergrundes.
Rahmen und Hintergründe von Tabellen:
Welche Eigenschaften hier Vorrang haben, ist abhängig davon, an welchem Element innerhalb der Tabelle sie angebracht werden. Die Reihenfolge von vorne nach hinten ist: Zellen (td ,th), Reihen (tr), Reihengruppen (thead, tfoot, tbody), Spalten (col), Spaltengruppen (colgroup), Tabelle(table). Mehr dazu ist im Abschnitt Das CSS-Tabellenmodell des Artikels 'Tabellenformatierung mit CSS' erklärt.
Positionierte Elemente:
Die Schichtung von positionierten Elementen ist abhängig vom Z-Index. Die Elemente werden hintereinander gestaffelt abhängig davon, ob sie einen aktuellen Schichtungskontext oder einen lokalen Schichtungskontext etablieren. Was das bedeutet und wie das vor sich geht, ist bereits im Referenzartikel zur Eigenschaft z-index erläutert.
Float-positionierte Elemente:
Für floatierte Elemente ergibt sich die Staffelung aus ihrer Reihenfolge im Dokumentstammbaum unterhalb ihres Elternelements. Von float-Elementen abstammende Elemente werden im Schichtungskontext des Elternelements eingegliedert, ähnlich wie im Fall des lokalen Schichtungskontexts der positionierten Elemente.
Inline- Level- Elemente:
In den Line- Boxes (sprich: Textzeilen) wird die Schichtung für jede Zeile einzeln bestimmt. Dabei gilt für Hintergrund und Rahmen dieselbe Reihenfolge wie für Block- Level- Elemente. Für die Inline- Level- Elemente innerhalb der Zeile spielt auch die Textdekoration eine Rolle: underline und overline verdecken ggf. Textteile, alle Inline-Level-Nachkommen und line-through stehen 'hinter' dem Text.

Schreibrichtung

Die Sprache von Webdokumenten wird in der Regel mit dem HTML-Attribut lang oder durch Metadaten festgelegt. Seitdem HTML 4.01 und Unicode zu geltenden Standards wurden, kann Text in Webseiten auch von rechts nach links laufen, vorausgesetzt, dass eine entsprechende Sprache wie z. B. 'hebrew' (hebräisch) vorgegeben ist. Browser dürfen die Schreibrichtung aber nicht aus dem Attribut lang herleiten.

In CSS 2.1 sind allein die beiden Eigenschaften direction und Unicode- bidi zur Einstellung der Schreibrichtung vorgesehen. An dieser Stelle sei deshalb zuerst auf die Referenz zur Eigenschaft direction und zur Eigenschaft unicode-bidi verwiesen. Hier wollen wir uns nur ein kleines Beispiel ansehen, das die Effekte praktisch zeigt.

Ein Beispiel:

Der folgende Absatz enthält eine Mischung deutscher und hebräischer Worte, die hebräischen Zeichen sind in Unicode notiert. Hier zuerst der Quellcode:

<p>Haus1 תיה2 Berg3 Zelt4
הר5 א׀הל6</p>

Das Kürzel "05ea" am Beginn entspricht dem Zeichen 'ת' und "05dc" am Ende entspricht dem Zeichen 'ל'. An jedes 'Wort' ist zur Kennzeichnung der ursprünglichen Reihenfolge eine Ziffer von 1 bis 6 angehängt. Daran kann man erkennen, dass die hebräischen Textteile, jedes für sich, von rechts nach links ausgegeben werden. Sie behalten also ihre natürliche, im Unicode verankerte Schreibrichtung bei. Das ist die Bedeutung der Bidirektionalität:

Haus1 תיה2 Berg3 Zelt4 הר5 א׀הל6

Dieses Beispiel steht innerhalb einer deutschsprachigen Website, die Schreibrichtung ist also von links nach rechts. Im folgenden Absatz ist die Schreibrichtung mit Hilfe der Deklaration direction:rtl umgekehrt. Das ändert die Reihenfolge der deutschen und hebräischen Teile, die natürliche Schreibrichtung der deutschen Teile bleibt aber bestehen:

<p style="direction:rtl;">Haus1 תיה2 Berg3 Zelt4 הר5 א׀הל6</p>

Ergebnis:

Haus1 תיה2 Berg3 Zelt4 הר5 א׀הל6

Erst durch die Deklaration Unicode- bidi:bidi-override erzwingt man eine Änderung der Richtung dieser Teile, sodass sie genauso laufen wie ihre Umgebung. Die hebräischen Teile können dabei problemlos durch den span mit eingefasst werden, da ihre Schreibrichtung sowieso von rechts nach links läuft:

<p style="direction:rtl;"><span style="Unicode- bidi:bidi-override;">
Haus1 תיה2 Berg3 Zelt4 הר5 א׀הל6
</span></p>

Ergebnis:

Haus1 תיה2 Berg3 Zelt4 הר5 א׀הל6

Umgekehrt geht das auch. Der nächste Absatz folgt wie das erste Beispiel oben der durch die deutsche Sprache vorgegebenen Sprachrichtung, hier wirkt die Deklaration Unicode-bidi: bidi-override nur auf den hebräischen Teil. Dadurch laufen diese Teile ebenfalls von links nach rechts.

<p><span style="Unicode- bidi:bidi-override;">
Haus1 תיה2 Berg3 Zelt4 הר5 א׀הל6
</span></p>

Ergebnis:

Haus1 תיה2 Berg3 Zelt4 הר5 א׀הל6

Wir sehen also, dass die korrekte Richtung für jede Schriftart durch den Unicode vorgegeben wird. Globale Angaben zur Richtung ändern nur die Reihenfolge der Worte. Will man die Schreibrichtung innerhalb der Worte ebenfalls ändern, benötigt man dazu die Eigenschaft unicode-bidi. Das sollte man aber nur dann tun, wenn man die verwendete Schrift lesen und damit die Korrektheit der Ausgabe prüfen kann.
TOP


Home|Vollreferenz|Schnellreferenz|Grundlegendes|Tutorials & Artikel|Quiz|Allgemeines

© Copyright All Contents 2002-2023
Commercial Use prohibited.


Notizen: