Zum Hauptinhalt springen

Alles Kästchen!

Jede Webseite besteht nur aus Kästchen!

Text?....ein Kästchen!

Sie glauben das nicht?
Dann schauen Sie nachstehend nochmal auf die Überschrift die Sie gerade oben drüber gelesen haben. Zur besseren Sichtbarkeit wurde der nachstehende Text mit einem roten Rand versehen.)

Nachstehend sehen Sie obigen Text mit "Kästchenmarkierung" in rot:

Alles Kästchen!

Jede Webseite besteht nur aus Kästchen!

Text?....ein Kästchen!

Sie glauben das nicht?
Dann schauen Sie nachstehend nochmal auf die Überschrift die Sie gerade obendrüber gelesen haben:
Zur besseren Sichtbarkeit wurde der nachstehende Text mit einem roten Rand versehen.)

Ein Bild? ....
auch ein Kästchen!

Alternativtext

Ein rundes Bild? ....
auch ein Kästchen :-)

Beispiel für rundes Bild

Sehen Sie den weissen rechteckigen Hintergrund des Bildes? Das ist unser Kästchen!

Hier beginnt nun der Probetext......

Lorem Ipsum ist ein einfacher Demo-Text für die Print- und Schriftindustrie. Lorem Ipsum ist in der Industrie bereits der Standard Demo-Text seit 1500, als ein unbekannter Schriftsteller eine Hand voll Wörter nahm und diese durcheinander warf um ein Musterbuch zu erstellen. Es hat nicht nur 5 Jahrhunderte überlebt, sondern auch in Spruch in die elektronische Schriftbearbeitung geschafft (bemerke, nahezu unverändert). Bekannt wurde es 1960, mit dem erscheinen von "Letraset", welches Passagen von Lorem Ipsum enhielt, so wie Desktop Software wie "Aldus PageMaker" - ebenfalls mit Lorem Ipsum.

Es gibt lange Kästchen und kurze Kästchen.

Block-Elemente: Lange Kästchen
Inline-Elemente: Kurze Kästchen

Zuerst der Unterschied zwischen Block- u. Inline-Elementen

Block-Elemente nehmen die gesamte verfügbare Bildschirmbreite ein:

header
main
section
article
footer
    ul
    ol
  • li
  • div

    h1 bis h6

    p

    Inline-Elemente nehmen dagegen nur den unbedingt benötigten Platz ein:

    aAnchor/Anker-Element (Links zum Anklicken)

    spanSpan-Element (um im Textfluss einen Bereich zu um"span"nen und zu designen.

    strongstrong-Element und weitere Textmarkierungen

    Bilder (hätte ich zuerst auch nicht geglaubt!)

    Die gute Nachricht: Man kann Block-Elemente auch umwandeln in Inline-Elemente und umgekehrt :-)

    Wir wandeln die Block-Elemente nun in Inline-Elemente um:

    Dazu müssen wir den "neuen" Blockelementen aber auch eine "width" angeben.

    header {
    display: inline-block;
    width: 14rem;
    }
    main {
    display: inline-block;
    width: 50%;
    }
    section
    article
    footer
      ul
      ol
  • li
  • div

    h1 bis h6

    p

    Inline-Elemente in Block-Elemente umgewandelt:

    aAnchor/Anker-Element (Links zum Anklicken)

    spanSpan-Element (um im Textfluss einen Bereich zu um"spannen" und zu designen.

    strong strong-Element und weitere Textmarkierungen.

    Image als Inline-ElementBilder

    Beschreibung von Block- u. Inline-Elementen (eng.)


    (Quelle: https://www.w3schools.com/html/html_blocks.asp)

    Block-Elemente:

    Inline-Elemente:

    Wo wohnen die Kästchen?

    Zu Anschauungszwecken mache ich die Kästchen einer Demoseite zuerst mal sichtbar.

    Hmm..., mit dieser Demoseite ist es zu unübersichtlich die Adressierung aufzuzeigen. Das Bild sollte etwas einfacher sein!

    Jetzt mit kleineren Kästchen:

    Die Kästchen sind alle inneinander verschachtelt.

    • Das äussere Kästchen ist hier der header.
    • Im header beinden sich zwei Kästchen, p und nav.
    • Im nav sind auch 2 Kästchen, nämlich 2 ul.
    • ul 1: (linkes ul):
    • Im linken ul sind 4 li. Die erste 3 li haben jeweils noch ein a.
    • Im vierten li befindet sich nur Text.
    • ul 2: (rechtes ul):.
    • In ul 2 befinden sich 4 li.


    Das wäre jetzt unser Beispiel, an dem die Adressierung der Kästchen geübt werden kann:
    Nicht schön, aber es ist ein realistisches Beispiel und keine "Fantasieboxen". ;-)

    Die Verwandschaftsverhältnisse der Kästchen:

    Eine HTML-Datei ist wie ein Stammbaum aufgebaut. Es gibt ein Elternelement und die Nachkommen, mit wiederum ihren Nachkommen und Verwandten.

    Innerhalb eines Stammbaums kann ein Mensch (oder "Kästchen") unterschiedlich bezeichnet werden.
    Z.B.:
    - Ich bin der Sohn meiner Eltern und gleichzeitig der Vater (Eltern-Element) meiner Kinder.
    - Ich habe einen Bruder und drei Schwestern. (Alles Geschwister).
    - Meine Kinder haben auch Kinder.
    - beinahe hätte ich Opa und Oma vergessen...

    Deshalb haben HTML-Elemente unterschiedliche Beschreibungen. Je nach Standpunkt ihrer Beziehungen zueinander.

    Mein Bruder "Hans":
    - Hans ist mein Geschwister-Element.
    - Hans ist das Elternelement von seinen Kindern.
    - Hans hat als Elternelement unsere Eltern
    - Hans hat als Vorfahrenelement auch noch das Elternelement unserer Eltern (unsere Grosseltern).
    - Hans hat als Geschwisterelement auch unsere drei Schwestern und ist das Vorfahren-Element seiner Enkelkinder.

    Na,- raucht der Kopf?
    Ok, genug "Hütchenspielerei"... :-)

    Es gibt verschiedene Methoden zur eindeutigen Adressierung eines HTML-Elements:

    Um ein HTML-Element anzusprechen, benötige ich das Wissen, an welcher Stelle es im "Stammbaum" des Dokumentes steht. Das könnte ich jetzt mit einer ellenlangen Beschreibung des Verwandschaftsverhältnisses zu ihm machen.

    Methode 1: Über die Beschreibung des eingenommenen Platzes im Stammbaum.

    Der Platz (die Zieladresse) kann mit einer "Wegbeschreibung" (Pfad zum Ziel) im "Stammbaum" angegeben werden.

    Der Stammbaum: Ausschnitt eines Document Tree

    body
    <div class="content"
    nav
    h1
    p
    p
    hr
    ul
    em
    li
    li
    li

    In einem menschlichen Stammbaum kann eine Person auf unterschiedliche Weise beschrieben werden.
    Das gleiche gilt auch für ein Element in HTML.

    Hier als Beispiel das rote "nav":

    • ● ein Kind (Child) des <body>-Elements
    • ● ein Eltern-Element (Parent) eines <ul>-Elements
    • ● ein Vorfahre (Ancestor) der <li> -Elemente
    • ● ein Geschwister (Sibling) des <div>-Elements mit der class= "content" das die selben Eltern <body> hat

    Selektoren - die Kästchenauswähler

    Beschreibung von Selektoren unter https://wiki.selfhtml.org/wiki/CSS/Selektoren

    Element-Selektoren

    Kästchenauswahl mit (HTML) Element-Selektoren:

    Elementselektoren sind vielleicht am einfachsten zu verstehen. Elementselektoren wählen sämtliche HTML-Elemente aus, die dem Typ entsprechen. Egal wo sich die Elemente auf der Seite befinden.

    Ist das betreffende Stylesheet auf jeder Seite vorhanden, dann können die ausgewählte HTML-Elemente auf sämtlichen Seiten mit einer CSS-Anweisung angesprochen werden!
    z.B. die Schriftart ändern.

    Beispiel: Element-Selektoren

    Zuerst die Listenpunkte der "ul" entfernen.
    ul {list-style: none;}
    
    Das p-Element bekommt einen blauen Hintergrund mit etwas Opazität (0.34).
    p {background-color: rgba(0, 0, 255, 0.34);}
    
    Dem "header" werden die Ecken abgerundet:
    header {border-radius: 10px;}
    
    Mit einer CSS-Anweisung erreiche ich sämtliche Listenelemente "li"
    li {background-color: yellow;}
    
    Das gleiche gilt für die "Anchors/Anker/Links" a"
    a {color: #ff0000;}
    

    Ich benötige aber nur ein bestimmtes Kästchen!?

    Element-Selektoren und ihre Kombinationen

    Um ein bestimmtes Kästchen "herauszupicken" werden die Element-Selektoren kombiniert. Sie werden als "Wegbeschreibung" im CSS-Stylesheet hintereinander geschrieben.

    Nehmen wir mal an, ich möchte im ersten "ul" beim zweiten "a" die Schriftfarbe color, die Schriftart font-family und die Schrift font-weight fett anzeigen, ändern.


    Das Problem hier ist, wir haben 2 ul als Kinder von nav.

    Element-Selektoren kombinieren am Beispiel nth-of-child:

    Das wäre die Lösung für das erste ul:
    header nav ul:first-child li:nth-child(2) a {
        font-family: sans-serif;
        font-weight: bold;
        color: red;
    }
    Das versteht doch kein Mensch, oder?
    Der header ist das Elternelement vom Ganzen. Also die Haustüre von Allem. Jetzt machen wir die Tür auf und gehen in den:
    header Im header steht jeweils ein Haus mit dem Namen p und nav. Hier gehen wir in nav rein und sind jetzt in:
    header nav Wir stehen nun vor den beiden Häusern ul. Sie sehen aus wie Zwillinge! Im HTML-Flow stehen sie allerdings untereinander und sind die Kinder (Child) vom Elternelement nav. Dann gehen wir doch einfach in's Haus des ersten Kindes (Child):
    header nav ul:first-child (Mein Gott sind in dem ul viele Kinder (li) die auch wiederum Kinder (a) haben). Wo wollten wir nochmal hin? Ach ja, das zweite a. Das zweite a befindet sich im zweiten li und das hat auch noch 3 Geschwister.Also müssen wir zuerst in das zweite li: header nav ul:first-child li:nth-child(2) Ok a ich stehe nun direkt vor dir und schnapp dich mit: header nav ul:first-child li:nth-child(2) a { font-family: sans-serif; font-weight: bold; color: red; } Das wäre die CSS-Anweisung für das zweite ul: header nav ul:nth-child(2) li:nth-child(4) { color: red; }

    Das waren aber keine echten Typselektoren in diesem Beispiel ;-)

    Im vorherigen Beispiel wurden nicht nur reine Typselektoren benutzt, da im nav 2 x ul vorhanden war.

    Reine Typselektoren wären header => nav => ul => li => a gewesen.
    Nur,- welches der beiden ul kann man auswählen?
    Hier kam dann der Pseudo-Selektor nth-child() zur Hilfe.
    Tip: zwischen child und den () darf kein Leerzeichen sein!

    Methode 2: Class Selector/Klassen-Selektoren

    Während Typenselektoren sämtliche Elemente die dem Typ entsprechen auswählen, wählen Klassenselektoren nur jene Elemente aus, denen eine "class" zugewiesen wurde. Egal wo sich die Elemente auf der Seite befinden.

    Beispiel class-Selektoren:

    HTML:
    <header>
        <p>Firmenlogo</p>
        <nav>
            <ul>
                <li><a class="rot" href="#">Link 1</a></li>
                <li><a class="gelb" href="#">Link 2</a></li>
                <li><a class="pink" href="#">Link 4</a></li>
                <li  class="grau">Listenelement, nur Text</li>
            </ul>
            <ul>
                <li class="grau">Adresse:</li>
                <li class="gelb">Raffke &Gierschlund</li>
                <li class="pink">Nimmersattstr. 12</li>
                <li class="rot">1234 Golden Town</li>
            </ul>
        </nav>
    </header>
    
    
    CSS:
    .rot {
        font-weight: bold;
        color: #fff;
        background-color: red;
    }
    
    .gelb {
        font-weight: bold;
        background-color: yellow;
    }
    
    .pink {
        font-weight: bold;
        background-color: pink;
    }
    
    .grau {
        font-weight: bold;
        color: #fff;
        background-color: gray;
     }
    

    Der Vorteil von Class-Selektoren ist, dass der dazugehörende CSS-Code nur einmal geschrieben werden muss. Danach kann er überall auf der/den Seite(n) wiederverwendet werden.

    Typenselektoren und Klassen kombinieren:

    Im vorletzten Beispiel mit den beiden ul's standen wir vor dem Problem, das linke ul herauszufischen.
    Hier wäre eine Kombination aus Typ-u. Klassenselektor auch möglich gewesen.

    Beispiel Typ-u. Klassenselektor:

    HTML:
    <header>
        <p>Firmenlogo</p>
        <nav>
            <ul>
                <li><a href="#">Link 1</a></li>
                <li><a class="rot" href="#">Link 2</a></li>
                <li><a href="#">Link 4</a></li>
                <li>Listenelement, nur Text</li>
            </ul>
            <ul>
                <li>Adresse:</li>
                <li>Raffke &Gierschlund</li>
                <li>Nimmersattstr. 12</li>
                <li class="rot">1234 Golden Town</li>
            </ul>
        </nav>
    </header>
    
    CSS:
    ul li .rot {
        font-weight: bold;
        color: red;
    }
    
    ul:nth-child(2) .rot {
        font-size: 300;
        color: red;
        background-color: yellow;
    }
    

    ul und li sind Typselektoren und .rot ist ein Klassenselektor.

    Auflistung von weiteren Selektoren

    Beispiel: Element-Selektor

    Wählt alle angegebenen Elemente, egal wo sie stehen.

    HTML:
    <header>
        <p>Firmenlogo</p>
        <nav>
            <ul>
                <li><a href="#">Link 1</a></li>
                <li><a href="#">Link 2</a></li>
                <li><a href="#">Link 4</a></li>
                <li>Listenelement, nur Text</li>
            </ul>
            <div>
                <p>Text 1</p>
                <p>Text 2</p>
                <p>Text 3</p>
                <p>Text 4</p>
                <p>Text 5</p>
            </ul>
        </nav>
    </header>
    
    CSS:
    p {background-color: red;}  
    ul {background-color: yellow;}
    div {background-color: lightgreen;}
    a {background-color: lightblue;}
    

    Beispiel: Element => Class-Selektor

    Wählt alle Elemente die ein Kindelement mit der class="blafasel" haben, egal wo sie stehen.

    HTML:
    <header>
        <p class="blafasel">Firmenlogo</p>
        <nav>
            <ul>
                <li class="blafasel"><a href="#">Link 1</a></li>
                <li><a href="#">Link 2</a></li>
                <li><a href="#">Link 4</a></li>
                <li>Listenelement, nur Text</li>
            </ul>
            <div>
                <p>Text 1</p>
                <p>Text 2</p>
                <p class="blafasel">Text 3</p>
                <p>Text 4</p>
                <p>Text 5</p>
            </ul>
        </nav>
    </header>
    
    CSS:
    p.blafasel {background-color: yellow;}  
    li .blafasel {background-color: yellow;}  Funktioniert nicht: es darf kein Leerzeichen dazwischen li und .blafasel sein!
    

    Beispiel: Class => Class-Selektor

    Je nach Schreibweise ;-)

    .blafasel.fett oder .blafasel .fett
    CSS:
    
    Beide Klassen müssen an dem Element vorhanden sein.
    Achtung: ohne Leerzeichen!
    blafasel.fett { background-color: yellow; } .fett { font-weight: bold; color: green; } Mit Leerzeichen! Hier ist .blafasel das Elternelement von .fett.
    .blafasel .fett { background-color: lawngreen; }

    Beispiel: Element + erster Nachfahre

    Das vorherige Element muss mit seinem Endtag geschlossen sein.

    CSS:
    
    h1 + p {background-color: red;}
    div-1 + p {background-color: green;}
    div-2 + p {background-color: yellow;}
    

    Weitere brauchbare Selektoren

    Beispiel: ::before, ::after, :first-child, :last-child

    Bitte aufpassen: :: oder :

    CSS:
    
    h1::before {
        content: "h1::before ";
        color: red;
    }
    
    h1::after {
        content: " h1::after ";
        color: red;
    }
            
    p:first-child {
        background-color: yellow;
    }
    
    p:last-child {
        background-color: lightgreen;
    }
    

    Weitere brauchbare Selektoren

    Beispiel: p:nth-child(2), p:nth-of-type(2)

    Bitte aufpassen: :: oder :

    CSS:
                    
    .div-1 p:nth-child(2) {
        background-color: yellow;
        }
    
    .div-1 p:nth-child(5) {
        background-color: yellow;
        }
    
            
    .div-2 p:nth-child(1){
        background-color: yellow;
        }
            
    .div-2 p:nth-of-type(3){
        background-color: red;
        }
    
    .div-2 p:nth-of-type(4){
        background-color: red;
        }
        
    /* Hier funktioniert (5) nicht aber (6)?! Warum? */
    .div-2 p:nth-child(6){ 
        background-color: yellow; 
        }
    

    Weitere brauchbare Selektoren

    Beispiel: first-of-type und last-of-type

    Bitte aufpassen: :: oder :

    CSS:
                    
    p:first-of-type {
        background-color: yellow;
        }
    p:last-of-type {
        background-color:lightgreen;
        }
            
    li:first-of-type {
        background-color: yellow;
        } 
            
    li:last-of-type {
        background-color: lightgreen;
        }
    

    Noch ein paar Selektoren, dann ist Schluss.

    Beispiel: :nth-of-type(), p::first-letter, p::first-line

    Bitte aufpassen: :: oder :

    CSS:
    
    .div-1 p:nth-of-type(2){
        background-color: yellow;
        }
            
    .div-1 p:nth-of-type(5){
        background-color: yellow;
        }
        
    /* Das zweite Div und dann H3 */
     div:nth-of-type(2) h3{
        color: red;
        }
    
    
    /* Nachstehendes gilt für den Text weiter unten */
    First Letter:
    .p1 {
        text-align: unset;  /* Textposition zurücksetzen, war center */
        text-indent: 2em;   /* Erste Zeile einrücken */
        }
     .p1::first-letter {
        font-size: 2rem;    /* Erster Buchstaben einrücken */
        color: red;         /* Erster Buchstaben rot */
        }
    
    First Line:
    .p2{
        text-align: unset;  /* Textposition zurücksetzen, war center */
        }
        
    .p2::first-line {
        color: red;         /* Erste Zeile rot */
        }
    

    Keine Angst...

    Das war jetzt alles etwas viel und überwältigend. Lassen Sie sich nicht entmutigen, Sie lernen das in der Praxis viel einfacher als beim blosen Lesen.

    Sie haben auf dieser Seite gelesen, wie man ein Kästchen adressieren kann/könnte. Das ist die unbedingte Voraussetzung um die HTML-Elemente auch platzieren oder verschieben zu können.

    Als Nächstes wäre jetzt die Positionierung dran.