PFAD: ./module/css/css1/

DATEI: string(25) "00Inhaltsverzeichnis1.php"
DATEI: string(15) "01CSS-Basic.php"
DATEI: string(14) "02CSS-Font.php"
DATEI: string(14) "03CSS-Text.php"
DATEI: string(23) "04CSS-Aufzaehlungen.php"
DATEI: string(16) "04CSS-Rahmen.php"
DATEI: string(21) "05CSS-Hintergrund.php"
DATEI: string(19) "06CSS-Abstaende.php"
DATEI: string(16) "07Box-Modell.php"
DATEI: string(18) "08CSS-Tabellen.php"
DATEI: string(21) "09CSS-Multi-Media.php"
DATEI: string(28) "10Display-Float-Position.php"

css mit Adi Prinz

Display

Jedes sichtbare HTML-Element erzeugt mindestens eine Box. Die CSS-Eigenschaft display bestimmt, wie diese Box dargestellt wird und wie sich das Element gegenüber benachbarten Elementen verhält.

HTML-Elemente besitzen abhängig von ihrer Art einen Standardwert. Elemente wie <div>, <p> und <section> werden standardmäßig als Blockelemente dargestellt. Elemente wie <span>, <a> und <strong> verhalten sich standardmäßig wie Inline-Elemente.

Mit display kann dieses Standardverhalten geändert werden. Die Eigenschaft ist nicht vererbbar.

Wert Bedeutung
none Das Element und seine Nachkommen werden nicht dargestellt.
block Das Element erzeugt eine Blockbox und beginnt normalerweise in einer neuen Zeile.
inline Das Element wird innerhalb einer Textzeile dargestellt.
inline-block Das Element steht in der Zeile, kann aber wie eine Blockbox formatiert werden.
list-item Das Element erhält das Darstellungsverhalten eines Listeneintrags.
flow-root Das Element erzeugt einen neuen Block Formatting Context.
flex Das Element wird zum Block-Flexcontainer.
inline-flex Das Element wird zum Inline-Flexcontainer.
grid Das Element wird zum Block-Gridcontainer.
inline-grid Das Element wird zum Inline-Gridcontainer.
table Das Element erhält das Darstellungsverhalten einer Tabelle.
contents Die Box des Elements entfällt weitgehend; seine Nachkommen bleiben dargestellt.

display: none

Mit display: none wird ein Element vollständig aus der Darstellung entfernt. Es belegt keinen Platz mehr im Layout und wird normalerweise auch nicht in den Accessibility Tree aufgenommen.

.hidden {
  display: none;
}
<p class="hidden">
  Dieser Absatz wird nicht dargestellt.
</p>

Soll ein Element nur optisch verborgen, aber beispielsweise für Screenreader verfügbar bleiben, ist eine speziell dafür vorgesehene Hilfsklasse erforderlich.

display: block

Ein Blockelement beginnt normalerweise in einer neuen Zeile und nimmt ohne festgelegte Breite den verfügbaren Platz seines Elternelements ein.

span.box {
  display: block;
  padding: 1rem;
  background-color: lightblue;
}

In diesem Beispiel erhält das <span>-Element das Darstellungsverhalten einer Blockbox.

display: inline

Inline-Elemente werden innerhalb einer Textzeile dargestellt. Sie beginnen nicht automatisch in einer neuen Zeile.

div.example {
  display: inline;
}

Bei Inline-Elementen wirken horizontale Werte für padding und margin wie erwartet. Vertikale Außenabstände verändern den Abstand zwischen den Textzeilen jedoch nicht.

Die Eigenschaften width und height bestimmen bei gewöhnlichen Inline-Elementen nicht die Größe der Inlinebox.

display: inline-block

Ein Element mit display: inline-block steht wie ein Inline-Element innerhalb einer Zeile. Gleichzeitig kann es mit width, height, padding, border und margin wie eine Blockbox gestaltet werden.

.box {
  display: inline-block;
  width: 150px;
  min-height: 75px;
  margin: 10px;
  padding: 10px;
  border: 1px solid red;
}

Abstände zwischen Inline-Block-Elementen

Leerzeichen und Zeilenumbrüche zwischen Inline-Block-Elementen werden wie gewöhnliche Textleerzeichen behandelt. Dadurch entsteht zwischen den Elementen ein kleiner Abstand.

<div class="box">Box 1</div>
<div class="box">Box 2</div>
<div class="box">Box 3</div>

Dieser Abstand ist kein CSS-Fehler. Für moderne Komponentenlayouts sind Flexbox oder Grid meistens besser geeignet. Dort kann der gewünschte Abstand gezielt mit gap festgelegt werden.

.container {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
}

display: list-item

Mit display: list-item erhält ein Element das Darstellungsverhalten eines Listeneintrags. Es kann dadurch einen Listenmarker erzeugen.

span.list-entry {
  display: list-item;
  margin-left: 2rem;
  list-style-type: square;
}

Für echte Listen sollten aus semantischen Gründen trotzdem <ul>, <ol> und <li> verwendet werden.

display: flow-root

Mit display: flow-root erzeugt ein Element einen neuen Block Formatting Context. Dadurch kann das Element unter anderem enthaltene Float-Elemente vollständig umschließen.

.container {
  display: flow-root;
  padding: 1rem;
  border: 1px solid #777;
}

.container img {
  float: left;
  margin-right: 1rem;
}

flow-root ist heute eine saubere Möglichkeit für einen sogenannten Clearfix. Es ist dafür besser geeignet als ein zweckentfremdetes overflow: auto.

Flexbox und Grid aktivieren

Mit display: flex oder display: grid wird ein Element zum Layoutcontainer. Seine direkten Kindelemente werden dadurch zu Flex- oder Grid-Items.

.flex-container {
  display: flex;
  gap: 1rem;
}

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1rem;
}

Flexbox eignet sich besonders für eindimensionale Layouts entlang einer Hauptachse. Grid eignet sich besonders für zweidimensionale Layouts mit Zeilen und Spalten. Beide Layoutmodelle werden in eigenen Kapiteln ausführlich behandelt.

Display-Werte für Tabellen

Werte wie table, table-row, table-cell und table-caption erzeugen das Darstellungsverhalten von Tabellenelementen.

Diese Werte werden im Kapitel „Tabellen und display“ behandelt. Für echte tabellarische Daten sollten weiterhin die semantischen HTML-Tabellenelemente verwendet werden.

display: contents

Mit display: contents erzeugt das Element selbst grundsätzlich keine eigene Box. Seine Kindelemente werden so in das Layout einbezogen, als wären sie direkte Kinder des übergeordneten Elements.

.wrapper {
  display: contents;
}

Der Wert kann beispielsweise bei Grid- und Flexbox-Layouts nützlich sein. Er sollte jedoch vorsichtig eingesetzt werden, weil die Auswirkungen auf Semantik, Barrierefreiheit und bestimmte Browserfunktionen geprüft werden müssen.

Float und Clear

Die Eigenschaft float positioniert ein Element an der linken oder rechten Seite seines Containers. Nachfolgender Inline-Inhalt, beispielsweise Text, kann um das Float-Element herumfließen.

Float wurde früher häufig für vollständige Seitenlayouts verwendet. Dafür stehen heute mit Flexbox und Grid wesentlich besser geeignete Layoutmodelle zur Verfügung. Float ist weiterhin sinnvoll, wenn Text beispielsweise ein Bild umfließen soll.

Eigenschaft Bedeutung Wichtige Werte
float Element seitlich positionieren und Text umfließen lassen none, left, right, inline-start, inline-end
clear Umfließen durch vorhergehende Float-Elemente verhindern none, left, right, both, inline-start, inline-end

float

Mit float: left wird ein Element an der linken Seite seines Containers angeordnet. Nachfolgender Text fließt auf der rechten Seite um das Element herum. Bei float: right geschieht dies spiegelverkehrt.

.article-image {
  float: left;
  width: 280px;
  height: auto;
  margin: 0 1rem 0.5rem 0;
}
<article>
  <img
    class="article-image"
    src="images/garten.jpg"
    alt="Blühender Garten mit einem kleinen Teich"
    width="800"
    height="600"
  >

  <p>
    Dieser Text fließt rechts um das Bild herum. Sobald unterhalb des Bildes
    wieder genügend Platz vorhanden ist, verwendet der Text die gesamte Breite.
  </p>
</article>

Wichtige Werte für float

  • none: Das Element wird nicht als Float positioniert. Dies ist der Standardwert.
  • left: Das Element wird links positioniert.
  • right: Das Element wird rechts positioniert.
  • inline-start: Das Element wird am Anfang der Schreibrichtung positioniert.
  • inline-end: Das Element wird am Ende der Schreibrichtung positioniert.

Die logischen Werte inline-start und inline-end berücksichtigen die Schreibrichtung des Dokuments.

Float-Elemente im Container umschließen

Ein Float-Element wird teilweise aus dem normalen Dokumentfluss genommen. Enthält ein Container ausschließlich Float-Elemente, kann seine automatisch berechnete Höhe deshalb zusammenfallen.

Eine moderne Lösung ist display: flow-root am Elternelement.

.float-container {
  display: flow-root;
  padding: 1rem;
  border: 1px solid #777;
}

.float-container img {
  float: left;
  margin-right: 1rem;
}

Früher wurde dafür häufig ein sogenannter Clearfix oder overflow: auto eingesetzt. flow-root beschreibt den gewünschten Zweck heute direkter und verursacht keinen unbeabsichtigten Scrollbereich.

clear

Mit clear wird festgelegt, dass ein Element nicht neben bestimmten vorhergehenden Float-Elementen stehen darf.

.next-section {
  clear: both;
}

Wichtige Werte für clear

  • none: Float-Elemente werden nicht berücksichtigt. Dies ist der Standardwert.
  • left: Das Element wird unter vorhergehenden links ausgerichteten Float-Elementen angeordnet.
  • right: Das Element wird unter vorhergehenden rechts ausgerichteten Float-Elementen angeordnet.
  • both: Das Element wird unter links und rechts ausgerichteten Float-Elementen angeordnet.
  • inline-start und inline-end: Logische Werte, die die Schreibrichtung berücksichtigen.

Float nicht für vollständige Seitenlayouts

Mehrspaltige Seitenlayouts wurden früher häufig mit mehreren Float-Elementen, Prozentbreiten und sorgfältig berechneten Außenabständen aufgebaut. Diese Methode ist fehleranfällig und nur schwer responsiv zu gestalten.

Für nebeneinanderstehende Boxen sollte heute Flexbox oder Grid verwendet werden.

.card-container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 1rem;
}

Positionieren

Die Eigenschaft position bestimmt, nach welchem Verfahren ein Element positioniert wird. Abhängig vom verwendeten Wert können die sogenannten Inset-Eigenschaften eingesetzt werden.

Dazu gehören die physischen Eigenschaften top, right, bottom und left sowie die logischen Eigenschaften inset-inline-start, inset-inline-end, inset-block-start und inset-block-end.

Eigenschaft Bedeutung Wichtige Werte
position Bestimmt die Positionierungsart static, relative, absolute, fixed, sticky
top, right, bottom, left Physische Abstände zu den Bezugskanten auto, Längenangaben, Prozentangaben
inset Kurzschreibweise für die vier physischen Inset-Eigenschaften ein bis vier Werte
z-index Beeinflusst die Stapelreihenfolge auto, Ganzzahl
clip-path Schneidet ein Element entlang einer Form zu beispielsweise inset(), circle(), ellipse() oder polygon()

position: static

static ist der Standardwert. Das Element bleibt im normalen Dokumentfluss. Die Eigenschaften top, right, bottom, left und z-index haben bei einem gewöhnlichen statisch positionierten Element keine positionierende Wirkung.

.box {
  position: static;
}

Top, Right, Bottom, Left und Inset

Die Eigenschaften top, right, bottom und left bestimmen die Abstände eines positionierten Elements zu seinen Bezugskanten.

.box {
  position: absolute;
  top: 20px;
  right: 20px;
}

Mit inset können alle vier Werte in einer Kurzschreibweise notiert werden. Die Reihenfolge entspricht top, right, bottom und left.

.box {
  position: absolute;
  inset: 20px 30px 40px 50px;
}

Mit inset: 0 wird ein absolut positioniertes Element an allen vier Kanten seines Bezugselements ausgerichtet.

.overlay {
  position: absolute;
  inset: 0;
}

position: relative

Ein relativ positioniertes Element bleibt im normalen Dokumentfluss. Es kann ausgehend von seiner ursprünglichen Position verschoben werden. Der ursprünglich reservierte Platz bleibt dabei erhalten.

.box {
  position: relative;
  top: 10px;
  left: 10px;
}

position: relative wird außerdem häufig ohne Verschiebung verwendet, um ein Bezugselement für absolut positionierte Nachkommen zu erzeugen.

position: absolute

Ein absolut positioniertes Element wird aus dem normalen Dokumentfluss genommen. Andere Elemente verhalten sich daher grundsätzlich so, als würde es dort keinen Platz belegen.

Als Bezug dient normalerweise der nächste Vorfahre, der einen anderen position-Wert als static besitzt. Gibt es keinen solchen Vorfahren, richtet sich das Element am sogenannten Initial Containing Block aus.

.card {
  position: relative;
}

.card-badge {
  position: absolute;
  top: 1rem;
  right: 1rem;
}
<article class="card">
  <span class="card-badge">Neu</span>
  <h3>Excel-Grundlagen</h3>
  <p>Formeln und Zellbezüge verständlich erklärt.</p>
</article>

Elemente innerhalb eines Containers positionieren

.image-container {
  position: relative;
  width: min(100%, 900px);
  min-height: 355px;
  margin-inline: auto;
  border: 1px solid green;
}

.image-left,
.image-right {
  position: absolute;
  top: 20px;
  width: calc(50% - 30px);
}

.image-left {
  left: 20px;
}

.image-right {
  right: 20px;
}

.image-container img {
  display: block;
  width: 100%;
  height: auto;
}

Für ein gewöhnliches responsives Layout mit zwei Bildern wäre Grid oder Flexbox einfacher. Absolute Positionierung ist besonders sinnvoll, wenn Elemente gezielt überlagert oder an einer bestimmten Stelle innerhalb einer Komponente befestigt werden sollen.

position: fixed

Ein Element mit position: fixed wird aus dem normalen Dokumentfluss genommen. Es bleibt beim Scrollen normalerweise an derselben Stelle im Viewport.

.back-to-top {
  position: fixed;
  right: 1rem;
  bottom: 1rem;
  padding: 0.75rem 1rem;
}

Bestimmte Eigenschaften eines Vorfahren, beispielsweise manche transform- oder filter-Werte, können einen anderen Bezugskontext für ein fixiertes Element erzeugen.

Fixierte Elemente dürfen wichtige Inhalte nicht verdecken. Das ist besonders auf kleinen Bildschirmen und bei starker Seitenvergrößerung zu prüfen.

position: sticky

Ein Sticky-Element verhält sich zunächst wie ein Element im normalen Dokumentfluss. Beim Scrollen bleibt es innerhalb seines Scrollcontainers an einer festgelegten Grenze haften.

.scroll-container {
  height: 300px;
  overflow-y: auto;
  border: 1px solid #777;
}

.sticky-heading {
  position: sticky;
  top: 0;
  padding: 1rem;
  background-color: lightpink;
}

Damit das Sticky-Verhalten sichtbar wird, muss mindestens eine Inset-Eigenschaft wie top festgelegt werden. Außerdem muss innerhalb des Scrollcontainers genügend Inhalt zum Scrollen vorhanden sein.

Das frühere Browserpräfix position: -webkit-sticky ist für aktuelle Browser normalerweise nicht mehr erforderlich.

Stapelreihenfolge mit z-index

Wenn sich Elemente überlappen, kann z-index ihre Stapelreihenfolge beeinflussen. Ein höherer Wert wird innerhalb desselben Stapelkontexts normalerweise vor einem niedrigeren Wert dargestellt.

.card {
  position: relative;
}

.background-box {
  position: absolute;
  inset: 20px;
  z-index: 1;
}

.foreground-box {
  position: absolute;
  inset: 40px;
  z-index: 2;
}

Mögliche Werte für z-index

  • auto: Es wird keine eigene numerische Stapelstufe festgelegt. Dies ist der Standardwert.
  • Eine Ganzzahl, beispielsweise 0, 1, 10 oder -1

z-index wirkt nicht einfach global auf der gesamten Webseite. Elemente werden innerhalb von Stapelkontexten angeordnet. Ein untergeordnetes Element kann den Stapelkontext seines Elternelements auch mit einem sehr hohen z-index nicht verlassen.

Neue Stapelkontexte können unter anderem durch positionierte Elemente mit einem von auto abweichenden z-index, durch opacity unter 1 oder durch transform entstehen.

Elemente mit clip-path zuschneiden

Die frühere Eigenschaft clip ist veraltet. Heute wird clip-path verwendet, um ein Element entlang einer geometrischen Form zuzuschneiden.

.image-circle {
  width: 250px;
  aspect-ratio: 1;
  object-fit: cover;
  clip-path: circle(50%);
}
.image-inset {
  clip-path: inset(20px 40px 20px 40px);
}
.image-polygon {
  clip-path: polygon(
    50% 0,
    100% 100%,
    0 100%
  );
}

Im Gegensatz zur veralteten Eigenschaft clip funktioniert clip-path nicht nur bei absolut positionierten Elementen und unterstützt verschiedene Formen.