Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

đŸ’ƒđŸŒ Responsive is key

Warum Responsive Design?

Wenn wir eine Page fĂŒr möglichst viele EndgerĂ€te nutzen wollen, sollten wir sie responsive gestalten.

📖 Siehe auch: Responsive Web Design Guide

💡 Falls du nicht klarkommst, nutze den Stand aus GitHub


Mobile First?

Desktop First vs. Mobile First

Wenn wir eine Seite responsive gestalten, sollten wir uns festlegen:

AnsatzBeschreibungHeute empfohlen?
Desktop FirstZuerst Desktop, dann kleiner❌ Veraltet
Mobile FirstZuerst Mobile, dann grösser✅ Standard

Was bedeutet Mobile First?

Grundsatz: Wir gehen immer davon aus, dass es ein Mobile-GerÀt mit schmalem Screen ist.

Praktische Beispiele:

ElementMobileDesktopGrund
Margins0px24pxMehr Platz verfĂŒgbar
Button-Breite100%fit-contentSchmaler Screen nutzen
Font-Size16px18pxBessere Lesbarkeit

Fazit: CSS fĂŒr Mobile definieren, dann fĂŒr breitere Bildschirme erweitern!


Breakpoints definieren

Galaxus Design System

Damit wir ĂŒberhaupt verschiedene Bildschirmbreiten unterstĂŒtzen, mĂŒssen wir Breakpoints definieren.

Breakpoints = Stellen im Screen, wo wir sagen "hey, jetzt sollte ich etwas am Design anpassen"

Galaxus Breakpoints

Referenz: Galaxus Screen Ranges

RangeBreiteGerÀte
zero → xs0 - 699pxMobile
xs → s700px - 999pxTablet
s → m1000px+Desktop

Media Queries - Button responsive machen

CSS-Magie: Media Queries

Media Queries ermöglichen, auf den aktuellen Screen dynamisch zu reagieren.

Regel: Bis zum ersten Breakpoint gilt Mobile → da mĂŒssen wir nichts Spezielles tun.

Button-Problem analysieren

Der Like-Button ist auf Mobile zu schmal und sollte die ganze Breite einnehmen, damit er optisch besser wirkt.

Browser-Analyse mit Dev Tool:

  • bis 700px: Button volle Breite
  • ab 700px: Button schmal

Responsive-Verhalten

zero → xs (699px)xs (700px) → ∞
Mobile ButtonResponsive von xs

FĂŒr unseren Button bedeutet dies, wir mĂŒssen ihn beim xs-breakpoint auf schmal definieren. Gehe dazu erneut zum button.css file und suche die Stelle raus, die wir mit einem zusĂ€tzlichen CSS definiert haben.


CSS-Implementation

Wir können mit einem Media Query den Button so direkt ĂŒbersteuern, dass er ab dem xs-breakpoint schmal bleibt. DafĂŒr entfernen wir unsere spezialklasse wieder, die wir zuvor angelegt haben.

/* ENTFERNEN: */
&.width-200-fit {
    min-width: 200px;
    width: fit-content;
}

Media Query hinzufĂŒgen

Neues Button.css mit Media Query:

button {
  background-color: #eee;
  color: #000;
  border: 1px solid #0003;
  border-radius: 3px;
  padding: 7px 15px;
  width: 100%; /* Mobile First: Volle Breite */
  cursor: pointer;
  text-align: center;
  font-family: inherit;
  font-size: inherit;
  
  &:hover {
    background-color: #ddd;
  }
  
  &:focus-visible {
    background-color: #ddd;
  }
  
  &.primary {
    background-color: #444;
    color: #fff;
    
    &:hover {
      background-color: #000;
    }
    
    &:focus-visible {
      background-color: #000;
    }
  }
  
  &.disabled,
  &.primary.disabled {
    color: #0006;
    border: 1px solid #0001;
  }

  /* Responsive Styles */
  @media screen and (min-width: 700px) {
    width: fit-content;
    min-width: 200px;
  }
}

Design-Überlegung

Wenn wir das so machen, applizieren wir das Verhalten auf alle Buttons. In der Vorlage ist das eigentlich nicht so. Jedoch ist das tatsÀchlich nicht mal so schön:

HĂ€ssliche Button-Platzierungen

Problem: Die Buttons wirken etwas unsauber und es gibt quasi eine Zick-Zack-Linie.

Insider-Info: Der Bereich wird aktuell bei Clippy tatsÀchlich neu gestaltet!

HTML bereinigen

Entferne zu guter Letzt die CSS-Klasse im HTML:

<!-- ENTFERNEN: class="width-200-fit" -->
<button class="primary">❀ GefĂ€llt mir</button>

Resultat

✅ Was haben wir erreicht?

  • Mobile First Ansatz implementiert
  • Responsive Breakpoints definiert
  • Button-Verhalten optimiert
  • Sauberer Code ohne Spezialklassen

🔗 Fertige Version

Die komplette Lösung findest du unter: GitHub - Responsive Version

Responsive Design erfolgreich implementiert! 🎉