Anfängers erste Gehversuche mit FlexBox

  • Hallo liebe Leute,


    ich bin dabei mich in FlexBox einzuarbeiten und habe mal ein Seitengerüst erstellt, wie ich es vielleicht haben möchte. Das ist einfach mal eine Übung für mich, um das alles zu verstehen. Ich möchte nächstes Schuljahr eine EINFÜHRUNGS-Kurs WebDesign an unserer Schule geben (bin Lehrer) und will dann auch für mich ein bisl Sicherheit haben (sind ja noch 4 Monate hin).


    Folgendes wollte ich erreichen:

    Im Header Logo, Titel (und mobile Hamburger Button) nebeneinander, darunter die Navigation im Header (Daher der Wrapper im Header).

    Dann ein main-content mit 2 asides (weiß noch nicht genau wie ich die anordne je nach tablet, handy oder pc, muss erst überlegen was ich genau damit mache, wahrscheinlich einmal weiterführende links und einmal ???).

    Und schließlich der Footer als Sticky-footer (Daher der Innenbody im Body).


    Jetzt musste ich ziemlich viel wrappen (body und nav) und springe zwischen flex-direction column und row ziemlich hin und her. Daher zwei (nein drei) Fragen:


    1. Macht das Sinn das alles über FlexBoxen zu lösen?

    2. Kann man das mit FlexBoxen eleganter lösen (guter Stil)?

    3. Gibt es generell Sachen, die so nicht sinnvoll sind, wie ich es jetzt versucht habe?


    Hier erst mal das Stylesheet:

    body {

    display: flex;

    min-height: 100vh;

    flex-direction: column; /* im body sollen header, content und footer untereinander stehen*/

    margin: 0 auto; /*zum zentrieren des Inhaltes auf Bildschirmmitte*/

    max-width: 80em; /* damit der Inhalt auf gr. Displays nicht zu sehr in die Breite gezogen wird*/

    }

    .innenbody {

    display: flex;

    flex-flow: row wrap; /*im content sollen die Elemente nebeneinander angeordnet sein */

    flex: 1; /*alle Elemente auf gleiche Größe initialisieren*/

    }


    header {

    display: flex;

    flex-direction: column; /* damit ich das Nav auf gr. Displays unter dem Titel usw. habe */

    justify-content: space-between;

    }


    .headerwrapper { /* für LogoBild, Titel und auf kleinen Displays den hamburgerBtn. Der Button soll ganz rechts sein (rechtshänderbedienung), das Logo links. Der Wrapper, damit das Nav hinterher unter (column) den in row angeordneten 3 Elementen steht */

    display: flex;

    flex-direction: row;

    border: 9px solid blue; /*nur zum visuellen debuggen*/

    justify-content: space-between;

    }


    header, footer, main, aside {

    border-radius: 0 0.5em 0.5em;

    border: 1px solid;

    padding: 0.75em;

    margin: 0.75em;

    flex 1 100%;

    /* Die 4 Elemente sind Kinder der FlexBox body und werden untereinander angeordnet. So sind sie alle gleich groß (Faktor 1) und nehmen die volle verfügbare Höhe (100%). Damit haben wir den Footer immer ganz unten. */

    }

    header img {

    flex: 0 0 150px; /*Feste Breite des Bildes, daher in Pixel. */

    }


    .label-toggle {

    color: #000;

    font-size: 3em;

    margin-right: .5em; /* damit er nicht am Rand klebt */

    }


    nav {

    display: flex;

    flex-flow: column wrap; /* mobileFirst, wird auf gr. Displays zu row*/

    }


    footer {

    display: flex;

    flex-flow: row wrap;

    justify-content: center;

    }


    ==============================================

    Und die noch leere Seite:

    <!DOCTYPE html>

    <html lang="de">

    <head>

    <meta charset="utf-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>Beispiel Seite mit FlexBox</title>

    <link href="mystyle.css" rel="stylesheet"/>

    </head>

    <body>

    <input type="checkbox" id="menu-toggle" onclick="">

    <header>

    <div class="headerwrapper">

    <img id="imgFrog" src= "./bilder/LogoFrog.gif" alt "imgFrog">

    <h1>Biologie-Seite von Marco Oglialoro</h1>

    <label for="menu-toggle" class="label-toggle">&#9776;</label>

    </div>

    <nav>

    Navi

    </nav>

    </header>

    <div class="innenbody">

    <main>

    Main-Content

    </main>

    <aside id="aside_nav">

    Aside-Content

    </aside>

    <aside>

    Aside-Content

    </aside>


    </div>

    <footer>

    footer Inhalt

    </footer>

    </body>


    </html>

    =============================================================


    Danke für Eure Kommentare

  • Hallo


    Du verwendest leider einige Lösungen die benutzerunfreundlich sind und grundsätzlich vermieden werden sollten.


    Hamburger-Menü: Damit können viele User nichts anfangen. Webseitenersteller leben in einer eigenen Wissenswelt und glauben, dass ihr Wissen allen Webseitenbesuchern bekannt ist. Oder sie verlangen es arroganterweise sogar. Versteckte Texte (alle, alle, alle) sollten grundsätzlich vermieden werden, sie sind für viele User unüberwindbare Barrieren. Sie machen Seiten nicht besser sondern schlechter.


    Zudem sollte jeder unnötige Klick / Tipp vermieden werden. Der Klick, um ein Hamburger-Menü zu öffnen ist unnötig - also weglassen.


    Sticky Footer: Der ist genauso unnötig. Niemand braucht einen Sticky Footer und wenn eine Webseite erst mal Inhalt mit einer vernünftigen besucherfreundlichen Schriftgröße hat kommt der auch überhaupt nicht mehr zum tragen. Und wenn bei einzelnen Seiten der Footer nicht am unteren Fensterrand steht: Es stirbt niemand. Es verletzt sichniemand. Niemand verläßt vor lauter Schreck die Seite. Die Seite wirkt nicht unseriöser oder laienhafter. In China fällt kein Sack Reis um. Sticky Footer ist eine Spielerei, für die Praxis ohne Sinn.


    Weiterhin sollten Texte niemals direkt in Containern wie main, aside, nav, header, footer, article, section, div oder ähnlichen stehen. Auch nicht auf Testseiten.


    Weiterhin sollten auch Lern- und Testseiten sinnvollen Inhalt haben. Nur so können Lösungen sinnvoll erstellt werden. Du kannst als Vorlage zum Beispiel Artikel von Wikipedia verwenden oder vorhande Webseiten auf einen aktuellen Quelltext umbauen. Für die Schüler ist es zudem ein sichtbarer Erfolg, wenn sie ihre Verbesserungen später mit dem Original vergleichen.


    Inzwischen wird von allen aktuellen Browsern CSS-Grid hinreichend unterstützt. Deshalb kann CSS-Grid dort verwendet werden, wo es sinnvoll ist. CSS-Grid und Flexbox haben unterschiedliche Aufgaben. In einigen Fällen können sie gleich sinnvoll verwendet werden, manchmal ist CSS-Grid sinnvoller, manchmal Flexbox.


    In deinem Fall ist CSS-Grid für das Grundlayout der Seite sinnvoller als Flexbox. Falls dir die Unterstützung von CSS-Grid noch nicht ausreicht kannst du Flexbox als Fallback verwenden.

    Zitat

    Kann man das mit FlexBoxen eleganter lösen (guter Stil)?

    Ja. Bei dem Ansatz "Mobile First" gleich ein Fallback für die wenigen Browser einrichten, die Flexbox noch nicht beherrschen.


    Und überflüssige Container von Beginn an weglassen. In diesem kurzen Quelltext .headerwrapper und .innenbody.


    Gruss


    MrMurphy

  • Hallo MrMurphy,


    danke für die ausführliche Antwort. Ich versuche das mal für mich auseinander zu sortieren.

    Hamburger-Btn: Wäre es besser da noch Menu neben zu schreiben? Dann wäre schon mal jedem klar was der macht. Oder würdest du das Menu jederzeit offen da haben? Also im Header als erstes und dann erst zum Content runterscrollen? Dann darf das Menu nicht zu lang sein und man arbeitet mit Untermenus auf den einzelnen Seiten?


    Das man den Sticky-Footer nicht braucht ist mir auch klar, ich wollte es aber lernen und stören tut der doch sonst nicht. Außer im Quelltext, o.k., da schon.


    Inhalt kommt da natürlich noch rein und auch in Container aber erst mal will ich ja nur sehen was passiert und wie sich flexbox so verhält. Von Grid hatte ich aus 2 Gründen bisher Abstand genommen: Erstens hatte ich gelesen, dass die Unterstützung noch nicht so solle ist und zweitens erinnert mich das erst mal so an die "alte" Art Websites zu erstellen mit Tables.


    Aber einarbeiten wollte ich mich da auch noch irgendwann. Aber eines nach dem anderen. Im Moment stören mich halt wie Du sagst die überflüssigen Container am meisten.


    Kann darf sollte man eigentlich grid und flex mischen oder sollte man das lieber lassen?

  • Hallo


    Zitat

    Wäre es besser da noch Menu neben zu schreiben?


    Besser - ja. Gut - nein. Jeder versteckte Inhalt und jeder überflüssige Klick sollte vermieden werden.


    Zitat

    Oder würdest du das Menu jederzeit offen da haben?


    Ja.


    Zitat

    Dann darf das Menu nicht zu lang sein und man arbeitet mit Untermenus auf den einzelnen Seiten?


    Was sinnvoll ist hängt von der konkreten Website und ihrem Inhalt ab. Ohne Inhalt kannst du das weder lernen noch kann es dir gezeigt werden.


    Zitat

    aber erst mal will ich ja nur sehen was passiert und wie sich flexbox so verhält.


    Das widerspricht sich. Wie willst du das Verhalten ohne sinnvollen Inhalt sehen? Das geht schlicht nicht.


    Zitat

    Erstens hatte ich gelesen, dass die Unterstützung noch nicht so solle ist


    Mehr grün geht kaum noch:


    Can I use: CSS-Grid


    Deine Information ist also veraltet.


    Zitat

    und zweitens erinnert mich das erst mal so an die "alte" Art Websites zu erstellen mit Tables.


    Das ist sachlich falsch. Und wer aktuell oder sogar erst zukünftig HTML / CSS lernt, sollte das von Beginn an das aktuellste lernen. Von veraltetem oder sogar falschem HTML / CSS auf aktuelles umzusteigen ist viel schwieriger als umgekehrt.


    Zitat

    Kann darf sollte man eigentlich grid und flex mischen oder sollte man das lieber lassen?


    Ja.


    Gruss


    MrMurphy

  • Ach MrMurphy,

    eine Sache noch wegen Design ohne Inhalt. Ich sehe das halt aus Lehrer-Sicht. Ich will den Schülern ja den Inhalt frei wählbar lassen. Und dann sollen die überlegen, wie es aussehen soll und ich will halt antworten können. Deshalb will ich einfach mal einige Möglichkeiten durchspielen. Um auch Alternativen anbieten zu können.

    Das sind 8. oder 9.-Klässler. Und wenn die den Hamburger kennen, dann wollen die den auch. Barrierefreiheit interessiert die erst mal nicht. Erst mal muss es cool sein. Wenn ich die dann angefixt habe, dann kriegen die auch im Unterrichtsgang entsprechende Aufgaben. Anders kriege ich die nicht.

    Ich muss mich da aber auch erst einarbeiten. Das Problem ist, dass wir interessante WP-Kurse brauchen. Web-Design ist erwünscht, die anderen Kollegen können das aber noch weniger als ich.

  • Hallo


    Was du wie lehren willst ist alleine deine Entscheidung.


    Dass du eine Spaßveranstaltung durchführen willst hattest du nicht geschrieben. Wenn du die Schüler informierst, dass du kein Fachwissen hast und der Inhalt mit dem realen und reellen Erstellen von Webseiten nur wenig zu tun hast ist doch alles in Ordnung.


    Gruss


    MrMurphy

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!