Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Stefan Schuster on Mobile Web Development

Stefan Schuster on Mobile Web Development

More Decks by Enterprise Java User Group Austria

Other Decks in Technology

Transcript

  1. Sta3s3cs 0% 20% 40% 60% 80% 100% September, 2010 December,

    2010 March, 2011 June, 2011 September, 2011 December, 2011 March, 2012 June, 2012 3,5% 3,8% 4,0% 4,1% 4,3% 4,5% 4,7% 5,2% 5,8% 6,5% 7,0% 7,1% 6,7% 6,6% 7,0% 8,0% 8,5% 8,5% 9,0% 9,6% 10,1% 10,4% 11,1% 11,8% 96,5% 96,2% 96,0% 95,9% 95,7% 95,6% 95,3% 94,8% 94,3% 93,5% 93,0% 92,9% 93,3% 93,5% 93,1% 92,0% 91,5% 91,5% 91,0% 90,4% 89,9% 89,6% 88,9% 88,2% Desktop NetApplications Mobile NetApplications Desktop StatCounter Mobile StatCounter hGp://www.netmarketshare.com/ hGp://gs.statcounter.com/
  2. Agenda • Über  mich • Browser • HTML – Page

     setup – URL  schemes • CSS – CSS  3 – High  resolu3on • JS – Touch  events – Device  APIs
  3. Über  mich • Stefan  Schuster • HTML/CSS/JS  Experte  bei  der

     IRIAN  Solu3ons  GmbH • “R&D”:  iOS,  Node,  CouchDB,  Redis,  ... • Projekte – Mind42  (hGp://mind42.com) – Spaaze  (hGp://www.spaaze.com) – SimpleMeet.me  (hGp://www.simplemeet.me) • [email protected] • @puka_stooge
  4. Smartphones • Smartphone  Browser  sind  moderne  Browser – Webkit  dominant

    • Viele  HTML5  Techniken  sind  daher  auf  fast  allen  Smartphones   vorhanden – hGp://mobilehtml5.org – Canvas – SVG – Webworkers – Websockets – ...
  5. Viewport • BildausschniG  und  Skalierung  bei  mobilen  Browsern  “flexibler” •

    Standardverhalten: – Desktop  Webseiten  werden  stark  herausgezoomt  kompleG  dargestellt – Bei  iPhone:  Default  Viewport  980px  breit – Reale  (logische)  verfügbare  iPhone  Breite:  320px – Skalierung  flexibel
  6. Viewport • Viewport  Metatag – Konfigura3on  für  BildauschniG  und  Zoom

    • Verfügbar  Op3onen – Viewport • width • height – Zoom • (minimum-­‐/maximum-­‐)  scale • ini3al-­‐scale • user-­‐scalable <meta  name="viewport"  content="width=device-­‐width,  user-­‐scalable=no"> Apple  Developer:  Safari  Web  Content  Guide hGps://developer.apple.com/library/safari/documenta3on/AppleApplica3ons/Reference/SafariWebContent/Introduc3on/Introduc3on.html#//apple_ref/doc/uid/TP40002051
  7. URL  Schemes • URL  Schemes  sind  eine  Methode  um  zwischen

     Apps  zu   wechseln – Bei  iOS  der  einzige  Weg • z.B.:  twiGer://user?screen_name=puka_stooge – Bei  Android  üblicherweise  miGels  Intents • URL  Schemes  mit  intent-­‐filter  konfigurierbar • Und  natürlich  sind  URL  Schemes  für  das  Mobile  Web  relevant
  8. URL  Schemes • Mail  Links – mailto:[email protected] • Phone  Links

    – tel:+43-­‐1-­‐8905303-­‐0 • SMS  Links – sms:+43-­‐664-­‐80508-­‐3900 • Rest  problema3sch – z.B.  Map  Links: • iPhone  (Android  fragt  nach  Programm): – hGp://maps.google.com/maps?q=cuper3no • Android – geo:0,0?q=linz • iOS  Übersicht:  hGp://handleopenurl.com
  9. Sons3ge  Metadaten • Homescreen  App  Icon  (iOS  &  Android) •

    Startup  Screen  (iOS) • Keine  Browser  UI  /  Fullscreen  (iOS) • Statusbar  Styling  (iOS) <link rel="apple-touch-icon" href="/custom_icon.png"> <link rel="apple-touch-startup-image" href="/startup.png"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black"> <link rel="apple-touch-icon-precomposed" href="/icon-pcomp.png">
  10. CSS

  11. Overview • CSS3  wahrscheinlich  wich3gster  Bestandteil  performanter   mobiler  Webseiten

    – Bessere  Ladezeiten  durch  CSS3  Effekte  staG  Images • RGBA • Farbverläufe • Abgerundete  Ecken • SchaGen • Webfonts • Transforma3ons – Bessere  Performance  durch  tlw.  Hardwarebeschleunigung • CSS  Transi3ons/Anima3ons  staG  JavaScript
  12. RGBA • Transparente  Farben • CSS  Property  “opacity”  wahrscheinlich  bekannt

    – Macht  ganzes  Element  (inklusive  Inhalt  wie  Text)  transparent • RGBA:  Transparenzeffekte  und  Schaverungen  ohne   Nebeneffekte – HEX:  #58b2d1   – RGB:  rgb(88,  178,  209) – RGBA:  rgba(88,  178,  209,  0.5)
  13. Farbverläufe • Farbverläufe  mit  mehreren  Zwischenstufen  als CSS  Hintergründe •

    Vendor-­‐Prefix  bzw.  ältere  Vendor  Versionen  und Fallback  erforderlich • hGp://www.colorzilla.com/gradient-­‐editor/ • SASS/LESS  empfehlenswert background:  linear-­‐gradient(to  boGom,  #88bfe8  0%,#0081dd  100%); background: #88bfe8; background: -moz-linear-gradient(top, #88bfe8 0%, #70b0e0 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#88bfe8), color-stop(100%,#70b0e0)); background: -webkit-linear-gradient(top, #88bfe8 0%,#70b0e0 100%); background: -o-linear-gradient(top, #88bfe8 0%,#70b0e0 100%); background: -ms-linear-gradient(top, #88bfe8 0%,#70b0e0 100%); background: linear-gradient(to bottom, #88bfe8 0%,#70b0e0 100%); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#88bfe8', endColorstr='#70b0e0',GradientType=0 );
  14. Abgerundete  Ecken • Abgerundete  Ecken  (an  einzelnen  oder  allen  Ecken)

    • -­‐webkit  Vendor  Prefix  für  ganz  alte  Versionen  eventuell  relevant • border-­‐radius  auch  ohne  border  einsetzbar • DOM  Elemente  immer  rechteckig – Mit  dieser  Technik  auch  Kreise  möglich – 100px  breit/hoch,  50px  border-­‐radius  =  Kreis • hGp://css3generator.com border-­‐radius:  4px; border-­‐radius:  4px  4px  0  0;
  15. SchaGen • SchaGeneffekte  für  DOM-­‐Elemente  oder  Text • -­‐webkit  Vendor

     Prefix  für  box-­‐shadow  tlw.  erforderlich • Komplexe  Defini3on – inset – mehrere  SchaGen • Kostet  Performance • hGp://css3generator.com box-­‐shadow:  1px  1px  2px  0px  rgba(0,  0,  0,  0.5); text-­‐shadow:  1px  1px  2px  #000;
  16. Webfonts • Erlaubt  die  Einbindung  von  Custom  Fonts • Format-­‐Wirrwarr

     (EOT,  WOFF,  TTF,  ...) – Google  WebFonts:  hGp://www.google.com/webfonts – Typekit:  hGps://typekit.com • Verfügbare  Systemfonts – iOS:  hGp://iosfonts.com – Kaum  Fonts  auf  Android @font-­‐face  {  font-­‐family:  “...”;  src:  url(...);  }
  17. Transforma3ons • Transforma3onen  des  Koordinatensystems  wie  z.B.  bei  Canvas –

    translate – scale – rotate • -­‐webkit  Vendor  Prefix  erforderlich – hGp://css3generator.com • 3D  Varianten  verfügbar:  translate3d,  scale3d,  rotate3d – Bessere  Performance  durch  Hardware  Beschleunigung – Eventuell  etwas  buggy transform:  rotate(15deg);
  18. Anspruchsvolle  UIs • Anspruchsvolle  UI  durch  Kombina3on  aller  Effekte –

    Leichter  wartbar – Gerade  auf  Mobile:  Weniger  Bandbreite  erforderlich .badge { width: 100px; height: 100px; background: #ff3019; background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff3019), color-stop(100%,#cf0404)); background: -webkit-linear-gradient(top, #ff3019 0%,#cf0404 100%); background: linear-gradient(to bottom, #ff3019 0%,#cf0404 100%); -webkit-transform: rotate(20deg); transform: rotate(20deg); -webkit-box-shadow: 5px 5px 4px rgba(0, 0, 0, 0.5); box-shadow: 5px 5px 4px rgba(0, 0, 0, 0.5); border-radius: 50px; border: 3px solid #eee; text-align: center; color: white; font-weight: bold; line-height: 100px; font-family: Helvetica; font-size: 30px; }
  19. Transi3ons • Definiert  Übergangsverhalten  bei  CSS  Änderungen • Neue  Werte

     die  mit  :hover  oder  JS  gesetzt  werden,  bekommen   einen  fließenden  Übergang • -­‐webkit  Vendor  Prefix  erforderlich • Kann  JS  Anima3onen  ersetzten transi[on:  background  500ms  ease;
  20. Anima3onen • 1.  CSS  Zustände  für  Anima3onen  definieren • 2.

     Definierte  Anima3onen  per  CSS  zuweisen • Komplex • Kann  JS  Anima3onen  ersetzen • In  Kombina3on  mit  HW  beschleunigten  3D  Transforms: – Flüssige  performante  Anma3onen @-­‐webkit-­‐keyframes  myAnim  {  from  {...}  to  {...}  } #myObject  {  -­‐webkit-­‐anima[on-­‐name:  myAnim;  ...  }
  21. High  Resolu3on • High  resolu3on  displays  bzw.  Re3na  displays  (Apple)

    – Neuere  Smartphones,  Tablets  und  Notebooks  haben  sehr  hohe   Auflösungen – 220  DPI  ++ – CSS  Pixel  werden  nicht  mehr  1:1  auf  Display  Pixel  gemappt • 1  CSS  Pixel  =  2x2  Display  Pixel
  22. High  resolu3on • Auswirkungen – Breite  640px  (iPhone  4)  =

     Breite  320px  (iPhone  3GS) • Keine  Anpassungen  der  Maße  erforderlich – CSS3  Effekte  (Gradients,  SchaGen,  ...)  skalieren  automa3sch • Keine  Anpassungen  notwendig – EingebeGete  Bilder  (<img>,  CSS  Backgrounds)  werden  hochskaliert • Logische  200px  Bilder  haben  200px  Bildquellen • Logische  200px  Bilder  werden  mit  400px  dargestellt • Darstellung  nicht  op3mal  (pixelig)
  23. High  Resolu3on • Lösungsansatz – Höher  aufgelöste  Bildquellen  (400px  Bild

     für  200px  Element) • Perfekte  Darstellung  auf  High  Resolu3on  Displays • Unnö3ge  Datenmenge  (Bandbreite)  und  Skalierung  (downscaling)  auf   klassischen  Displays  mit  1:1  Pixel  mapping – subop3mal
  24. High  Resolu3on • CSS/JS  Pixel  Ra3o – CSS • <link

     rel=”stylesheet”  ...  media=”screen  and  (min-­‐device-­‐pixel-­‐ra3o:  2)”> • @media  screen  and  (min-­‐device-­‐pixel-­‐ra3o:  2)  {  ...  } • Vendor  Prefixes  notwendig • High  Resolu3on  CSS  Regeln  für  höher  aufgelöste  Bilder • Achtung:  Sprite  Offsets  auch  betroffen – JS:  window.devicePixelRa3o – hGp://coding.smashingmagazine.com/2012/08/20/towards-­‐re3na-­‐ web/
  25. Touch  API • Klassische  JS  Maus-­‐Events  “theore3sch”  nutzlos – onclick,

     onmouseover/out/down/move/up • Ohne  Touch-­‐Event-­‐Handler  werden  diese  “simuliert” – zeitverzögert • Touch/Gesten  API  verfügbar – ontouchstart/move/end/cancel – ongesturestart/change/end Apple  Developer:  Safari  Web  Content  Guide hGps://developer.apple.com/library/safari/documenta3on/AppleApplica3ons/Reference/SafariWebContent/Introduc3on/Introduc3on.html#//apple_ref/doc/uid/TP40002051
  26. Touch  API • ontouchstart/move/end/cancel – Unterstützt  Mul3touch • Liste  aller

     Berührungen – event.touches – event.targetTouches – event.changedTouches • Touches  haben  einen  Iden3fier – event.touches[0].iden3fier • Ansonsten  ähnlich  zu  Mouseevents – touch.pageX/pageY – Touchevents  im  Gegensatz  zu  simulierten  Mouseevents  ohne   Verzögerung
  27. Gesture  API • Nur  auf  iOS • Erleichtert  Umgang  mit

     Mul3touch  pinch/rotate • ongesturestart/change/end – event.rota3on – event.scale Images:  hGp://en.wikipedia.org/wiki/Mul3-­‐touch
  28. Orienta3on • Device  Orienta3on  per  JS  API  überprü‚ar – window.orienta3on

    • JS  Event  für  Änderungen – body.onorienta3onchange 0                                                                            90                                                                                              -­‐90                                                                        180
  29. Orienta3on • Gyroskop  /  Kompass – window.ondeviceorienta3on • event.alpha/beta/gamma •

    Accelerometer – window.ondevicemo3on • event.accelera3on • event.  accelera3onIncludingGravity • event.  rota3onRate hGp://dev.w3.org/geo/api/spec-­‐source-­‐orienta3on.html#devicemo3on
  30. Geoloca3on • GPS/WLAN/Cell  Tower  Ortung • Nur  nach  Einverständis  des

     Benutzers • navigator.geoloca3on.getCurrentPosi3on(callback) – Einmalige  Posi3onsabfrage – posi3on.la3tude – posi3on.longitude • navigator.geoloca3on.watchPosi3on(callback) – Updates  bei  Posi3onsänderungen