Download - Progressive EEnhancement [EECI 2011]

Transcript
Page 1: Progressive EEnhancement [EECI 2011]

Progressive nhancement

by Aaron Gustafson@aarongustafsonhttp://slideshare.net/AaronGustafson

Page 2: Progressive EEnhancement [EECI 2011]

?

Page 3: Progressive EEnhancement [EECI 2011]

TECHNOLOGICALRESTRICTIONS

Page 4: Progressive EEnhancement [EECI 2011]
Page 5: Progressive EEnhancement [EECI 2011]

MCMLXXVII(that’s 1977)

Page 6: Progressive EEnhancement [EECI 2011]
Page 7: Progressive EEnhancement [EECI 2011]
Page 8: Progressive EEnhancement [EECI 2011]
Page 9: Progressive EEnhancement [EECI 2011]
Page 10: Progressive EEnhancement [EECI 2011]
Page 11: Progressive EEnhancement [EECI 2011]
Page 12: Progressive EEnhancement [EECI 2011]
Page 13: Progressive EEnhancement [EECI 2011]

HTML CSS

Page 14: Progressive EEnhancement [EECI 2011]

fault tolerancen. a system’s ability to continue to operate when it encounters and unexpected error.

Page 15: Progressive EEnhancement [EECI 2011]
Page 16: Progressive EEnhancement [EECI 2011]
Page 17: Progressive EEnhancement [EECI 2011]
Page 18: Progressive EEnhancement [EECI 2011]

BROWSERS IGNORE WHAT

THEY DON’T UNDERSTAND

Page 19: Progressive EEnhancement [EECI 2011]

GRACEFULDEGRADATION

Page 20: Progressive EEnhancement [EECI 2011]

MODERN BROWSERS

OLDER BROWSERS

Page 21: Progressive EEnhancement [EECI 2011]

MODERN BROWSERS

OLDER BROWSERS

Page 22: Progressive EEnhancement [EECI 2011]

PROGRESSIVE ENHANCEMENT

Page 23: Progressive EEnhancement [EECI 2011]

CONTENT

Page 24: Progressive EEnhancement [EECI 2011]
Page 25: Progressive EEnhancement [EECI 2011]

ACCESSIBILITY

Page 26: Progressive EEnhancement [EECI 2011]

“SPECIAL NEEDS”

Page 27: Progressive EEnhancement [EECI 2011]

CAN BECONTEXTUAL

“SPECIAL NEEDS”

Page 28: Progressive EEnhancement [EECI 2011]
Page 29: Progressive EEnhancement [EECI 2011]

GRACEFUL DEGRADATION PROGRESSIVEENHANCEMENT

Page 30: Progressive EEnhancement [EECI 2011]

OOOH SHINY!,

Page 31: Progressive EEnhancement [EECI 2011]

PROGRESSIVE ENHANCEMENT

ISN’T ABOUT BROWSERS

Page 32: Progressive EEnhancement [EECI 2011]

BROWSERS AND TECHNOLOGIES COME AND GO

Page 33: Progressive EEnhancement [EECI 2011]

DON’T LOSE SIGHT OF

YOUR USERS

Page 34: Progressive EEnhancement [EECI 2011]

BASIC ADVANCED

Use

r Exp

erie

nce

Browser Capabilities

Page 35: Progressive EEnhancement [EECI 2011]

BASIC ADVANCED

Use

r Exp

erie

nce

Browser Capabilities

Content

Page 36: Progressive EEnhancement [EECI 2011]

BASIC ADVANCED

Use

r Exp

erie

nce

Browser Capabilities

Content

Semantics

Page 37: Progressive EEnhancement [EECI 2011]

BASIC ADVANCED

Use

r Exp

erie

nce

Browser Capabilities

Content

Semantics

Design

Page 38: Progressive EEnhancement [EECI 2011]

BASIC ADVANCED

Use

r Exp

erie

nce

Browser Capabilities

Content

Semantics

Design

Interactivity

Page 39: Progressive EEnhancement [EECI 2011]

BASIC ADVANCED

Use

r Exp

erie

nce

Browser Capabilities

Content

Semantics

Design

Interactivity

Accessibility

Page 40: Progressive EEnhancement [EECI 2011]

BASIC ADVANCED

Use

r Exp

erie

nce

Browser Capabilities

Text & HTTP

HTML

CSS

JavaScript

ARIA

Page 41: Progressive EEnhancement [EECI 2011]

Content

Page 42: Progressive EEnhancement [EECI 2011]

Contentis WHY

we build websites

Page 43: Progressive EEnhancement [EECI 2011]

Clear, well-written prose is key.

Page 44: Progressive EEnhancement [EECI 2011]

Don’t put up roadblocks.

Page 45: Progressive EEnhancement [EECI 2011]

Semantics

Page 46: Progressive EEnhancement [EECI 2011]
Page 47: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Fault tolerance<p>HTML5 introduces several <em>really</em> useful elements and a ton of new APIs.</p>

<p>Please fill out the form below. <strong>Note: all fields are required.</strong></p>

<p>I like to work with markup languages because <strong>they are simple and easy to read</strong>. They also have that certain <i lang="fr" title="I don&#8217;t know what">je ne sais quoi</i>.</p>

46

Page 48: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Fault toleranceHTML5 introduces several reallyuseful elements and a ton of new APIs.

Please fill out the form below. Note: all fields are required.

I like to work with markup languages because they are simple and easy to read. They also have that certain je ne sais quoi.

47

Page 49: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Fault tolerance<video poster=”poster.png”> <source src=”video.m4v”/> <source src=”video.webm”/> <source src=”video.ogv”/> <img src=”poster.png” alt=””/> <ul> <li><a href="video.m4v">Download MP4</a></li> <li><a href="video.webm">Download WebM</a></li> <li><a href="video ogv">Download Ogg</a></li> </ul></video>

48

Page 50: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Fault tolerance<video poster=”poster.png”> <source src=”video.m4v”/> <source src=”video.webm”/> <source src=”video.ogv”/> <img src=”poster.png” alt=””/> <ul> <li><a href="video.m4v">Download MP4</a></li> <li><a href="video.webm">Download WebM</a></li> <li><a href="video ogv">Download Ogg</a></li> </ul></video>

49

Page 51: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

<input type="date" name="dob"/>

I get it! I don’t get it :-(

50

Fault tolerance

Page 52: Progressive EEnhancement [EECI 2011]

Ad-hocSemantics

Page 53: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

Classi!cation

Page 54: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

Identi!cation

Page 55: Progressive EEnhancement [EECI 2011]
Page 56: Progressive EEnhancement [EECI 2011]
Page 57: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Microformats<section class="vcard"> <figure> <img class="photo" src="aaron-gustafson.jpg" alt=""/> </figure> <h1 class="fn">Aaron Gustafson</h1> … <p>Aaron … is <b class="role">Group Manager</b> of the <a class="org" href="http://webstandards.org">Web Standards Project (WaSP)</a> ….</p></section>

56

Page 58: Progressive EEnhancement [EECI 2011]
Page 59: Progressive EEnhancement [EECI 2011]
Page 60: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Microformats<body class="hentry"> <h1 class="entry-title"> {exp:typogrify}{title}{/exp:typogrify} </h1> <h3 class="author vcard">Posted by <a class="fn" href="/archives/by-author/{username}/"> {author}</a> on <time class="updated" datetime="{entry_date format='%Y-%m-%dT%H:%i:%s'}" pubdate="pudate">{entry_date format='%d %F %Y'} </time> <a rel="bookmark" href="{the_permalink}">Permalink</a></h3> </h3> <div class=”entry-content”> {exp:typogrify}{entry_body}{/exp:typogrify} </div></body>

59

Page 61: Progressive EEnhancement [EECI 2011]

Readability

Page 62: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

EE/CI helpersCI Microformats (helper)hcard, rel-licensehttp://codeigniter.com/wiki/microformats

VZ Address (!eldtype)hcardhttps://github.com/elivz/vz_address.ee_addon

Easy Figures (plug-in)!gurehttps://github.com/easy-designs/easy_figures.eeaddon

61

Page 63: Progressive EEnhancement [EECI 2011]

Design

Page 64: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

p { color: red;}

Parsing errors

65

Page 65: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

p { color: red;}

Parsing errors

65

Page 66: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Parsing errors

p { color: red; font-weight: bold;}

66

Page 67: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Parsing errors

p { color: red; font-weight: bold;}

66

Page 68: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Parsing errorsp { color: #ccc; color: rgba( 0, 0, 0, .5 );}

67

Page 69: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Parsing errorshtml[lang] p { color: #ccc; color: rgba( 0, 0, 0, .5 );}

68

Page 70: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Parsing errors@-moz-document url-prefix() { html[lang] p { color: #ccc; color: rgba( 0, 0, 0, .5 ); }}

69

Page 71: Progressive EEnhancement [EECI 2011]

#intro { /* Basic Layout */}

/* ... */

body[id=css-zen-garden] #intro { /* Advanced Layout */}

Page 72: Progressive EEnhancement [EECI 2011]

#intro { /* Basic Layout */}

/* ... */

[foo], #intro { /* Advanced Layout */}

Page 73: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Parsing errors@import 'not-for-IE7-or-below.css' screen;

@media screen, print, refrigerator { /* IE will get these rules */}

72

Page 74: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Organization

design

73

Page 75: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Organization

layout

type color

74

Page 76: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Organization/* =Typography */img { display: block;}

/* =Layout */@media screen { .frame .inner { border: 10px solid; }}

/* =Color */.frame .inner { background-color: rgb(227, 222, 215); border-color: rgb(227, 222, 215);}

75

Page 77: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Organization

type.css

layout.css

color.css

76

Page 78: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Organization

main.css

type.css

layout.css

color.css

76

Page 79: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Organization# SetupRewriteEngine onRewriteBase /

# rewrite css, img & jsRewriteRule ^css\/(.*)\.css$ /styles/$1 [L]

77

Page 80: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Organization

{embed="styles/typography"}

@media screen {  {embed="styles/layout-screen"}}

{embed="styles/color"}

78

Page 81: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Organization{embed="styles/reset"}{embed="styles/typography"}

@media screen {  {embed="styles/layout-screen"}}

@media print {  {embed="styles/layout-print"}}

{embed="styles/color"}{embed="styles/effects"}

79

Page 82: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Mobile-!rst{embed="styles/reset"}{embed="styles/typography"}

@media screen { {embed="styles/layout-mobile"}}

{embed="styles/layout-tablet"}

@media screen and (min-width:860px) { {embed="styles/layout-screen"}}

@media print { {embed="styles/layout-print"}}

{embed="styles/color"}{embed="styles/effects"}

80

Page 83: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Mobile-!rst{embed="styles/reset"}{embed="styles/typography"}

@media screen { {embed="styles/layout-mobile"}}

{embed="styles/layout-tablet"}

@media screen and (min-width:860px) { {embed="styles/layout-screen"}}

@media print { {embed="styles/layout-print"}}

{embed="styles/color"}{embed="styles/effects"}

81

Page 84: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Mobile-!rst@media screen and (min-width:481px) { /* … */}

@media screen and (min-width:570px) { /* … */}

@media screen and (min-width:650px) { /* … */}

@media screen and (min-width:700px) { /* … */}

82

Page 85: Progressive EEnhancement [EECI 2011]
Page 86: Progressive EEnhancement [EECI 2011]
Page 87: Progressive EEnhancement [EECI 2011]
Page 88: Progressive EEnhancement [EECI 2011]
Page 89: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Monkey-patching<link rel="stylesheet" href="main.css"/><!--[if IE 9]><link rel="stylesheet" href="ie9.css"/><![endif]--><!--[if lte IE 8]><link rel="stylesheet" href="ie8.css"/><![endif]--><!--[if lte IE 7]><link rel="stylesheet" href="ie7.css"/><![endif]--><!--[if lte IE 6]><link rel="stylesheet" href="ie6.css"/><![endif]-->

87

Page 90: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Monkey-patching@-moz-document url-prefix() { /* GENERATED CONTENT - FF3 doesn't allow positioning */ #extra-mile:before { content: ''; } #extra-mile:first-of-type:before { content: url(extra-mile-sign.png); }

}

88

Page 91: Progressive EEnhancement [EECI 2011]

Interactivity

Page 92: Progressive EEnhancement [EECI 2011]

Photo credit: spike55151

Page 93: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Sins of our past<a href="javascript:someFunction();">some text</a>

<a href="javascript:void(null);" onclick="someFunction();">some text</a>

<a href="#" onclick="someFunction();">some text</a>

93

Page 94: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

A minor improvement<a href="http://offsite.com" onclick="newWin( this.href ); return false;"> some text</a>

94

Page 95: Progressive EEnhancement [EECI 2011]

Photo credit: Giando

Page 96: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Event listenerswindow.onload = handleExternalLinks;

function handleExternalLinks(){

var server = document.location.hostname;var anchors = document.getElementsByTagName("a");var i, href;for( i=0; i < anchors.length; i++ ){

href = anchors[i].href;if ( href.indexOf("http://" + server) == -1 &&

href.indexOf("https://" + server) == -1 ){

// HREF is not a file on my serveranchors[i].onclick = function(){

newWin( this.href );};

}}

}96

Page 97: Progressive EEnhancement [EECI 2011]

Photo credit: hebedesign

Page 98: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Listen and delegatedocument

.getElementsByTagName( 'body' )[0].onclick = clickDelegator;

function clickDelegator( e ){

e = ( e ) ? e : event;var el = e.target || e.srcElement;// external linksif ( el.nodeName.toLowerCase() == 'a' &&

el.getAttribute( 'rel' ) == 'external' ){

newWin( el.href );}

}

98

Page 99: Progressive EEnhancement [EECI 2011]

Photo credit: ambery

Page 100: Progressive EEnhancement [EECI 2011]
Page 101: Progressive EEnhancement [EECI 2011]
Page 102: Progressive EEnhancement [EECI 2011]
Page 103: Progressive EEnhancement [EECI 2011]
Page 104: Progressive EEnhancement [EECI 2011]
Page 105: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Anchor-include pattern<a data-replace="/comments/{url_title}/" href="/archives/{entry_date format='%Y/%m/%d'}/{url_title}/ comments/#comments">View comments on this entry and add your own</a>

{if segment_4=="comments"} <section id="comments" class="focal"> {embed="inc/.comments" url_title="{url_title}"} </section>{if:else} {comment_loader}{/if}

104

Page 106: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Anchor-include pattern{embed="inc/.comments" url_title="{segment_3}"}

105

Page 107: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Anchor-include pattern$.fn.ajaxInclude = function(){ return this.each(function() { var $el = $( this ), target = $el.data( 'target' ), $targetEl = target && $( target ) || $el, methods = [ 'append', 'replace', 'before', 'after' ], ml = methods.length, method, url; while ( ml-- ) { method = methods[ ml ]; if ( $el.is( '[data-' + method + ']' ) ) { url = $el.data( method ); break; } } if ( method == 'replace' ) { method += 'With'; } if ( url && method ) { $.get( url, function( data ){ $el.trigger( 'ajaxInclude', [$targetEl, data] ); $targetEl[ method ]( data ); }); } });};

https://gist.github.com/b976b67e88ffbfc9f125

106

Page 108: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Replace:

Before:

After:

Anchor-include pattern

<a data-replace="articles/latest/fragment" href="...">Latest Articles</a>

<a data-after="articles/latest/fragment" href="...">Latest Articles</a>

<a data-before="articles/latest/fragment" href="...">Latest Articles</a>

107

Page 109: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Anchor-include pattern$("[data-append],[data-replace],”+ “[data-after],[data-before]").ajaxInclude();

108

Page 110: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

Media Queries

Page 111: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Mobile interfaces

110

Page 112: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Swapping contentvar trigger = 659;

// …

function toggleDisplay(){ var width = $window.width(); if ( showing == 'old' &&

width <= trigger ) { $old_nav.replaceWith($new_nav); showing = 'new'; } else if ( showing == 'new' && width > trigger ) { $new_nav.replaceWith($old_nav); showing = 'old'; }}

111

Page 113: Progressive EEnhancement [EECI 2011]

Accessibility

Page 114: Progressive EEnhancement [EECI 2011]
Page 115: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What is it?

116

Page 116: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What is it?

<button>Tweet</button>

<a class=”button”>Tweet</a>

<button>Tweet</button>

116

Page 117: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What is it?

<button>Tweet</button>

<a class=”button”>Tweet</a>

116

Page 118: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What is it?

117

Page 119: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What is it?

<button>Search Mail</button>

<div>Search Mail</div>

<button>Search Mail</button>

117

Page 120: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What is it?

<button>Search Mail</button>

<div>Search Mail</div>

117

Page 121: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

ARIA maps the OS to the web

118

Page 122: Progressive EEnhancement [EECI 2011]

Semantics+

Page 123: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

All the web’s a play…<section id="main" role="main"> <!-- The primary content for the page would go here --></section>

120

Page 124: Progressive EEnhancement [EECI 2011]
Page 125: Progressive EEnhancement [EECI 2011]

<header role="banner">

Page 126: Progressive EEnhancement [EECI 2011]

<nav role="navigation">

Page 127: Progressive EEnhancement [EECI 2011]

<form role="search">

Page 128: Progressive EEnhancement [EECI 2011]

<section role="main">

Page 129: Progressive EEnhancement [EECI 2011]

<footer role="contentinfo">

Page 130: Progressive EEnhancement [EECI 2011]

<nav role="navigation">

Page 131: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Semantic comparisonAd-hoc ARIA Role HTML5

#header, #top banner header (kind of)

#main, #content main none

#extra, .sidebar complementary, note aside

#footer, #bottom contentinfo footer

#nav navigation nav

.hentry article article

128

Page 132: Progressive EEnhancement [EECI 2011]
Page 133: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

These are the droids you seek<span role="button">OK</span>

<div role="alert"> <p>Something went wrong.</p></div>

<div role="alertdialog"> <p>Something went wrong.</p> <img src="x.png" alt="dismiss" role="button" /></div>

130

Page 134: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What is it?

<a role=”button”>Tweet</a><a class=”button”>Tweet</a>

131

Page 135: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What is it?

<a role=”button”>Tweet</a>

131

Page 136: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011 132

Page 137: Progressive EEnhancement [EECI 2011]
Page 138: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What’s happening?

<span> <img src="bold-off.png" alt="bold" /></span><span> <img src="bold-on.png" alt="bold" /></span>

B(off)

B(on)

134

Page 139: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What’s happening?

<span> <img src="bold-off.png" alt="not bold" /></span><span> <img src="bold-on.png" alt="bold" /></span>

B(off)

B(on)

135

Page 140: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

What’s happening?

<span role="button" aria-pressed="false"> <img src="bold-off.png" alt="not bold" /></span><span role="button" aria-pressed="true"> <img src="bold-on.png" alt="bold" /></span>

B(off)

B(on)

136

Page 141: Progressive EEnhancement [EECI 2011]
Page 142: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Hey! Over here!

138

Page 143: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Hey! Over here!

<input class="tweet-counter" value="140" disabled="disabled">

139

Page 144: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Hey! Over here!

<span id="chars_left_notice" class="numeric"> <strong id="status-field-char-counter" class="char-counter">140</strong></span>

140

Page 145: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Hey! Over here!

<span class="tweet-counter">140 <b class="hidden"> characters remaining</b></span>

.hidden { position: absolute; left: −999em;}

141

Page 146: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Hey! Over here!

<span class="tweet-counter">maximum of 140 characters</span>

<span class="tweet-counter">140 <b class="hidden"> characters remaining</b></span>

142

Page 147: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Hey! Over here!

<span aria-live="polite" aria-atomic="true" class="tweet-counter">140<b class="hidden"> characters remaining</b></span>

143

Page 148: Progressive EEnhancement [EECI 2011]

Progressive EEnhancement

EECI - October 2011

Hey! Over here!

144

Page 149: Progressive EEnhancement [EECI 2011]

Text & HTTP

HTML

CSS

JavaScript

ARIA

Page 151: Progressive EEnhancement [EECI 2011]

Progressive nhancementby Aaron Gustafson

More of the same:http://adaptivewebdesign.info

http://easy-designs.nethttp://easy-reader.net

http://aaron-gustafson.com

Slides available athttp://slideshare.net/AaronGustafson

This presentation is licensed underCreative Commons

Attribution-Noncommercial-Share Alike 3.0

flickr Photo Creditsflickr.com/photos/aarongustafson/galleries/72157627891060114/

“Usability Fail” by soopahgrover“ferris wheel? not yet…” by drcorneilus

“Compost 06/08/2007” by suavehouse113“CORNERSTONE” by spike55151

“Headphone” by Giando“Shout, shout..” by hebedesign