Astro für Anfänger · Teil 10TutorialEinsteiger

Astro

Astro-Kurs 10: Flexbox und CSS Grid

Mit Flexbox und Grid responsive Inhaltsbereiche aufbauen. Schritt-für-Schritt-Lektion für den Astro-Anfängerkurs der Know-How-Schmiede.

Veröffentlicht am

Etappe 1 – Grundlagen · Lektion 10 von 11 · Lernziel: Mit Flexbox und Grid responsive Inhaltsbereiche aufbauen.

Voraussetzung: Grundlagen aus Lektion 9; arbeite im selben Projekt modellbau-webseite.

Zwei Werkzeuge für Layouts

Flexbox ist ideal für Elemente in einer Reihe oder Spalte, etwa ein Menü. CSS Grid eignet sich besonders für Raster aus Karten. Wir bauen jetzt eine Projekte-Übersicht, die auf breiten Bildschirmen mehrere Karten nebeneinander zeigt.

Ersetze src/pages/projekte.astro

---
const projekte = [
  { titel: 'Modellflug', text: 'Meine selbst gebauten Flugmodelle.', bild: '/bilder/modellflug.jpg' },
  { titel: '3D-Druck', text: 'Gedruckte Bauteile und Konstruktionen.', bild: '/bilder/3d-druck.jpg' },
  { titel: 'Elektronik', text: 'Experimente mit Mikrocontrollern.', bild: '/bilder/elektronik.jpg' },
];
---

<html lang="de">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>Projekte | Modellbau-Werkstatt</title>
  </head>
  <body>
    <header>
      <nav aria-label="Hauptnavigation">
        <a href="/">Startseite</a>
        <a href="/projekte">Projekte</a>
        <a href="/kontakt">Kontakt</a>
      </nav>
    </header>
    <main>
      <h1>Meine Projekte</h1>
      <div class="raster">
        {projekte.map((projekt) => (
          <article class="karte">
            <img src={projekt.bild} alt={projekt.titel} width="480" height="270" />
            <h2>{projekt.titel}</h2>
            <p>{projekt.text}</p>
          </article>
        ))}
      </div>
    </main>
  </body>
</html>

<style>
  :global(body) { margin: 0; font-family: Arial, sans-serif; background: #f4f6f8; color: #243447; line-height: 1.6; }
  header { background: #183247; }
  nav { display: flex; flex-wrap: wrap; gap: 20px; padding: 20px; }
  nav a { color: white; }
  main { max-width: 1000px; margin: auto; padding: 20px; }
  .raster { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 260px), 1fr)); gap: 20px; }
  .karte { background: white; padding: 16px; border-radius: 12px; }
  .karte img { display: block; width: 100%; height: auto; aspect-ratio: 16 / 9; object-fit: cover; border-radius: 8px; }
</style>

Bilder hinzufügen

Lege drei Bilder in public/bilder/ ab: modellflug.jpg, 3d-druck.jpg und elektronik.jpg. Alternativ entferne das <img>-Element, solange keine Bilder vorliegen.

Was passiert in den Styles?

display: flex ordnet die Menülinks in einer Zeile an. flex-wrap: wrap erlaubt den Zeilenumbruch. display: grid erstellt ein Raster. repeat(auto-fit, ...) sorgt dafür, dass abhängig vom verfügbaren Platz unterschiedlich viele Karten nebeneinander liegen.

Übung

Ergänze ein viertes Projekt zum Array. Ändere gap: 20px auf gap: 32px und beobachte den Abstand zwischen den Karten.

Lösungshinweis: Ein neues Objekt mit titel, text und bild im Array ergänzen und ein passendes Bild ablegen.

Weitere Informationen: Offizielle Astro-Dokumentation.