Rolf B: Breite der Flex-items

Beitrag lesen

Hallo Eric,

eine Navigation als eine Zone fester Breite am linken Rand erzeugt man mit Flexbox oder Grid - eigentlich ist Grid das bessere Werkzeug, weil man damit das gesamte Basislayout der Seite steuern kann und bei schmalen Viewports sehr gezielt die Seitenbereiche neu anordnen kann.

Einen festbreiten Nav-Bereich links erreichst Du mit Flexbox so, dass Du dafür flex-grow und flex-shrink auf 0 setzt und flex-basis auf die gewünschte Breite. Du kannst sogar "auto" als Basis nehmen, dann orientiert er sich am Inhalt des Nav-Bereichs. Du kannst max-width hinzu nehmen, damit zu lange Navigationselemente nicht das Layout zerreißen, sondern umbrechen. Der Hauptteil bekommt flex-grow 1, flex-shrink 1 und flex-basis setzt Du auf einen Breite, die der Hauptteil mindestens haben soll. Wird sie unterschritten, soll er in die Folgezeile. Dazu setzt Du auf der Flexbox noch flex-wrap:wrap, bzw. nimm flex-flow, das kombiniert flex-direction und flex-wrap.

.nav-main {
   display: flex;
   column-gap: 1em;     /* Abstand zwischen nav und main */
   flex-flow: row wrap;
   justify-content: center;  /* Bei Umbruch soll nav zentriert sein */
}
.nav-main nav {
  flex: 0 0 8em;
}
.nav-main main {
  flex: 1 0 30em;
}

HTML dazu:

<div class="nav-main">
   <nav>
      ...
   </nav>
   <main>
      ...
   </main>
</div>

Damit hast Du aber ein div im HTML, das nur für's Layout da ist. Unschön.

Eine Steuerung mit @media (width >= 40em) (yep, width >= 40em geht heutzutage, nicht mehr min-width:40em) und Grid-Layout wird heute eher empfohlen. Ich empfehle dafür diesen Teil des Wiki als Gute-Nacht Lektüre.

Rolf

--
sumpsi - posui - obstruxi