Slide 1

Slide 1 text

K E E P I N G T H E W E B N A T I V E S T E F A N B AU M G A R T N E R - @ D D P R R T

Slide 2

Slide 2 text

@ddprrt

Slide 3

Slide 3 text

Netural

Slide 4

Slide 4 text

2 0 1 1

Slide 5

Slide 5 text

2 0 1 1

Slide 6

Slide 6 text

2 0 1 1 W A S A B A D Y E A R • Lots and lots of JavaScript to make IE7 behave like a modern browser • Lots and lots of Images to recreate CSS3 features • People just wanted to do the same flash as before, but it had “to work on the iPad”

Slide 7

Slide 7 text

J AVA S C R I P T I S A L I T T L E L I K E A M U S H R O O M I N S U P E R M A R I O

Slide 8

Slide 8 text

I T ’ S A N E X T R A C H A N C E W H E N D E A L I N G W I T H A R T D I R E C T O R S

Slide 9

Slide 9 text

B U T O N E C A N G E T G R E E D Y

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

F O R M S : S E L E C T S

Slide 13

Slide 13 text

Y O U WA N T T O K E E P T H E O R I G I N A L S E L E C T S vs

Slide 14

Slide 14 text

Select your Language Austrian German English French

Slide 15

Slide 15 text

select { appearance: none; }

Slide 16

Slide 16 text

select { appearance: none; border: 1px solid black; border-radius: 0; font-size: 20px; padding: 5px 40px 5px 5px; font-family: Helvetica; background: white; }

Slide 17

Slide 17 text

select { appearance: none; border: 1px solid black; border-radius: 0; font-size: 20px; padding: 5px 40px 5px 5px; font-family: Helvetica; background: white url(…selectBox-arrow.gif) no-repeat 95% center; }

Slide 18

Slide 18 text

select { appearance: none; border: 1px solid black; border-radius: 0; font-size: 20px; padding: 5px 40px 5px 5px; font-family: Helvetica; background: white url(…selectBox-arrow.gif) no-repeat 95% center; } http://codepen.io/ddprrt/pen/leLab

Slide 19

Slide 19 text

IE Hotfix for selection arrow ! ! ::-ms-expand { display: none; }

Slide 20

Slide 20 text

T H E R E I S M O R E http://bit.ly/1jKqgou ::-ms-check ::-ms-browse ::-ms-reveal ::-ms-clear

Slide 21

Slide 21 text

T H E R E I S M O R E http://bit.ly/1jKqgou ::-ms-check ::-ms-browse ::-ms-reveal ::-ms-clear HANDLE WITH CARE

Slide 22

Slide 22 text

::-webkit-file-upload-button ::-ms-browse

Slide 23

Slide 23 text

S T Y L I N G F O R M E L E M E N T S • Styling form elements with proprietary selectors might be good for one platform ! • Don’t expect any of those features to become standard ! • Rely on standard CSS features when styling, and just tweak when necessary

Slide 24

Slide 24 text

F O R M S : C H E C K B O X / R A D I O S

Slide 25

Slide 25 text

Accept our terms and conditions

Slide 26

Slide 26 text

input[type="checkbox"] { position: absolute; left: -100%; top: -100%; opacity: 0; }

Slide 27

Slide 27 text

input[type="checkbox"] + label:before { content: ''; position: absolute; width: 30px; height: 30px; font-size: 30px; line-height: 30px; margin-left: -40px; margin-top: 5px; }

Slide 28

Slide 28 text

input[type="checkbox"]:checked + label:before { content: '\2713'; text-align: center; }

Slide 29

Slide 29 text

input[type="checkbox"]:focus + label:before { outline: 3px solid blue; }

Slide 30

Slide 30 text

input[type="checkbox"]:focus + label:before { outline: 3px solid blue; } F U L L D E M O : http://codepen.io/ddprrt/pen/xsiDz

Slide 31

Slide 31 text

T H E P R O S • Native click behaviour for labels - no need to reimplement “checking” • Can use any image or style you like • Keyboard accessible

Slide 32

Slide 32 text

T H E P R O S • Native click behaviour for labels - no need to reimplement “checking” • Can use any image or style you like • Keyboard accessible T H E CO N S • Accesibilty: Does need CSS or Icon Fonts for high contrast mode

Slide 33

Slide 33 text

T H E R E I S A N I N V I S I B L E L I N K B E T W E E N L A B E L A N D I N P U T

Slide 34

Slide 34 text

E X T E N D I N G F U R T H E R ☰

Slide 35

Slide 35 text

E X T E N D I N G F U R T H E R ☰

Slide 36

Slide 36 text

E X T E N D I N G F U R T H E R ☰ …

Slide 37

Slide 37 text

E X T E N D I N G F U R T H E R nav { height: 0px; max-height: 0px; overflow: hidden; transition: max-height 0.5s; } ! #navtoggler:checked + nav { height: auto; max-height: 1000px }

Slide 38

Slide 38 text

J AVA S C R I P T ?

Slide 39

Slide 39 text

E X T E N D I N G T H E I D E A …

Slide 40

Slide 40 text

E X T E N D I N G T H E I D E A …

Slide 41

Slide 41 text

E X T E N D I N G T H E I D E A … fieldset { width: 550px; border: none; transition: margin-left 1s ease; }

Slide 42

Slide 42 text

E X T E N D I N G T H E I D E A … $('input[type="radio"]').on('change', function(){ var pos = $(this).next('label').data('offset');; $('fieldset').css('margin-left', -pos + 125); }); ! $('input[type="radio"]').each(function(){ var lbl = $(this).next('label'); lbl.data('offset',lbl.offset().left); });

Slide 43

Slide 43 text

F L O A T L A B E L P A T T E R N - C S S O N L Y ? form input:valid { //… do something } http://bradfrostweb.com/blog/post/float-label-pattern/ http://css-tricks.com/float-labels-css/

Slide 44

Slide 44 text

F L O A T L A B E L P A T T E R N - C S S O N L Y ? form input:valid { //… do something } http://bradfrostweb.com/blog/post/float-label-pattern/ http://css-tricks.com/float-labels-css/

Slide 45

Slide 45 text

F L O A T L A B E L P A T T E R N - C S S O N L Y ? form input:valid { //… do something } HANDLE WITH CARE http://bradfrostweb.com/blog/post/float-label-pattern/ http://css-tricks.com/float-labels-css/

Slide 46

Slide 46 text

U S I N G J AVA S C R I P T • Use JavaScript to handle states which cannot be handled by CSS ! • Use JavaScript for styling only if you have to calculate values. ! • For animations, use CSS animations/transitions

Slide 47

Slide 47 text

N O P S E U D O S O N I N P U T • Pseudo Elements need Content

Content

http://fettblog.eu/blog/2013/10/21/content-vs-value/

Slide 48

Slide 48 text

N O P S E U D O S O N I N P U T • Pseudo Elements need Content

this is content

this is also content THIS IS NOT POSSIBLE

Content

http://fettblog.eu/blog/2013/10/21/content-vs-value/

Slide 49

Slide 49 text

P A R A L L A X S C R O L L I N G

Slide 50

Slide 50 text

No content

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

When using skrollr on mobile you don't actually scroll. When detecting a mobile browser, skrollr disables native scrolling and instead listens for touch events and moves the content using CSS transforms.

Slide 53

Slide 53 text

R E I N V E N T I N G T H E W H E E L

Slide 54

Slide 54 text

R E I N V E N T I N G T H E W H E E L $(‘a’).on(‘click’, function() { window.location.href = $(this).attr(‘href’); }

Slide 55

Slide 55 text

R E I N V E N T I N G T H E W H E E L $(‘a’).on(‘click’, function() { window.location.href = $(this).attr(‘href’); } http://uglyjs.github.io/2011/10/13/links-plus/

Slide 56

Slide 56 text

What is Parallax Scrolling actually?

Slide 57

Slide 57 text

L A Y E R 1

Slide 58

Slide 58 text

L A Y E R 2

Slide 59

Slide 59 text

L A Y E R 3

Slide 60

Slide 60 text

I N M O T I O N …

Slide 61

Slide 61 text

I N M O T I O N …

Slide 62

Slide 62 text

Parallax Scrolling originally was a way to simulate 3D ! For the Web: Let’s use real 3D to simulate Parallax Scrolling

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

No content

Slide 65

Slide 65 text

html, body { perspective: 1px; transform-style: preserve-3d; }

Slide 66

Slide 66 text

header:after { content: ‘’; background-image: …; background-size: cover; background-position: 50% 50%; position: absolute; top: 0; left: 0; bottom: 0; right: 0; }

Slide 67

Slide 67 text

header:after { content: ‘’; background-image: …; background-size: cover; background-position: 50% 50%; position: absolute; top: 0; left: 0; bottom: 0; right: 0; transform: translateZ(-1px); }

Slide 68

Slide 68 text

header:after { content: ‘’; background-image: …; background-size: cover; background-position: 50% 50%; position: absolute; top: 0; left: 0; bottom: 0; right: 0; transform: translateZ(-1px) scale(2); }

Slide 69

Slide 69 text

header:after { content: ‘’; background-image: …; background-size: cover; background-position: 50% 50%; position: absolute; top: 0; left: 0; bottom: 0; right: 0; transform: translateZ(-1px) scale(2); z-index: -1000; }

Slide 70

Slide 70 text

header:after { content: ‘’; background-image: …; background-size: cover; background-position: 50% 50%; position: absolute; top: 0; left: 0; bottom: 0; right: 0; transform: translateZ(-1px) scale(2); z-index: -1000; }

Slide 71

Slide 71 text

header:after { content: ‘’; background-image: …; background-size: cover; background-position: 50% 50%; position: absolute; top: 0; left: 0; bottom: 0; right: 0; transform: translateZ(-1px) scale(2); z-index: -1000; }

Slide 72

Slide 72 text

h1 { position: absolute; top: 50%; width: 100%; text-align: center; color: white; text-shadow: 2px 2px 2px #000; font-size: 3rem; transform: translateZ(-0.5px) scale(1.5) translateY(-50%); z-index: -500; }

Slide 73

Slide 73 text

h1 { position: absolute; top: 50%; width: 100%; text-align: center; color: white; text-shadow: 2px 2px 2px #000; font-size: 3rem; transform: translateZ(-0.5px) scale(1.5) translateY(-50%); z-index: -500; }

Slide 74

Slide 74 text

h1 { position: absolute; top: 50%; width: 100%; text-align: center; color: white; text-shadow: 2px 2px 2px #000; font-size: 3rem; transform: translateZ(-0.5px) scale(1.5) translateY(-50%); z-index: -500; }

Slide 75

Slide 75 text

header:after { content: ''; height: 100vh; width: 100%; position: absolute; top: 70vh; }

Slide 76

Slide 76 text

header:after { content: ''; height: 100vh; width: 100%; position: absolute; top: 70vh; background-image: linear-gradient(to bottom, transparent 0, black 70%); }

Slide 77

Slide 77 text

header:after { content: ''; height: 100vh; width: 100%; position: absolute; top: 70vh; background-image: linear-gradient(to bottom, transparent 0, black 70%); transform: translateZ(0.4px) scale(0.9); z-index: 400; }

Slide 78

Slide 78 text

header:after { content: ''; height: 100vh; width: 100%; position: absolute; top: 70vh; background-image: linear-gradient(to bottom, transparent 0, black 70%); transform: translateZ(0.4px) scale(0.9); z-index: 400; }

Slide 79

Slide 79 text

header:after { content: ''; height: 100vh; width: 100%; position: absolute; top: 70vh; background-image: linear-gradient(to bottom, transparent 0, black 70%); transform: translateZ(0.4px) scale(0.9); z-index: 400; }

Slide 80

Slide 80 text

F U L L D E M O : http://codepen.io/ddprrt/full/BbCes

Slide 81

Slide 81 text

S CO T T K E L L U M ’ S S A S S / CO M P A S S P A R A L L A X M I X I N @mixin parallax( $distance : 0, $perspective : 1 ) { @include transform( translateZ($distance * $perspective * 1px) scale(abs($distance - 1)) ); z-index: $distance * 1000; }

Slide 82

Slide 82 text

S CO T T K E L L U M ’ S S A S S / CO M P A S S P A R A L L A X M I X I N @mixin parallax( $distance : 0, $perspective : 1 ) { @include transform( translateZ($distance * $perspective * 1px) scale(abs($distance - 1)) ); z-index: $distance * 1000; } ! http://codepen.io/scottkellum/pen/bHEcA

Slide 83

Slide 83 text

T H E P R O S • Works on Smartphone Browsers • No scroll hi-jacking - everything is native • Natural barrier against humbug parallax • No 3D available? Won’t break!

Slide 84

Slide 84 text

T H E P R O S • Works on Smartphone Browsers • No scroll hi-jacking - everything is native • Natural barrier against humbug parallax • No 3D available? Won’t break! T H E CO N S • Does not work in any IE version (up to 11) and is not feature- testable (transform-style does exist, but just with ‘flat’) • Smartphone browser scrolling is clumsy (tough not as clumsy as with JS parallax)

Slide 85

Slide 85 text

3.0

Slide 86

Slide 86 text

https://github.com/Modernizr/Modernizr/issues/805 New noPrefixes build option, which forces feature detects to only return true if the feature is supported without a vendor prefix http://fettblog.eu/blog/2014/02/20/no-prefixes/ https://github.com/Modernizr/Modernizr/issues/1082

Slide 87

Slide 87 text

J S F R E E

Slide 88

Slide 88 text

I N S T A G R A M ! I O S 5 S I N C E J U L Y 2 0 1 3

Slide 89

Slide 89 text

No content

Slide 90

Slide 90 text

P R O G R E S S I V E E N H A N C E M E N T

Slide 91

Slide 91 text

F I N A L T I P S

Slide 92

Slide 92 text

C H O O S E W I S E L Y • Each element has a purpose • button, label, input, a 
 are meant to be interacted with • a is meant to have an URL

Slide 93

Slide 93 text

S T Y L E • Use standard CSS features • Use prefixes only if you 
 know what’s the deal • proprietary features might
 disappear in the future - 
 use carefully

Slide 94

Slide 94 text

J AVA S C R I P T T O H A N D L E S T A T E S

Slide 95

Slide 95 text

J AVA S C R I P T T O H A N D L E S T A T E S

Slide 96

Slide 96 text

workingdraft.de

Slide 97

Slide 97 text

what doesn’t kill me just makes me smaller

Slide 98

Slide 98 text

thx! fettblog.eu - @ddprrt - workingdraft.de