Tutorials zur Webentwicklung

<l-w-y-s> · Umfangreich · Verständlich

CSS - Seitenlayout

Beim Seiten­layout handelt es sich um ein sehr komplexes Thema. Dieser Themen­block soll früh­zeitig grund­legende Techniken erläutern. Dazu widmen wir unsere Auf­merksam­keit den Sectioning Elementen und beginnen mit deren Platzier­ung inner­halb des Dokuments. Diverse Ansätze stehen zur Ver­fügung, u.a. das sog. Grid - System.

Informationsbox

Folgen Sie an den ent­sprechenden Stellen den Links: Mehr dazu ...
(Dieser Themen­block bedient sich einer speziellen Methode des Grid - Systems, ver­tiefen Sie Ihr Wissen und beschäftigen Sie sich mit der CSS Eigen­schaft display: grid;)

Grid - System

Mit einem Grid - System (kurz: Grid oder auch: Gestaltungs­raster) lassen sich Spalten und Zeilen definieren, um HTML Elemente zu platzieren.

Vertikal ...

Ein Grid kann nur aus Zeilen be­stehen und somit ein vertikales Lay­out zur Ver­fügung zu stellen:

Skizze Grid - vertikal
Ansicht: Grid (vertikal)

Horizontale Bereiche ...

Horizontale Bereiche lassen sich mit dem Ein­satz von Spalten er­zeugen:

Skizze Grid 002
Ansicht: Grid (... mit Spalten)

CSS: display: grid;

CSS bietet uns mit der Eigen­schaft display: grid; ein starkes Werk­zeug um ein Grid zu er­zeugen.

body {
  /* Darstellung: Grid Container */
  display: grid;
}
Listing 001: CSS Datei

Durch display: grid; wird das ent­sprechende Element zu einem sog. Grid - Container. Die Kind­elemente werden auto­matisch zu dessen sog. Grid - Areas.

Mit Hilfe der Eigen­schaften grid-template-columns und grid-template-rows werden die sog. Raster­linien ge­zeichnet.

body {
  /* Darstellung: Grid Container */
  display: grid;

  /* Spalten - Zeilen ... */
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 1fr 2fr 1fr;
}
Listing 002: CSS Datei

In Listing 002 wird ein Grid mit zwei Spalten (1fr 1fr) und drei Zeilen (1fr 2fr 1fr) er­zeugt. Die An­gaben beziehen sich auf das <body> Element, die Kind­elemente werden dadurch auto­matisch zu Grid Areas.

Grid Areas platzieren

Um die Grid Areas inner­halb der gewünschten Raster­zellen platzieren zu können, bedienen wir uns einer speziellen Methode, den sog. grid-template-areas.

Mehr dazu ...

Mit Hilfe dieser Eigen­schaft, lässt sich das Gestaltungs­raster als Block notieren, in dem sich die ge­setzten Spalten und Zeilen wieder­spiegeln.

body {
  /* Darstellung: Grid Container */
  display: grid;

  /* Spalten - Zeilen ... */
    grid-template-columns: 1fr 1fr;
    grid-template-rows: 1fr 2fr 1fr;

  /* Aufteilung ... */
    grid-template-areas:
      "area_name; area_name;"
      "area_name; area_name;"
      "area_name; area_name;"
    ;
}
Listing 003: CSS Datei

Der Block besteht aus den Namen für die zu platzierenden Bereiche und bestimmt deren Position und Aus­dehnung.

Den Kind­elementen wird mit grid-area der jeweils ent­sprechende Name zu­gewiesen und somit eine Ver­knüpfung her­gestellt.

selektor {
  grid-area: area_name;
}
Listing 004: CSS Datei

Abstände

Dem Grid Container können Abstände mit­geteilt werden, die die Grid Areas unter­einander ein­halten müssen.

body {
  /* Darstellung: Grid Container */
  display: grid;

  /* Abstände zwischen den GRID Areas */
    grid-column-gap: 1.6rem;
    grid-row-gap: 1.6rem;
}
Listing 005: CSS Datei

Durch die An­gabe von grid-column-gap: 1.6rem; werden Ab­stände zwischen die vertikal angeordneten Grid Areas gesetzt.

Skizze Grid Gap 001
Ansicht: Grid (###)

Durch die An­gabe von grid-row-gap: 1.6rem; werden Ab­stände zwischen die horizontal angeordneten Grid Areas gesetzt.

Skizze Grid Gap 002
Ansicht: Grid (###)

Mit Hilfe der gap Eingen­schaften lassen sich margin Angaben ver­meiden. Nutzen Sie diesen Vor­teil!

In der Praxis

Informationsbox

Öffnen Sie die Datei index.html und passen Sie das Seiten­layout an!

Bei den Sectioning Elementen <header>, <main>, <aside> und <footer> handelt es sich um Kind­elemente des <body> Tags, sowie um Block­elemente mit auto­matischem Zeilen­umbruch. Die Dar­stellung erfolgt daher bereits vertikal. Den­noch passen wir bereits an dieser Stelle den CSS Code an und erstellen ein Grid.

<head>

  ... unverändert ...

</head>


<body>


  <header>

    <p>
      <header>
    </p>

  </header>


  <main>

    <p>
      <main>
    </p>


    <section>

      <p>
        <section>
      </p>

    </section>


    <section>

      <p>
        <section>
      </p>

    </section>


  </main>


  <aside>

    <p>
      <aside>
    </p>

  </aside>


  <footer>

    <p>
      <footer>
    </p>

  </footer>


</body>
Listing der Datei index.html

Die CSS Datei wird folgender­maßen an­gepasst:

body {
  /* Darstellung: Grid Container */
  display: grid;
  height: 100vh;

  /* Spalten - Zeilen ... */
    grid-template-columns: auto;
    grid-template-rows: auto;

  /* Aufteilung ... */
    grid-template-areas:
      "header-grid-area"
      "main-grid-area"
      "aside-grid-area"
      "footer-grid-area"
    ;

  /* Abstände zwischen den GRID Areas */
    grid-column-gap: 1.6rem;
    grid-row-gap: 1.6rem;
}
 
header, aside, main, footer {
  display: block;
  overflow: hidden;
 
  height: auto;
  width: 100%;

  /* border: 1px dashed pink; */
  padding: 0.4rem 0.6rem;
}
 
header, footer {
  background-color: #1c1c1c;
  }
 
header {
  grid-area: header-grid-area;
}

aside {
  grid-area: aside-grid-area;
  background-color: #e95420;
}
 
main {
  grid-area: main-grid-area;
  background-color: grey;
}
 
footer {
  grid-area: footer-grid-area;
}

header p,
footer p {
  font-weight: bold;
  color: #ffffff;

  padding: 2rem 1rem;
 
  text-align: center;
}
 
/* -------- */
/* ## ## ## */
/* ---------*/
section {
  display: block;
  background-color: #ffffff;

  overflow: hidden;
 
  height: auto;
  width: 84%;
 
  margin: 1.2rem auto;
    border: 1px dashed green;
    padding: 0.6rem;
}
Listing der Datei main.css

1. ...

2. ...

3. ...

4. ...

Optisch ist kaum ein Unter­schied erkenn­bar, aller­dings dient jetzt ein Grid als Basis und ist damit wesent­lich dynamischer. Um einen horizontalen Bereich zu schaffen, bedarf es nur einer winzigen Änderung am CSS Code.

body {
  /* Darstellung: Grid Container */
  display: grid;
  height: 100vh;

  /* Spalten - Zeilen ... */
    grid-template-columns: auto;
    grid-template-rows: auto;

  /* Aufteilung ... */
    grid-template-areas:
      "header-grid-area header-grid-area"
      "main-grid-area aside-grid-area"
      "footer-grid-area footer-grid-area"
    ;

  /* Abstände zwischen den GRID Areas */
    grid-column-gap: 1.6rem;
    grid-row-gap: 1.6rem;
}
Listing der Datei main.css

1. ...

2. ...

3. ...

Skizze Grid 002
Ansicht: Grid (... mit Spalten)
HTML Dokument öffnen

Ver­gleichen Sie die Seiten­layouts mit­einander. Das vertikale Lay­out eignet sich hervor­ragend zur Dar­stellung der Inhalte auf mobilen Geräten. Die horizontale Darstellung der Bereiche eignet sich hin­gegen bestens für die Dar­stellung auf größeren Monitoren. Mit CSS kann für die ver­schiedenen Aus­gabe­geräte ein jeweils an­gepasstes Lay­out aus­geliefert werden.

Informationsbox

Bearbeiten Sie das Thema 4. CSS - Viewports!