Webtechnologien Wintersemester 2024

Responsive Web Design

Quelle: viewportify

  • Den Anfang machte 1996 der Nokia 9000 Communicator
  • Ok wurde es auf WindowsMobile mit Opera
  • mit dem iPhone (2007 ???) fing das mobile Internet richtig an und Kunden wollten eine iPhone Website
  • und mit Android, dem iPad und hochauflösenden Bildschirmen war es dann geschehen
  • 2010 sagte die International Telecommunication Union, dass mobiler Zugang innerhalb von 5 Jahren den vom Desktop überschreiten würde (stimmt auch, je nachdem bei wem und wie man misst)
  • heute essentiell in Drittwelt- und Schwellenländern, beispielsweise Indien, Indonesien, Vietnam, Brasilien und ganz Afrika
  • normal in Ländern wie Japan, Hong Kong oder Singapur (What, YouTube buffert in der U-Bahn?)

Grundannahmen

Mobile Geräte – im Gegensatz zum Desktop –

  • haben kleine Bildschirme und keine Fenster
  • sind schwerer zu bedienen und navigieren
  • sind über langsamere Netze angebunden
  • langsame Netze hier in Deutschland; Japan, Singapur oder Südkorea (5G) sind schneller

Dedizierte mobile Seite

  • Meist per Subdomain: (mobile|mobi|m).domain.tld
  • Meist auf das Nötigste reduzierte Einspaltenlayouts
  • Häufig verminderte Funktionalität
  • heute nicht mehr üblich

Responsive Seite

  • Eine Seite für alle (wie es an sich seit jeher war)
  • Gestalterischer und technischer Ansatz zur Erstellung von Websites, so dass diese auf Eigenschaften des jeweils benutzten Endgeräts reagieren können
  • Praktisch meist angepasste Lesbarkeit, Navigation und Steuerungselemente
  • Displays heute auf: Laptops, Desktop-PCs, Tablets, Smartphones, Fernsehern, E-Book-Readern, Waschmaschinen
  • Erstmals 2010 erwähnt, seit circa 2012 Hype
  • Das Web war an sich immer responsive, nur zeitweise nicht (Fixed-Width-Layouts mit vertikalem Scrollen auf mobile)
  • Seit 10 Jahren Seiten mit festen Layouts, (kleinster gemeinsamer Nenner, dann 960.gs) und gegebenenfalls viel Whitespace (und schönen Hintergrundgrafiken)
  • Neben Social und Local Hauptgewinn beim Bullshit-Bingo (Responsive *)
  • Gestalterischer und technischer Ansatz zur Erstellung von Websites, so dass diese auf Eigenschaften des jeweils benutzten Endgeräts reagieren können und letztlich die Zugänglich- und Bedienbarkeit erhöht wird
  • Technische Basis hierfür sind neuere Webstandards wie HTML5, CSS3 und JavaScript
  • Es galt: mobile = Webkit, keine Altlast, neue APIs
  • Durchbruch durch Android und zu viele Größen
  • Displays auf: Laptops, Desktop-PCs, Tablets, Smartphones, E-Book-Readern, TV-Geräten (, Kühlschränken, Waschmaschinen)
  • Letztlich sollen sie sich jedem Betrachter so übersichtlich und benutzerfreundlich wie möglich präsentieren

Unterschiede

Responsive Seite Normale + Mobile Seite
1 Ressource, 1 Seite 1 Ressource, 2 Seiten
Schnellerer initial Load, mögl.w. mehr Daten 1 Round Trip mehr → zusätzliche Ladezeit, dafür weniger Daten
Links gut teilbar Links häufig schlecht teilbar
Darstellung nach Eigenschaften Darstellung durch UA-Sniffing o.ä. fehleranfällig

Aber beides auch in Kombination nutzbar.

  1. Mobile: Gleicher Inhalt auf weniger Platz → viel Scrollen
  2. Desktop: Genug Platz für viel Inhalt / visuell leichter zu überspringen
  3. RWD: Deckt alle Dimensionen ab
  4. Desktop: Eventuell Fehler (z.B. großes Display aber nur Touch)

Techniken / Buzzwords

  • Fluid, proportion-based Grids
    Einheitsangaben relativ in Prozent statt absolut in Pixel
  • Flexible Images
    Größe orientiert sich unabhängig von eigenen Maßen am umliegenden Container
  • Mobile first / Progressive Enhancement
    Vom kleinsten Nenner ausgehen. Je mehr der Browser kann, umso mehr bekommt er auch. (Gegekonzept: Graceful Degradation)
  • Adaptive Layouts
    Spezifische Breakpoints durch CSS Media Queries
  • RWD ist grundlegend drei Dinge: Fluid Grids, Fluid Images, Media Queries
  • Mobile first / progressive enhancement Gehören zusammen: Erst auf’s Handy, dann davon ausgehend weiterbauen. Anders als: Fertige Seite für Handy reduzieren
  • Unobtrusive JavaScript Läuft auch ohne JS, aber mit ist besser.
  • Graceful Degradation Full-feature Site und dann alles weg, was nicht funktioniert
  • Flexible Images Nachteil: width / height funktionieren nicht mehr → Seite springt wenn Bild da ist
  • Fluid: Lineare Veränderung
  • Adaptive: Unterscheidung anhand bestimmter Breakpoints (Beispiel BWL: Lineare Kosten vs. Sprungkosten)

Bleibende Probleme

  • Responsive Images – neue HTML-Elemente, -attribute oder Bildformate
  • Werbung weiterhin häufig solide wie in Print und auf dem Desktop gerade noch erträglich, mobil unzumutbar (bspw. FloorAd)
  • E-Commerce-Nutzung steigt, Verkäufe aber deutlich geringer als auf dem Desktop
  • Mobile ist zum Schnorcheln, Desktop zum Tauchen

Umsetzung

Serverseitige Ansätze

  • ADA - Audience and Device Aware
  • AWD – Adaptive Web Delivery
  • RESS – responsive web design with server-side components
  • Browserweiche
  • Optimale Auslieferung für das jeweils anfragende Gerät.
  • Browser- / UI-Sniffing (braucht Device Capabilities Database) oder Cookie mit Eigenschaften und Server entscheidet dann.
  • Komplizierter.

Clientseitige Ansätze

CSS-Hacks Selektoren und Attribute

/* IE6 */
* html #element  { _color: blue }
/* IE7 (and attribute IE7) */
*:first-child+html #element { *color: blue; }

Conditional Comments

<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
  • Verwendung in HTML:
    • Bedingtes Laden
  • Verwendung in CSS
    • Regeln werden vom Browser nur dann in Betracht gezogen, wenn die definierten Bedingungen erfüllt sind
    • Werden zwar geladen, aber Text und CSS-Parsing sind günstig
    • Mobile first (Desktop kann meist schneller laden / parsen)
  • Polyfills: Ältere Browser können kein CSS3, bspw. IE < 9
  • CSS Media Queries
    • Breakpoints nach Inhalt, nicht Geräten
  • Feature Detection, bspw. mit Modernizr.js

CSS Media Queries

  • Unterschiedliche CSS-Regeln je nach Eigenschaften des Browsers / Fensters
  • Bedingte Stylesheets werden trotzdem geladen
<head> <!-- Bedingte Stylesheets -->
   <link rel="stylesheet" href="all.css">
   <link rel="stylesheet" media="all and (max-device-width: 480px)"
   href="mobile.css">
</head>

CSS Media Queries

.menu li { display: inline-block; }
@media (max-width: 480px) and (orientation: landscape) {
   .menu li { display: block; }
}

.item { float: left; width: 33.333%; }
@media (max-width: 768px) { .item { width:  50%; } }
@media (max-width: 480px) { .item { width: 100%; } }

Beispiel

  • Mögliche Eigenschaften: width / height, device-width / device-height, aspect-ratio / device-aspect-ratio, color-index / color, orientation, resolution
  • device-pixel-ratio wichtig für Retina-Displays

Bilder

/* Fluid Images (ja, so einfach) */
img { max-width: 100%; }

/* Hintergrundbilder abhängig von Bildschirmauflösung */
.box {
   background: url('images/box-bg.png') no-repeat top left;
   width: 200px; height: 200px;
}
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
   .box {
      background: url('images/box-bg@2x.png') no-repeat top left;
      background-size: 200px 200px;
   }
}
  • Dateigröße spielt bei mobilen Verbindungen immer noch eine Rolle (Downsampling hier nachteilig)
  • Hintergrundbilder meist Teil des Layouts und dekorativer Natur
  • Für inhaltliche Bilder eignet sich diese Methode eher nicht
  • Alternative: Adaptive Images (verschiedene Größen auf dem Server; Laden per Script)

Bilder - srcset & sizes

<img src="medium.jpg" srcset="medium.jpg 1x, large.jpg 2x">

<img src="small.jpg"
   srcset="small.jpg 320w, medium.jpg 600w, large.jpg 900w">

<img src="medium.jpg" srcset="medium.jpg 600w, large.jpg 900w" 
   sizes="(min-width: 20em) 50vw, 100vw">
  • Probleme: Auflösung, Viewport-Größen, Seitenverhältnisse, Dateiformate, Kompatibilität
  • srcset
    • Überschreibt src
    • x definiert Mindest-DPR
    • Alternativ Maßeinheiten definierbar (w = physikalische Breite des Bildes)
  • sizes
  • Derzeit nur Blink / WebKit, kann aber sofort benutzt werden, da ignoriert, wenn nicht bekannt

Bilder - <picture>

<picture>
   <source media="(min-width: 20em)" srcset="horizontal.jpg">
   <source srcset="vertical.webp" type="image/webp">
   <source srcset="vertical.jpg">
   <img src="fallback.jpg">
</picture>
  • Art Direction: Gegebenenfalls komplett anderes Bild, nicht nur andere Größe
  • <picture> als Wrapper für verschiedene Bildquellen
  • <source> als Bildquelle
  • mit srcset kombinierbar
  • Derzeit nur Blink, kann aber sofort benutzt werden, da ignoriert, wenn nicht bekannt

Daten / Formulare

  • Responsive Tables
    sind schwierig, aber es gibt hilfreiche Plugins wie tablesaw
  • Responsive Forms
    kann auch schwierig werden, wenn nicht vorab bedacht – darum früh einplanen und Flexbox benutzen