+ All Categories
Home > Technology > Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Date post: 09-May-2015
Category:
Upload: patrick-lauke
View: 2,465 times
Download: 0 times
Share this document with a friend
137
Handys und Tablets WEBENTWICKLUNG JENSEITS DES DESKTOPS Patrick H. Lauke / WebTech Conference / 12 October 2011
Transcript
Page 1: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Handys und Tablets WEBENTWICKLUNG JENSEITS DES DESKTOPS

Patrick H. Lauke / WebTech Conference / 12 October 2011

Page 2: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

web evangelist bei Opera

Page 3: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

mobile web istimmer wichtiger

Page 4: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

wir brauchen eine site für's iPhone

Page 5: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

oh, und für's iPad

Page 6: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

“remove iPhone from ass”Peter-Paul Koch, The iPhone obsession

www.quirksmode.org/blog/archives/2010/02/the_iphone_obse.html

Page 7: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 8: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

</werbung>

Page 9: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

sites die auf (fast) allen mobilen devices laufen

Page 10: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

was ist überhaupt ein “mobile device”?

Page 11: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 12: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

3 ansätze

Page 13: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

1. nichts tun

Page 14: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

nicht mehr nur WAP oder text

Page 15: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

moderne mobile browserkommen mit

“normalen” sites zurecht

Page 16: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 17: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 18: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 19: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

there's an app for that...

Page 20: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

“aber der mobile kontext...”

Page 21: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

“Desktop computers and mobile devices are so different that the only way to offer a great user experience is to create two

separate designs — typically with fewer features for mobile.”www.useit.com/alertbox/mobile-redesign.html

Page 22: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

twitter.com/#!/stephenhay/status/23350345962889216

Page 23: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

2. separate mobile site(m.flickr.com, mobile.mysite.com, ...)

Page 24: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

vorsicht: browser sniffingphoto: http://www.flickr.com/photos/timdorr/2096272747/

Page 25: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Opera/9.80 (Android; Linux; Opera Mobi/18187; U; en) Presto/2.8.149 Version/11.10

was bin ich?

Page 26: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

lasst den user entscheiden:desktop oder mobile?

Page 27: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 28: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 29: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 30: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 31: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 32: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 33: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 34: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 35: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

“refactored” für kleine displays,

nicht verwässert für handys

Page 36: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

3. einzige adaptive site

Page 37: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

nichts neues...fluid layout, progressive enhancement, graceful degradation

Page 38: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

www.alistapart.com/articles/dao

The Sage “... accepts the ebb and flow of things,

Nurtures them, but does not own them,”Tao Te Ching; 2 Abstraction

Page 39: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

was unterscheidet “desktop” von “mobile”?

Page 40: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

wie unterscheiden sich verschiedene devices?

Page 41: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

1. input mechanismen2. displaygrösse

Page 42: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

1. input mechanismen2. displaygrösse

Page 43: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

mouse / keyboard / touch

Page 44: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

touch interfaces

Page 45: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 46: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 47: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

kein hover auftouch devices*

*nicht ganz wahr

Page 48: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

:hover, :focus

onmouseover(...), onfocus(...)

onmouseout(...), onblur(...)

Page 49: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

kein focus auftouch devices*

*nur nach einem click

Page 50: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

mouseover > mousemove > mousedown > (focus) > mouseup > click

Page 52: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Touch events

touchstart touchentertouchmove touchleavetouchend touchcancel

www.w3.org/TR/touch-events

Page 53: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

touch events

blah.addEventListener('touchstart', function(e){ … }, true);

blah.addEventListener('touchmove', function(e){ … }, true);

blah.addEventListener('touchend', function(e){ … }, true);

var hazTouch = 'ontouchstart' in window || 'onMozTouchDown' in window || 'createTouch' in document;

if (hazTouch) { … }

Page 54: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

interface TouchEvent : UIEvent {

readonly attribute TouchList touches;

readonly attribute TouchList targetTouches;

readonly attribute TouchList changedTouches;

readonly attribute boolean altKey;

readonly attribute boolean metaKey;

readonly attribute boolean ctrlKey;

readonly attribute boolean shiftKey;

readonly attribute EventTarget relatedTarget;

};

Page 55: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

interface Touch {

readonly attribute long identifier;

readonly attribute long screenX;

readonly attribute long screenY;

readonly attribute long clientX;

readonly attribute long clientY;

readonly attribute long pageX;

readonly attribute long pageY;

};

Page 56: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

e.touches[0].pageX; e.touches[0].pageY; …

Page 57: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

www.splintered.co.uk/experiments/archives/paranoid_0.4/

Page 58: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

www.splintered.co.uk/experiments/archives/paranoid_0.4/

Page 59: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

blah.addEventListener('touchstart', function(e){

e.preventDefault(); /* stop gestures, scrolling, context */

}, true);

Page 60: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 61: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

proprietary touch events

Mobile Safari: gesturestart, gesturechange, gestureend

developer.apple.com/library/IOS/...

IE10: MSPointerDown, MSPointerMove, MSPointerUp, MSPointerOver, MSPointerOut

msdn.microsoft.com/en-us/ie/hh272903.aspx#_DOMTouch

Page 62: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

1. input mechanismen2. displaygrösse

Page 63: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

CSS 2 Media Types

Page 64: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Media types

all brailleembossed handheldprint projectionscreen speechtty tv

Page 65: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

CSS 2.1 Media Types

<link rel="stylesheet" ... media="print" href="...">

@import url("...") print;

@media print {

// insert CSS rules here

}

Page 66: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

CSS 3 Media Queries“...the new hotness” Jeffrey Zeldman

http://www.zeldman.com/2010/04/08/best-aea-yet/

Page 67: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

CSS 3 Media Queries

● erweitern CSS 2.1 Media Types konzept● präzisere kontrolle (nicht nur screen, print...)

http://www.w3.org/TR/css3-mediaqueries/

Page 68: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Media features

width colorheight color-indexdevice-width monochromedevice-height resolutionorientation scanaspect-ratio griddevice-aspect-ratio

Page 69: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

CSS 3 Media Queries

<link rel="stylesheet" ...

media="screen and (max-width:480px)" href="...">

@import url("...") screen and (max-width:480px);

@media screen and (max-width:480px) {

// insert CSS rules here

}

Page 70: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Multiple expressions – and keyword

@media screen and (min-width:180px) and (max-width:480px) {

// screen device and width > 180px

// and width < 480px

}

Page 71: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Multiple expressions – comma separated

@media screen and (min-width:800px),

print and (min-width:20em) {

// screen device with width > 800px

// or print device with width > 20em

}

Page 72: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Negative expressions – not keyword

@media not screen and (min-width:800px) {

// not applied to screen device

// with width > 800px

}

Page 73: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Negative expressions – only keyword

@media only screen and (min-width:800px) {

// only applied to screen device

// with width > 800px

}

Page 74: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Multiple media queries/* “The absence of a media query is the first media query” Bryan Rieger */

@media screen and (max-width:480px) {

// screen device and width < 480px

}

@media screen and (max-width:980px) {

// screen device and width < 980px

}

@media screen and (min-width:980px) {

// screen device and width > 980px

}

Page 75: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

www.alistapart.com/articles/responsive-web-design

Page 76: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Responsive Web Design (RWD)

fluid grid + fluid images + media queries

Page 77: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

bostonglobe.com

Page 78: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 79: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 80: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

http://mediaqueri.es

Page 81: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

http://mediaqueri.es

Page 82: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

http://mediaqueri.es

Page 83: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

http://mediaqueri.es

Page 84: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

www.themaninblue.com/writing/perspective/2004/09/21

Page 85: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

“not a magic bullet...”

Page 86: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

ungelöste probleme…

Page 87: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

viewport meta

Page 88: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

physiche vs virtuelle pixel

Page 89: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 90: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

mobile devices lügen

Page 91: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 92: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 93: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 94: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

viewport metaschlägt dem browser interpretierung vor

Page 95: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

viewport meta

<meta name="viewport" content="width=480">

<meta name="viewport" content="width=480, user-scalable=no">

http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariWebContent/UsingtheViewport/UsingtheViewport.html

Page 96: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Viewport properties

width initial-scaleheight minimum-scaleuser-scalable maximum-scale

Page 97: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=device-width">

Page 98: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 99: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 100: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

high-dpi devices lügen zweimal

Page 101: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=device-width,

target-densitydpi=device-dpi">

Page 102: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 103: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 104: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 105: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

confused?“kleines” Fallbeispiel

Page 106: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 107: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 108: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=550">

Page 109: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=550">

Page 110: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=550">

Page 111: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=550,maximum-scale=1.0">

Page 112: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=550,maximum-scale=1.0,

target-densitydpi=device-dpi">

Page 113: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

maximum-scale=1.0

verhindert zooming!

Page 114: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

JavaScript ansätze, um selektiv

meta viewport zu modifizieren...argh!

Page 115: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

CSS Device Adaptation

@viewport {

width: device-width;

}

@viewport {

width: 320px;

zoom: 2.3;

user-zoom: fixed;

}

www.w3.org/TR/css-device-adapt

only works in Opera Mobile 11+ at the moment, with -o- prefix dev.opera.com/articles/view/an-introduction-to-meta-viewport-and-viewport

Page 116: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Viewport properties

width / min-width / max-width user-zoom

height / min-height / max-height orientation

zoom / min-zoom / max-zoom resolution

Page 117: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=550">

@-o-viewport {

width: 550px;

}

Page 118: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=550,maximum-scale=1.0,

target-densitydpi=device-dpi">

@-o-viewport {

width: 550px;

max-zoom: 1;

resolution: device;

}

Page 119: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

/* selektiver viewport per CSS */

@media … {

@-o-viewport {

}

}

Page 120: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

<meta name="viewport" content="width=550,maximum-scale=1.0,target-densitydpi=device-dpi">

@media screen {

@-o-viewport {

/* undo meta viewport settings */

width: auto;

max-zoom: auto;

}

}

@media screen and (max-device-width: 550px) {

@-o-viewport {

/* 550px viewport on small screen devices */

width: 550px;

}

}

Page 121: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 122: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 123: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 124: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

still confused?ihr seid nicht allein...

#headfuck

Page 125: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

ungelöste probleme…

Page 126: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

Responsive Web Design (RWD)

fluid grid + fluid images + media queries

Page 127: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

/* fluid image based on parent container */

img { width:100%; }

Page 128: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

http://adaptive-images.com

Page 129: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

mit HTML5 in die Zukunft...

Page 130: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

video, audio und canvasohne “steck-eins”

(kein Java / Flash / Silverlight auf mobilen geräten)

Page 131: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211
Page 132: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

geolocationnavigator.geolocation.getCurrentPosition(success, error);

navigator.geolocation.watchCurrentPosition(success, error);

function success(position) {

/* where's Wally? */

var lat = position.coords.latitude;

var long = position.coords.longitude;

...

}

Page 133: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

offline applicationsapplication cache,

localStorage/sessionStorage, IndexDB

Page 134: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

my.opera.com/core/blog/2011/03/23/webcam-orientation-preview

Page 135: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

1. nichts tun2. separate mobile site3. einzige adaptive site

Page 136: Handys und Tablets - Webentwicklung jenseits des Desktops - WebTech Mainz 12.10.20211

http://futurefriend.ly


Recommended