Cascading Style Sheets - Tutorial für WebDesigner und WebDesignerinnen


Letzte Änderung am 21.01.2005
Cascading Style Sheets - ein Tutorial
Vorbemerkung: Die Kapiteleinteilung hält sich an das Buch von Eric A. Meyer: Cascading Style Sheets, The Definitive Guide, O'REILLY, 2004.
Es soll eine sinnvolle Adaptation der W3C-Regeln zu CSS1, 2 und 2.1.aus der Perspektive von Lernenden sein. Die eingefügten Demos lassen sich-fast ohne Ausnahme-im Quelltext editieren und ansehen. Der Code ist so einfach wie möglich gehalten und das Tutorial kann auch offline benutzt werden. CSS-Bereiche, die in den gängigen Browsern bisher nicht implementiert wurden, werden nicht dokumentiert.
Andreas Lutz MatteDesign, Bern

Kapitelübersicht

Kapitel 10.1: Positionierung Grundlagen

Positionierung
Positionierung ist ein zentrales Konzept (neben Floating) für CSS-Design und -Layout. Es erlaubt pixelgenaue Darstellung von Elementen, die mit position: aus dem normalen Textfluss herausgenommen wurden.

position
Values: static | relative | absolute | fixed | inherit
Anfangswert: static
Geltungsbereich: alle Elemente
Vererbung: nein
Computereingabe: wie Values

static: Normale Boxen und normaler Fluss der Elemente (default)

relative: Relative Abweichung von der Normalposition, wobei der Raum der Normalposition (ohne offset-Angaben) erhalten bleibt.

absolute: Komplette Absonderung des Elementes aus dem normalen Elementfluss.Das Element ist jedoch abhängig von seinem containing Block.

fixed: Verhält sich wie absolute aber der sichtbare Bereich des Bildschirms (Viewport) ist der containing Block.

Der Eltern-Block (containing block)
Gewisse Ähnlichkeiten zu float sind vorhanden. Bei Float ist der Containing-Block das näheste Eltern-Blockelement
Bei der Positionierung gelten in CSS 2.1. die folgenden Regeln:
Der Containimg-Block des Rootelementes (erster Block) wird vom Browser gesetzt. Meist gilt dafür das initiale <html-Element> oder ev. auch das <body-Element>. Es bildet ein Rechteck um den sichtbaren Bereich der gesamten Seite.
Für Nicht-Root-Elemente mit static oder relative-Angaben: Der Containing-Block ist die innere Ecke des Content-Bereichs des am nächsten liegenden Vorgängerblocks, der Tabellenzelle oder aber der direkte Vorgänger eines Inline-Elementes.
Für Nicht-Root-Elemente mit position:absolute: Der Containing-Block ist der direkteste Vorgänger, der keine static-Positionierung hat und zwar folgendermassen:
Bei Vorgänger-Block-Elementen die Padding-Ecke
Bei Vorgänger-Inline-Elementen die innere Ecke (content) Wenn es keine Vorgänger (Anchestors)gibt: Der Containing-Block ist das Root-Element.
Elemente können mit Positionierung, wie bei der Anwendung von negativen Margins, ausserhalb ihrer Vorgänger-Elemente gesetzt werden.

Offset Eigenschaften

top, right, bottom, left
Values: <length> | <percentage> | auto | inherit
Anfangswert: auto
Geltungsbereich: Positionierte Elemente (= alle, die nicht static sind)
Vererbung: nein
Prozentwerte: Bezieht sich auf die Höhe (top,bottom) und Breite (right,left) des Containing-Block.
Computereingabe: Spezifisch für die Positionsarten

Die Offset-Eigenschaften beziehen sich immer auf den Contaning-Block. Sie gelten (ausser bei WIN/IE) nicht als Basis für Längen- oder Breitenberechnungen, sondern als Positionierung .
Alle Boxenangaben (margins,paddings, borders, contents) werden in die Positionierung einbezogen.
Beispiel: top: 50%; bottom:0; left:50%; right:0; Positioniert ein Element direkt in die untere Ecke des Containing-Block-Elementes.

Demo 1

Etwas anders verhalten sich Offset-Prozentangaben. Sie berücksichtigen die effektive Höhe und Breite des Containing-Block.

Demo 2

Negative Offsetwerte setzen eine Position ausserhalb des Elternelementes.

Width und Height
Diese Angaben sind nicht immer notwendig, weil die Offset-Eigenschaften sie bereits definiert haben. Wird left und right gesetzt, ist width bereits definiert. Dasselbe geschieht, wenn top und bottom gesetzt werden. In all diesen Fällen, wird der width und/oder height-Wert auf 'auto' gesetzt und nimmt soviel Raum ein, wie notwendig. Wenn zu height- oder width-Anagben zusätzliche Margins, Borders oder Paddings hinzugefügt werden, verändert sich gemäss Boxen-Modell die Gesamtlänge des Elementes.

Demo 3

Beschränkung der Längen- und Breitenangaben (min width/height, max width/height)

min-width, max-width, min-height, max-height
Values: <length> | <percentage> | inherit| none(für min/max height)
Anfangswert: 0 für min/max width; none für min/max height
Geltungsbereich: alle Elemente, ausser nicht-ersetzten Inline-Elementen und Tabellenelementen
Vererbung: nein
Prozentwerte: width und height des Containing-Block.
Computereingabe: für Prozenteingaben: S. value; für length: absolute Zahl; oder none Diese Attribute werden von MS Internet-Explorer nicht unterstützt!

Diese an sich nützlichen Attribute sind nicht Cross-Browser fähig und werden deshalb selten eingesetzt.

Inhaltsüberhang und Inhaltsbeschneidung (overflow, clipping)

overflow
Values: visible | hidden | scroll | auto | inherit
Anfangswert: visible
Geltungsbereich: block-level- und ersetzte Elements
Vererbung: nein
Computed value: S. Values

Demo 4

Wenn der Content die Ränder des definierten, positionierten Elementes überschreitet, fliesst er über. Overflow: regelt die Art der Darstellung dieses Überhanges.
Visible bedeutet, dass der Content ausserhalb der definierten Box sichtbar ist. Entsprechend kann dieser Inhalt auf scroll oder hidden, oder auto gesetzt werden.

clip
Values: rect(top, right, bottom, left) | auto |inherit
Anfangswert: auto
Geltungsbereich: absolute positionierte Elemente
Vererbung: nein
Computereingabe: Wertepaare für rect

Demo 5

Wertepaare können mit oder Kommata abgegrenzt werden.
Sie sind keine Offset-Angaben, sondern effektive Längenwerte welche ein Rechteck genau definieren. Die Werte definieren in der Reihenfolge: oben, rechts, unten, links.
Es ist ebenfalls möglich, die clipping-area ausserhalb der Element-Box zu verschieben. Die clip-Syntax ist – bedingt durch historische Umstände – eher etwas CSS-fremd, aber sie hat sich so durchgesetzt.

Element Sichtbarkeit (visibility)

visibility
Values: visible | hidden | collapse |inherit
Anfangswert: visible
Geltungsbereich: alle Elemente
Vererbung: ja
Computereingabe: S. Values

Demo 6

Regelt die Sichtbarkeit oder die Unsichtbarkeit eines Elementes. Das Attribut collapse ist nur bei Tabellen anwendbar. Im Gegensatz zu display:none bleibt der besetzte Raum des Elements erhalten. Da visibility vererbt wird, müssen Kindelemente speziell von der Unsichtbarkeit befreit werden:
Beispiel: p.clear {visibility: hidden} p.clear em{visibility:visible}

Weiter zu Kapitel 10.2: Positionierung