4 Grundlagen von CSS

4.1 Syntax und Struktur

CSS ist eine deklarative Sprache, die aus Regeln zur Gestaltung von HTML-Elementen besteht. Die Basisstruktur einer CSS-Regel umfasst Selektor, Eigenschaft und Wert. Dieses Kapitel behandelt die Syntax und Struktur von CSS sowie die Grundlagen des Schreibens und Organisierens von CSS-Code.

4.1.1 Aufbau einer CSS-Regel

Eine CSS-Regel besteht aus einem Selektor und einem Deklarationsblock:

selektor {
    eigenschaft: wert;
}

4.1.2 Beispiel: Einfache CSS-Regel

p {
    color: blue;
    font-size: 16px;
}

Diese Regel setzt die Textfarbe von <p>-Elementen auf Blau und die Schriftgröße auf 16 Pixel.

4.1.3 Eigenschaften und Werte

CSS-Eigenschaften definieren das Styling eines Elements. Für jede Eigenschaft ist ein Wert erforderlich, der den Stil beeinflusst. Häufig genutzte Eigenschaften sind:

4.1.4 Einheiten in CSS

CSS unterstützt verschiedene Maßeinheiten:

Beispiel für verschiedene Einheiten:

h1 {
    font-size: 2em; /* 2-mal die Schriftgröße des Elternelements */
}

div {
    width: 50%; /* 50% der Breite des Elternelements */
}

4.1.5 Kommentare in CSS

Kommentare helfen, den Code zu strukturieren und Notizen für spätere Bearbeitungen zu hinterlassen. Kommentare in CSS werden durch /* Kommentar */ definiert und können in jeder Zeile oder am Ende einer Zeile stehen.

/* Dies ist ein Kommentar */
p {
    color: green; /* Textfarbe grün */
}

4.1.6 Externe, Interne und Inline-CSS

CSS kann auf verschiedene Weisen in eine HTML-Datei eingebunden werden:

4.1.7 Die Kaskade und das Vererbungskonzept

CSS steht für Cascading Style Sheets. Die Kaskade legt fest, welche CSS-Regeln angewendet werden, wenn mehrere Regeln auf ein Element zutreffen. Der Kaskadenmechanismus basiert auf:

  1. Spezifität: Je spezifischer ein Selektor, desto höher seine Priorität.
  2. Reihenfolge: Bei gleich spezifischen Selektoren wird die zuletzt deklarierte Regel angewendet.

CSS unterstützt auch Vererbung, was bedeutet, dass bestimmte Stileigenschaften automatisch auf untergeordnete Elemente angewendet werden.

/* Beispiel für Vererbung */
body {
    font-family: Arial, sans-serif;
}

p {
    font-size: 14px;
}

Hier erben alle <p>-Elemente die Schriftfamilie Arial vom <body>-Tag, während die Schriftgröße explizit festgelegt wird.

4.2 Das Box-Modell

Das CSS-Box-Modell ist ein zentrales Konzept in der Webgestaltung. Es beschreibt, wie HTML-Elemente auf einer Seite dargestellt und positioniert werden. Jedes HTML-Element wird als rechteckige Box dargestellt, die aus mehreren Bereichen besteht: dem Inhalt, dem Innenabstand (Padding), dem Rahmen (Border) und dem Außenabstand (Margin).

4.2.1 Aufbau des Box-Modells

Ein Element im Box-Modell setzt sich aus folgenden Bereichen zusammen:

  1. Inhalt (Content): Der eigentliche Inhalt eines Elements, z. B. Text oder Bild.
  2. Innenabstand (Padding): Der Abstand zwischen dem Inhalt und dem Rand (Border). Padding wird stets innerhalb der Box hinzugefügt und vergrößert die Gesamtfläche.
  3. Rand (Border): Der Rahmen, der die Box umgibt. Der Rahmen kann in Dicke und Stil angepasst werden.
  4. Außenabstand (Margin): Der Abstand zwischen der Box und benachbarten Elementen. Der Margin vergrößert den Abstand um die Box herum, ohne ihre Größe selbst zu verändern.

4.2.1.1 Visualisierung des Box-Modells

Eine Box wird folgendermaßen aufgebaut:

+---------------------------+
|         Margin            |
| +-----------------------+ |
| |       Border          | |
| | +-------------------+ | |
| | |     Padding       | | |
| | | +--------------+  | | |
| | | |   Content    |  | | |
| | | +--------------+  | | |
| | +-------------------+ | |
| +-----------------------+ |
+---------------------------+

4.2.1.2 Beispiel für das Box-Modell

.box {
    width: 200px;
    height: 100px;
    padding: 20px;
    border: 5px solid black;
    margin: 10px;
}
<p style="margin: 0;">Dies ist eine Box mit Breite, Höhe, Padding, Border und Margin.</p>
<div style="width: 200px; height: 100px; padding: 20px; border: 5px solid black; margin: 10px; background-color: #e0e0e0; position: relative;">
    <p style="margin: 0;">Inhalt der Box</p>
    <!-- Visualisierung des Innenabstands (Padding) -->
    <div style="position: absolute; top: 0; left: 0; right: 0; bottom: 0; padding: 20px; pointer-events: none; background-color: rgba(255, 0, 0, 0.1);">
        <span style="color: red; font-size: 12px; position: absolute; top: 5px; left: 5px;">Padding (20px)</span>
    </div>
    <!-- Visualisierung des Rahmens (Border) -->
    <div style="position: absolute; top: -5px; left: -5px; right: -5px; bottom: -5px; border: 5px solid rgba(0, 0, 255, 0.3); pointer-events: none;">
        <span style="color: blue; font-size: 12px; position: absolute; bottom: 0px; left: 5px;">Border (5px)</span>
    </div>
    <!-- Visualisierung des Außenabstands (Margin) -->
    <div style="position: absolute; top: -30px; left: -15px; right: -15px; bottom: -15px; border: 1px dashed rgba(0, 255, 0, 0.5); pointer-events: none;">
        <span style="color: green; font-size: 12px; position: absolute; top: 5px; left: 5px;">Margin (10px)</span>
    </div>
</div>

In diesem Beispiel:

Die Gesamtbreite der Box ergibt sich hier aus:

Gesamtbreite = Inhalt + Padding links + Padding rechts + Border links + Border rechts + Margin links + Margin rechts
             = 200px + 20px + 20px + 5px + 5px + 10px + 10px = 270px

Die Gesamthöhe wird analog berechnet.

4.2.1.3 Box-Sizing und das Box-Modell anpassen

Standardmäßig vergrößern Padding und Border die Gesamtgröße einer Box. Mit der CSS-Eigenschaft box-sizing lässt sich dieses Verhalten ändern, sodass Padding und Border innerhalb der definierten width und height bleiben:

.box {
    width: 200px;
    height: 100px;
    padding: 20px;
    border: 5px solid black;
    margin: 10px;
    box-sizing: border-box;
}

Durch box-sizing: border-box; wird die Gesamtgröße der Box auf 200px Breite und 100px Höhe begrenzt, inklusive Padding und Border.

4.2.1.4 Padding und Margin im Detail

4.2.1.5 Margin Collapse

Ein wichtiges Merkmal des Box-Modells ist die sogenannte Margin Collapse. Wenn zwei vertikale Margins aufeinandertreffen (z. B. von zwei benachbarten Elementen), werden sie zusammengefasst und nehmen den größeren der beiden Werte an, anstatt sie zu addieren. Beispiel:

<div class="box1"></div>
<div class="box2"></div>
.box1, .box2 {
    height: 50px;
    margin-bottom: 20px;
    margin-top: 30px;
}

In diesem Fall wird der vertikale Abstand zwischen .box1 und .box2 nicht 50px betragen (20px + 30px), sondern nur 30px, da die beiden Margins kollabieren und nur der größere Wert angewendet wird.

4.3 Einheiten und Maßeinheiten (px, em, rem, %, vh, vw)

CSS bietet eine Vielzahl von Einheiten, um die Größe und Position von Elementen auf einer Webseite zu definieren. Die Wahl der richtigen Einheit hängt vom Kontext ab, in dem sie verwendet wird. Dieses Kapitel behandelt die wichtigsten Einheiten und ihre Verwendung im CSS-Layout.

4.3.1 Absolute und relative Einheiten

Einheiten in CSS lassen sich grundsätzlich in absolute und relative Einheiten unterteilen:

4.3.2 Absolute Einheiten

4.3.2.1 Pixel (px)

px ist die am häufigsten verwendete Einheit für feste Größenangaben, die unabhängig von der Schriftgröße oder des übergeordneten Elements sein sollen.

p {
    font-size: 16px; /* Feste Schriftgröße von 16 Pixel */
}
<p style="font-size: 16px;">Dies ist ein Beispieltext mit fester Schriftgröße von 16px.</p>

4.3.3 Relative Einheiten

Relative Einheiten ermöglichen flexible Layouts, die sich an die Umgebung und Bildschirmgröße anpassen.

4.3.3.1 Em (em)

Die Einheit em bezieht sich auf die Schriftgröße des direkten übergeordneten Elements. Sie ist nützlich für skalierbare Layouts, bei denen sich der Abstand oder die Schriftgröße entsprechend einer Basisgröße anpassen soll.

p {
    font-size: 16px;
}

span {
    font-size: 1.5em; /* 1.5-mal die Schriftgröße des übergeordneten Elements */
}

In diesem Beispiel beträgt die Schriftgröße des <span>-Elements 24px (1.5 × 16px), wenn das <p>-Element eine Schriftgröße von 16px hat.

<p style="font-size: 16px;">
    Text mit <span style="font-size: 1.5em;">größerer Schrift</span> basierend auf der Schriftgröße des übergeordneten Elements.
</p>

4.3.3.2 Rem (rem)

rem steht für „Root em“ und bezieht sich auf die Schriftgröße des Root-Elements (<html>). Es ist eine relative Einheit, jedoch im Vergleich zu em konstanter, da sie unabhängig von der Verschachtelung ist.

html {
    font-size: 16px;
}

p {
    font-size: 1.25rem; /* 1.25 × 16px = 20px */
}

Mit rem bleibt die Skalierung stabil, da sie sich immer auf die Schriftgröße des Root-Elements bezieht.

<p style="font-size: 1.25rem;">Dieser Text nutzt eine Schriftgröße von 1.25rem, was 20px entspricht, wenn das Root-Element auf 16px gesetzt ist.</p>

4.3.3.3 Prozent (%)

Die Prozentangabe ist eine flexible Einheit, die sich auf das übergeordnete Element bezieht. Sie eignet sich besonders für Breiten und Höhen, um Layouts an verschiedene Bildschirmgrößen anzupassen.

div {
    width: 50%; /* 50% der Breite des übergeordneten Elements */
    height: 100%; /* 100% der Höhe des übergeordneten Elements */
}
<p style="margin: 0;">Dieses div nimmt 50% der Breite des übergeordneten Elements ein.</p>

4.3.3.4 Viewport-Einheiten (vh, vw)

Viewport-Einheiten beziehen sich auf die Größe des Ansichtsfensters (Viewport). Sie sind ideal für responsives Design, da sie sich an die Bildschirmgröße anpassen:

Beispiele:

div {
    width: 50vw; /* 50% der Breite des Viewports */
    height: 30vh; /* 30% der Höhe des Viewports */
}
<p style="text-align: center; padding-top: 15vh; margin: 0;">Dieses div nimmt 50% der Breite und 30% der Höhe des Viewports ein.</p>

Viewport-Einheiten eignen sich gut für Fullscreen-Layouts, bei denen die Größe des Inhalts dynamisch an die Bildschirmgröße angepasst wird.

4.3.4 Einsatzbereiche der Einheiten

4.4 Farben und Farbsysteme (Hex, RGB, HSL)

Farben spielen in CSS eine zentrale Rolle, um Designs ansprechend und strukturiert zu gestalten. CSS unterstützt mehrere Farbsysteme, die unterschiedliche Möglichkeiten zur Darstellung und Anpassung bieten: das Hexadezimal-System (Hex), RGB und HSL. Jedes dieser Systeme hat seine spezifischen Anwendungsbereiche und Vorteile.

4.4.1 Hexadezimale Farbcodes (Hex)

Hexadezimale Farbcodes verwenden einen sechsstelligen Code, der mit einem # beginnt und aus drei Zweiergruppen besteht, die Rot, Grün und Blau darstellen. Jede Komponente (Rot, Grün, Blau) wird durch zwei Hexadezimalstellen beschrieben und kann einen Wert von 00 bis FF annehmen.

/* Beispiel für Hex-Farbcode */
p {
    color: #ff5733; /* Helles Orange */
}

Jede Komponente repräsentiert: - #ff – maximaler Rotanteil - #57 – mittlerer Grünanteil - #33 – geringer Blauanteil

Hexadezimale Farben können auch in der Kurzform #rgb verwendet werden, wenn jede Komponente denselben Wert für beide Stellen hat:

p {
    color: #f00; /* entspricht #ff0000, also reines Rot */
}

4.4.2 RGB-Farben

Das RGB-Modell steht für Rot, Grün und Blau und nutzt Werte zwischen 0 und 255 für jede Komponente. Das RGB-Format ist oft intuitiver und ermöglicht es, Farben direkt durch die Intensität der einzelnen Komponenten zu definieren.

/* Beispiel für RGB */
p {
    color: rgb(255, 87, 51); /* entspricht #ff5733 */
}

Eine Variante von RGB ist rgba, bei der das „a“ für den Alpha-Kanal steht und die Transparenz angibt. Der Wert für Alpha reicht von 0 (vollständig transparent) bis 1 (vollständig deckend):

p {
    color: rgba(255, 87, 51, 0.5); /* 50% Transparenz */
}

4.4.3 HSL-Farben

HSL steht für Farbton (Hue), Sättigung (Saturation) und Helligkeit (Lightness). Es ist besonders geeignet für harmonische Farbabstimmungen und intuitives Anpassen der Helligkeit und Sättigung. Die HSL-Darstellung erfolgt in folgendem Format:

color: hsl(hue, saturation, lightness);
/* Beispiel für HSL */
p {
    color: hsl(12, 100%, 60%); /* Helles Orange, entspricht #ff5733 */
}

Ähnlich wie bei RGB gibt es auch für HSL eine Variante mit Alpha-Kanal: hsla. Diese ermöglicht die Angabe von Transparenz:

p {
    color: hsla(12, 100%, 60%, 0.5); /* 50% Transparenz */
}

4.4.4 Vergleich der Farbsysteme

4.4.5 Einsatz von Transparenz und Opazität

CSS bietet verschiedene Möglichkeiten, Transparenzeffekte anzuwenden: - rgba/hsla: Ermöglicht es, die Transparenz nur auf die Farbe anzuwenden, ohne das gesamte Element zu beeinflussen. - opacity: Setzt die Transparenz eines gesamten Elements und beeinflusst dabei auch den Inhalt (wie Text und Bilder).

/* Beispiel für Opazität */
div {
    background-color: #ff5733;
    opacity: 0.7; /* gesamte Box inklusive Inhalt wird transparenter */
}