Übersicht
"Responsive Webdesign" hat das Ziel, Webseiten so zu gestalten, dass sie sich dynamisch an das jeweilige Ausgabemedium anpassen (Desktop, Tablet, Smartphone) und auf jedem Gerät gut bedienbar sind.

Das S10 Framework bietet hierzu passende Mittel an, die in der Regel auch ausreichen. Zusätzliche Techniken, zum Beispiel ein eigenes CSS-Stylesheet mit "Media Query" oder "Grid Design", sind bei Bedarf mit dem S10 Framework kombinierbar.

Beispiel
Die gleiche Liste sieht auf unterschiedlichen Geräten wie folgt aus:


Desktop

 


Smartphone Querformat

 

 
Smartphone Hochformat

In diesem Beispiel sehen wir die wesentlichen Ideen:

  • "Fluid Layout"
    Im Filterbereich der Tabelle (Selektion von Kunde, Zeitraum...) belegen die einzelnen Elemente den zur Verfügung stehenden Platz. ohne dass eine feste zeilenweise Aufteilung definiert ist. Die Größe der Elemente bleibt fix.
  • Dynamische Spaltenauswahl
    Nur im Desktop-Format werden der Kundenname und die Auftragsart angezeigt. Im Smartphone-Hochformat entfallen zusätzlich die Währung und die Kundenreferenz.  
  • Dynamische Spaltenbreiten
    Die Spalte "Nettowert" ist auf dem Desktop etwas breiter als auf dem Smartphone.

 1. Fluid Layout
Legen Sie die einzelnen Blöcke als <div> Element der CSS-Klasse "infoblock" an, z.B.

 <div class="infoblock">
   <label class='label output' name='matnr'></label><br />
  
<input class="input valuehelp range" name="matnr_range" style="width:150px" />
 </div>

Damit wird ein fester Block aus Label und Eingabefeld definiert:



Der gesamte Bereich enthält eine Reihe solcher "infoblock" Elemente, die nacheinander ohne Zeilenvorschübe aufgeführt werden:

<div>
  <div class="infoblock"> ... </div>
  <div class="infoblock"> ... </div>
  <div class="infoblock"> ... </div>

</div>

Der gesamte zur Verfügung stehende Bereich wird bei der Anzeige mit den Infoblöcken gefüllt, wobei die Aufteilung sich je nach Format automatisch anpasst:


Smartphone Querformat



Smartphone Hochformat


Für jeden Block können Sie optional eine eigene Breite und Höhe angeben, z.B.

<div class="infoblock" style="width:160px; height: 50px;">

Unterschiedliche Höhen der Infoblöcke innerhalb eines Bereichs sollte man allerdings vermeiden, da das Layout andernfalls sehr unruhig wirkt.

Neben class="infoblock" gibt es im S10 Standard noch die vordefinierten ähnlichen Klassen "infoblock2" und "infoblocktext", die auch gemeinsam innerhalb eines Bereichs verwendet werden können.

class="infoblock"
Meist ausreichend für ein Eingabefeld

class="infoblock2"
Etwa doppelt so breit, für besonders lange Eingabefelder

class="infoblocktext"
Für die Ausgabe von kleinerem Fließtext geeignet. Breite wie infoblock2, aber variable Höhe.

Falls Sie abhängig von dem Geräteformate einzelne Infoblöcke ganz unterdrücken möchten, können Sie zusätzliche eine der folgenden Klassen angeben:

"portrait"
DIe Ausgabebreite des Geräts, oder Window-Breite falls Desktop, ist unter 620px.

"landscape"
DIe Ausgabebreite des Geräts, oder Window-Breite falls Desktop, ist über 620px.

"desktop"
DIe Ausgabebreite des Geräts, oder Window-Breite falls Desktop, ist über 1200px.

"noDesktop"
DIe Ausgabebreite des Geräts, oder Window-Breite falls Desktop, ist unter 1200px.


Beispiel:

<div class="infoblock landscape">
 
<label class='label'>Auftragsgrund</label><br />
  <span class="output" name="augru@text"></span>
</div>

Der Infoblock "Auftragsgrund" wird nur im Fall "landscape" ausgegeben, d.h. nicht für Smartphone im Hochformat.

Die jeweiligen Grenzwerte sind für die gängigen Geräte ausreichend zur Unterscheidung der Formate. Wenn der Benutzer sein Gerät vom Hochformat zum Querformat dreht, wird sofort die entsprechende Darstellung aktiv.

Tipp
Zum Test der Darstellung können Sie z.B. im Chrome Browser, F12-Entwicklermodus, unter einer Reihe von Gerätegrößen wählen.

 
2. Dynamische Spaltenauswahl
Hierzu setzen Sie bei der Definition der Spalten eine der Klassen "landscape" oder "desktop" hinzu, falls die Spalte nur in dem betreffenden Format angezeigt werden soll.

Bitte beachten: Die Klasse sowohl bei der Spaltenüberschrift als auch bei der Spalte selbst hinzuzusetzen, sonst verschieben sich die Überschriften gegenüber den Tabellenspalten.

Beispiel:

<div class='colhead output desktop' style='width: 120px' name="auart@text"></div>
...

<div class='outputcelldiv desktop' style='width: 120px;' name="auart@text"></div>

Hierdurch wird die Spalte mit dem Text zur Auftragsart nur im "desktop" Format angezeigt.

 

3. Dynamische Spaltenbreiten
Hierzu verwenden Sie folgende Angaben, auch wieder sowohl bei der Spaltenüberschrift als auch der Tabellenspalte

--portrait-width
--landscape-width
--desktop-width

Diese übersteuern dynamisch die Angabe width. Wenn der Benutzer zum Beispiel sein Gerät von "portrait" nach "landscape" dreht, können einige Spalten breiter dargestellt werden.

Neben einer absoluten Breite können Sie hier auch prozentuale Breiten angeben sowie Rechenausdrücke mit der CSS-Funktion calc(). Wenn Sie zum Beispiel im "landscape" Fall einige Spalten mit fester Breite der Gesamtbreite 420px definiert haben und einer weiteren Spalte den gesamten noch zur Verfügung stehenden Platz einräumen wollen, geht das durch

--landscape-width: calc(100% - 420px);

Falls Sie den gesamten restlichen Platz auf zwei weitere Spalten gleichmäßig aufteilen wollen, wäre es

 <div style='--landscape-width: calc(50% - 210px);'></div>
 <div style='--landscape-width: calc(50% - 210px);'></div>


Ein passendes Design der Spaltenbreiten ist auch mit diesen Hilfsmitteln etwas knifflig. Bewährt hat sich folgende Vorgehensweise:

A Mit gleicher Spaltenbreite beginnen
Definieren Sie alle Spalten in der gleichen Breite, z.B. width: 100px; sodass Sie die Anwendung testen können und die richtigen Werte in der Tabelle erscheinen. Die nächsten Schritte sind mit realistischen Testdaten erheblich einfacher.

B Optimales Design für Desktop wählen
Definieren Sie jetzt mit width: ein optimales Desktop-Layout. Falls Sie sich bei einigen Spalten für prozentuale Werte entscheiden, ist es meist gut, hier durch max-width: eine maximale Breite hinzuzunehmen, damit bei sehr breitem Window die Tabellenspalten nicht unnötig weit auseinandergezogen werden.

C Der "landscape"-Fall
Als nächstes den "landscape Fall definieren. Die erste Entscheidung sollte sein, auf welche Spalten Sie ganz verzichten wollen, beispielsweise einen Text zur Auftragsart. Falls Sie pro Tabellenzeile eine Detailsicht vorsehen, können derartige Zusatzinformationen in der Detailsicht untergebracht werden, damit sie auch in den kleineren Formaten für den Benutzer mit einem Klick erreichbar. Geben Sie diesen Spalten die Zusatzklasse desktop, damit sie nur dort erscheinen.

Als nächstes die Spalten durchgehen, bei denen eine Mindestbreite erforderlich ist. Es macht z.B. bei Materialnummern und Kundennummern wenig Sinn, nur die ersten 6 Stellen anzuzeigen, dagegen kann ein Ort in der Regel aus den ersten 15 Buchstaben erschlossen werden, auch wenn es Orte mit vielen Buchstaben gibt.

Für die restlichen Spalten nun mit -landscape-width eine sinnvolle Breite definieren, so dass Sie zu der gewünschten Gesamtbreite kommen. Das Ganze testen, z.B. in Chrome mit F12. Auf dem Desktop können Sie auch die Window-Breite kleiner ziehen und beobachten, welche Spalten entfallen oder schmaler werden.

Bei Textspalten eventuell eine prozentuale Aufteilung der noch zur Verfügung stehenden Breite definieren.

D Der "portrait"-Fall
Das Vorgehen C müssen wir nun noch für das "portrait" Format durchführen. Die Überlegungen sind fast gleich. Sie tragen nun die Klasse landscape ein, um Spalten zu unterdrücken, und setzen die Spaltenbreite mit -portrait-width. Hier kommt es nun fast auf jedes Pixel an. Falls Sie wissen, dass die Geräte aller Benutzer im Portrait-Modus über eine bestimmte Breite verfügen, können Sie diese Grenze beachten. Ansonsten stellt sich die Frage, welche älteren Geräte mit geringerer Breite unterstützt werden sollen. Im Web findet man bei der Suche mit z.B. "smartphone display size" die Screen-Dimensionen gängiger Geräte.

Die Entscheidung, auf einige Spalten zu verzichten, wird hier im Unterschied zu dem landscape-Modus dadurch erleichtert, dass der Benutzer ja nur das Gerät drehen muss, um weitere Spalten anzuzeigen.
  

Komponente: S10 Framework