SlideShare uma empresa Scribd logo
1 de 101
Baixar para ler offline
FUNDAMENTAL
 PROGRESSIVE
ENHANCEMENT
   Aaron Gustafson
WHAT IS
 PROGRESSIVE
ENHANCEMENT?
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Graceful Degradation
       User Experience




                   NEWER                            OLDER


                                      Browser Age

WEB DESIGN WORLD                                            3
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Progressive Enhancement
       User Experience




                     BASIC                                   ADVANCED


                                      Browser Capabilities

WEB DESIGN WORLD                                                        4
it’s about
    service
you wouldn’t do this...
Photo credit: dansays




but sites do...
Photo credit: dansays




but sites do...
HOW DOES
IT WORK?
a little treat
   for everyone




Photo credit: madam.furie
(viewed another way)
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




                                      JavaScript
                                         CSS
                   XHTML + HTTP only


WEB DESIGN WORLD                                   13
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




                                      JavaScript
                           some JavaScript
                                         CSS
                                      some CSS
                   XHTML + HTTP only
WEB DESIGN WORLD                                   13
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




       User Experience




                     BASIC                                   ADVANCED


                                      Browser Capabilities

WEB DESIGN WORLD                                                        14
LEVELS OF
 SERVICE
LEVELS OF
 SUPPORT
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Rise to meet needs
                         robust JavaScript
       User Experience



                         some JavaScript




                         robust CSS




                         some CSS




                         XHTML & HTTP




WEB DESIGN WORLD                             16
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Rise to meet needs
                         robust JavaScript
       User Experience



                         some JavaScript




                         robust CSS




                         some CSS




                         XHTML & HTTP




WEB DESIGN WORLD                             16
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Rise to meet needs
                         robust JavaScript
       User Experience



                         some JavaScript




                         robust CSS




                         some CSS




                         XHTML & HTTP




WEB DESIGN WORLD                             16
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Rise to meet needs
                         robust JavaScript
       User Experience



                         some JavaScript




                         robust CSS




                         some CSS




                         XHTML & HTTP




WEB DESIGN WORLD                             16
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Rise to meet needs
                         robust JavaScript
       User Experience



                         some JavaScript




                         robust CSS




                         some CSS




                         XHTML & HTTP




WEB DESIGN WORLD                             16
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Rely on your baseline
                         robust JavaScript
       User Experience



                         some JavaScript




                         robust CSS




                         some CSS




                         XHTML & HTTP




WEB DESIGN WORLD                             17
Photo credit: PetitPlat by sk_




you can
still be




           creative
every key we press
a!ects user experience
                     Photo credit: JasonRogers
PROGRESSIVE
ENHANCEMENT
   WITH CSS
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




                                      layout.css
                                       color.css
                                       main.css
                                       type.css




WEB DESIGN WORLD                                   21
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




                                      type.css




                    layout.css                   color.css




WEB DESIGN WORLD                                             21
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; />
                                       href=quot;main.cssquot;
                                       href=quot;color.cssquot; />




WEB DESIGN WORLD                                             22
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; />
<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;main.cssquot; />/>
                                       href=quot;layout.cssquot;
<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; />




WEB DESIGN WORLD                                              22
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; />
<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; />
<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; />




WEB DESIGN WORLD                                              23
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;type.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;layout.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;color.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;print.cssquot; media=quot;printquot; />




WEB DESIGN WORLD                                                                       23
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;type.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;layout.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;color.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;print.cssquot; media=quot;printquot; />




WEB DESIGN WORLD                                                                       23
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




                                      @import 'screen.css';




<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;type.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;layout.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;color.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;print.cssquot; media=quot;printquot; />




WEB DESIGN WORLD                                                                       23
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




                                      @import 'screen.css';screen;
                                              'screen.css' s;
                                      @import 'print.css' print;
                                      @import 'mobile.css' handheld;




<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;type.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;layout.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;color.cssquot; />
<link   rel=quot;stylesheetquot;         type=quot;text/cssquot;   href=quot;print.cssquot; media=quot;printquot; />




WEB DESIGN WORLD                                                                       23
(the browser that wouldn’t die)
                                  Photo credit: oskay
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; />
<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; />
<link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; />




WEB DESIGN WORLD                                              25
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




<link rel=quot;stylesheetquot;                type=quot;text/cssquot; href=quot;type.cssquot; />
<link rel=quot;stylesheetquot;                type=quot;text/cssquot; href=quot;layout.cssquot; />
<link rel=quot;stylesheetquot;                type=quot;text/cssquot; href=quot;color.cssquot; />
<!--[if IE lte 7]>
<link rel=quot;stylesheetquot;                type=quot;text/cssquot; href=quot;ie7.cssquot; />
<![endif]-->




WEB DESIGN WORLD                                                             25
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




<link rel=quot;stylesheetquot;                type=quot;text/cssquot; href=quot;type.cssquot; />
<link rel=quot;stylesheetquot;                type=quot;text/cssquot; href=quot;layout.cssquot; />
<link rel=quot;stylesheetquot;                type=quot;text/cssquot; href=quot;color.cssquot; />
<!--[if IE lte 7]>
<link rel=quot;stylesheetquot;                type=quot;text/cssquot; href=quot;ie7.cssquot; />
<![endif]-->
<!--[if IE lte 6]>
<link rel=quot;stylesheetquot;                type=quot;text/cssquot; href=quot;ie6.cssquot; />
<![endif]-->




WEB DESIGN WORLD                                                             25
property: value;
                    html>/**/body
_property: value;


         * html     voice-family: quot;quot;}quot;quot;;
-property: value;
                    voice-family:inherit;

    *:first-child+html
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Make smart decisions




WEB DESIGN WORLD                      27
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Make smart decisions
<form id=quot;contact-formquot; action=quot;#quot; method=quot;postquot;>
  <fieldset>
    <legend>Contact Us</legend>
    <p>Send us a message. All fields are required.</p>
    <ol>
      <li>
         <label for=quot;contact-namequot;>Name</label>
         <input type=quot;textquot; id=quot;contact-namequot; name=quot;namequot; />
      </li>
      <li>
         <label for=quot;contact-emailquot;>Email</label>
         <input type=quot;textquot; id=quot;contact-emailquot; name=quot;emailquot; />
      </li>
      <li>
         <label for=quot;contact-messagequot;>Message</label>
         <textarea id=quot;contact-messagequot; name=quot;messagequot; rows=quot;4quot;
                   cols=quot;30quot;></textarea>
      </li>
    </ol>
    <button type=quot;submitquot;>Send It</button>
  </fieldset>
</form>

WEB DESIGN WORLD                                                  27
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Make smart decisions
<form id=quot;contact-formquot; action=quot;#quot; method=quot;postquot;>
  <fieldset>
    <legend>Contact Us</legend>
    <p>Send us a message. All fields are required.</p>
    <ol>
      <li>
         <label for=quot;contact-namequot;>Name</label>
         <input type=quot;textquot; id=quot;contact-namequot; name=quot;namequot; />
      </li>
      <li>
         <label for=quot;contact-emailquot;>Email</label>
         <input type=quot;textquot; id=quot;contact-emailquot; name=quot;emailquot; />
      </li>
      <li>
         <label for=quot;contact-messagequot;>Message</label>
         <textarea id=quot;contact-messagequot; name=quot;messagequot; rows=quot;4quot;
                   cols=quot;30quot;></textarea>
      </li>
    </ol>
    <button type=quot;submitquot;>Send It</button>
  </fieldset>
</form>

WEB DESIGN WORLD                                                  27
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Make smart decisions
<form id=quot;contact-formquot; action=quot;#quot; method=quot;postquot;>
  <fieldset>
    <legend>Contact Us</legend>
    <p>Send us a message. All fields are required.</p>
    <ol>
      <li>
         <label for=quot;contact-namequot;>Name</label>
         <input type=quot;textquot; id=quot;contact-namequot; name=quot;namequot; />
      </li>
      <li>
         <label for=quot;contact-emailquot;>Email</label>
         <input type=quot;textquot; id=quot;contact-emailquot; name=quot;emailquot; />
      </li>
      <li>
         <label for=quot;contact-messagequot;>Message</label>
         <textarea id=quot;contact-messagequot; name=quot;messagequot; rows=quot;4quot;
                   cols=quot;30quot;></textarea>
      </li>
    </ol>
    <button type=quot;submitquot;>Send It</button>
  </fieldset>
</form>

WEB DESIGN WORLD                                                  27
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Make smart decisions
label:after {
  content: quot;:quot;;
}




WEB DESIGN WORLD                      27
QUESTIONS?
inspired?
PROGRESSIVE
 ENHANCEMENT
WITH JAVASCRIPT
Photo credit: andyburnfield




proper planning...
...can keep you from looking

          foolish
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




                         robust JavaScript
       User Experience



                         some JavaScript




                         robust CSS




                         some CSS




                         XHTML & HTTP




WEB DESIGN WORLD                             34
Photo credit: ambery
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Consider lala.com




WEB DESIGN WORLD                      36
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Without JavaScript




WEB DESIGN WORLD                      37
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




And looking at the markup...




WEB DESIGN WORLD                      38
Photo credit: spike55151
Photo credit: drp
listen?



          Photo credit: Giando
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Event Listening
window.onload = handleExternalLinks;

function handleExternalLinks(){
  var server = document.location.hostname;
  var anchors = document.getElementsByTagName(quot;aquot;);
  var i, href;
  for( i=0; i < anchors.length; i++ ){
    href = anchors[i].href;
    if( href.indexOf(quot;http://quot; + server) == -1 &&
         href.indexOf(quot;https://quot; + server) == -1 ){
      // HREF is not a file on my server
      anchors[i].onclick = function(){
         newWin( this.href );
      };
    }
  }
}


WEB DESIGN WORLD                                      42
or
delegate?
       Photo credit: hebedesign
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Event delegation
document.getElementsByTagName( 'body' )[0].onclick = quot;
  clickDelegator;

function clickDelegator( e ){
  e = ( e ) ? e : event;
  var el = e.target || e.srcElement;

    // external links
    if( el.nodeName.toLowerCase() == 'a' &&
        el.getAttribute( 'rel' ) == 'external' ){
      newWin( el.href );
    }
}




WEB DESIGN WORLD                                         44
style


   can get out of hand
                  Photo credit: thus spake drake
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Smart styles
ul.TabInterface-tab-list {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  border-bottom: 3px solid;
  margin: 0 0 3px;
}
ul.TabInterface- tab-list li {
  border-left: 1px solid;
  cursor: pointer;
  float: left;
  display: inline;
  width: 25%;
  padding-bottom: 1em;
  margin-right: -1px;
}


WEB DESIGN WORLD                      46
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




No style before its time
<div id=quot;mainquot; class=quot;tabbedquot;>


becomes
<div id=quot;mainquot; class=quot;tabbed-onquot;>




WEB DESIGN WORLD                      47
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




No style before its time
                                      Default        Activated
add “-on” to the class                .tabbed        .tabbed-on

add an activation class               .auto-submit   .auto-submit.active

change the form of the class          .replace-me    .replaced




WEB DESIGN WORLD                                                           47
before you
LEAP

        Photo credit: josh-n
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Look for methods
function someFunction(){
  if( !document.getElementsByTagName ) return;
  // code that uses document.getElementsByTagName()
  ...
}




WEB DESIGN WORLD                                      49
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Look for methods
function someFunction(){
  if( !document.getElementsByTagName ||
      !document.getElementById ) return;
  /* code that uses document.getElementsByTagName()
     and document.getElementById() */
}




WEB DESIGN WORLD                                      50
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Look for elements
function someFunction(){
  if( !document.getElementsByTagName ||
       !document.getElementsByTagName( 'p' ) ) return;
  /* code that uses document.getElementsByTagName()
      and requires the presence of a P element */
  ...
}




WEB DESIGN WORLD                                         51
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Look for identified elements
function someFunction(){
  if( !document.getElementById ||
      !document.getElementById( 'content' ) ) return;
  // code that requires the presence of #content
  ...
}




WEB DESIGN WORLD                                        52
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Look for objects
function someFunction(){
  if( typeof( Prototype ) == 'undefined' ) return;
  // code that uses Prototype
  ...
}




WEB DESIGN WORLD                                     53
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Look for object versions
function someFunction(){
  if( typeof( Prototype ) == 'undefined' ||
      parseFloat( Prototype.Version ) < 1.5 ) return;
  // code that uses Prototype 1.5 or higher
  ...
}




WEB DESIGN WORLD                                        54
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Look before you leap
window.onload = function(){
   if( document.getElementsByTagName &&
       document.getElementById ){
     someFunction();
   }
};




WEB DESIGN WORLD                          55
QUESTIONS?
Photo credit: masstistraction




it’s easier than this
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Example: Tab Interface
Goal: to create a panel-based widget




WEB DESIGN WORLD                       59
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Traditional approach
<h1>Pumpkin Pie</h1>

<div class=quot;containerquot;>
  <div class=quot;sectionquot;>
    <h2>Overview</h2>
    <img src=quot;pie.jpgquot; alt=quot;quot;>
    <p>Whether you're hosting a festive party or a casual get-together with
    friends, our Pumpkin Pie will make entertaining easy!</p>
    ...
  </div>
  ...
  <ul class=quot;tabsquot;>
    <li><a href=quot;#quot;>Overview</a></li>
    <li><a href=quot;#quot;>Ingredients</a></li>
    <li><a href=quot;#quot;>Directions</a></li>
    <li><a href=quot;#quot;>Nutrition</a></li>
  </ul>
</div>




WEB DESIGN WORLD                                                              60
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Static HTML with no style




WEB DESIGN WORLD                      61
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




A little typography




WEB DESIGN WORLD                      62
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Typography and color




WEB DESIGN WORLD                      63
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Static HTML with no style




WEB DESIGN WORLD                      64
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Static HTML with no style




                                      .tabbed

WEB DESIGN WORLD                                64
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




The actual source
<h1>Pumpkin Pie</h1>

<div class=quot;tabbedquot;>
  <h2>Overview</h2>
  <img src=quot;pie.jpgquot; alt=quot;quot; />
  <p>Whether you're hosting a festive party or a casual get-together with friends,
  our Pumpkin Pie will make entertaining easy!</p>
  ...

  <h2>Ingredients</h2>
  <ul>
    <li>1 (9<abbr title=quot;inchquot;>in</abbr>) unbaked deep dish pie crust</li>
    <li>! cup white sugar</li>
    <li>1 <abbr title=quot;teaspoonquot;>tsp</abbr> ground cinnamon</li>
    ...
  </ul>

  <h2>Directions</h2>
  ...
</div>




WEB DESIGN WORLD                                                                     65
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Understanding the flow




WEB DESIGN WORLD                      66
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




The full experience




WEB DESIGN WORLD                      67
QUESTIONS?
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Example: Collapsing Form
Goal: to create a search form with optional advanced filters.
By default the optional filters should be hidden, but users
should be able to show and hide them as they need to.




WEB DESIGN WORLD                                               69
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Collapsing Form as HTML




WEB DESIGN WORLD                      70
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Collapsing Form with CSS




WEB DESIGN WORLD                      71
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Collapsing Form with CSS




WEB DESIGN WORLD                      72
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Collapsing Form with CSS




WEB DESIGN WORLD                      73
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




HTML hooks




                                      form.collapsing
WEB DESIGN WORLD                                        74
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




HTML hooks




                                      fieldset.optional
WEB DESIGN WORLD                                          74
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Understanding the flow




WEB DESIGN WORLD                      75
FUNDAMENTAL PROGRESSIVE ENHANCEMENT




Collapsing Form with JS




WEB DESIGN WORLD                      76
QUESTIONS?
FUNDAMENTAL
 PROGRESSIVE
ENHANCEMENT
   Aaron Gustafson
Slides available at
  http://slideshare.net/AaronGustafson
     This presentation is licensed under
             Creative Commons
Attribution-Noncommercial-Share Alike 3.0
                flickr Photo Credits
                        “MacBook Pro” by dansays
                         “M&M” by madame.furie
                “Six-layered chocolate cake” by PetitPlat
     “Day 486 / 365 - Late Night High Level Coding” by JasonRogers
                            “Leghoul” by oskay
                          “Risk” by andyburnfield
                            “fr tom” by ambery
                     “CORNERSTONE” by spike55151
                             “Freedom” by drp
                         “Headphone” by Giando
                      “Shout, shout” by hebedesign
            “The writing is on the wall” by thus spake drake
                 “Tiger Leaping Gorge - Ram” by josh-n
             “some assembly required” by massdistraction

Mais conteúdo relacionado

Mais procurados

Style Guides Are The New Photoshop (Smashing Conference 2012)
Style Guides Are The New Photoshop (Smashing Conference 2012)Style Guides Are The New Photoshop (Smashing Conference 2012)
Style Guides Are The New Photoshop (Smashing Conference 2012)Stephen Hay
 
Front end developer responsibilities what does a front-end developer do?
Front end developer responsibilities  what does a front-end developer do?Front end developer responsibilities  what does a front-end developer do?
Front end developer responsibilities what does a front-end developer do?Katy Slemon
 
L’importance du crawl du JavaScript : pourquoi, comment et pour quels bénéfic...
L’importance du crawl du JavaScript : pourquoi, comment et pour quels bénéfic...L’importance du crawl du JavaScript : pourquoi, comment et pour quels bénéfic...
L’importance du crawl du JavaScript : pourquoi, comment et pour quels bénéfic...SEO Camp Association
 
[FrontInBH 2012] Por uma web mais rápida: técnicas de otimizações de sites - ...
[FrontInBH 2012] Por uma web mais rápida: técnicas de otimizações de sites - ...[FrontInBH 2012] Por uma web mais rápida: técnicas de otimizações de sites - ...
[FrontInBH 2012] Por uma web mais rápida: técnicas de otimizações de sites - ...Caelum
 
How to do Scalable UI-Heavy Development at a Breakneck Pace
How to do Scalable UI-Heavy Development at a Breakneck PaceHow to do Scalable UI-Heavy Development at a Breakneck Pace
How to do Scalable UI-Heavy Development at a Breakneck PaceSV Ruby on Rails Meetup
 
Responsive Web Design - but for real!
Responsive Web Design - but for real!Responsive Web Design - but for real!
Responsive Web Design - but for real!Rudy Rigot
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React지수 윤
 
Critical Rendering Path - Velocidade também é uma funcionalidade
Critical Rendering Path - Velocidade também é uma funcionalidadeCritical Rendering Path - Velocidade também é uma funcionalidade
Critical Rendering Path - Velocidade também é uma funcionalidadeJoao Lucas Santana
 
Make your website load really really fast - seo campus 2017
Make your website load really really fast  - seo campus 2017Make your website load really really fast  - seo campus 2017
Make your website load really really fast - seo campus 2017SEO Camp Association
 
Practical guide for front-end development for django devs
Practical guide for front-end development for django devsPractical guide for front-end development for django devs
Practical guide for front-end development for django devsDavidson Fellipe
 
NewBCamp08: Intro to Web Standards
NewBCamp08: Intro to Web StandardsNewBCamp08: Intro to Web Standards
NewBCamp08: Intro to Web StandardsAdam Darowski
 
Accessible Javascript using Frameworks - Barcamp London 5
Accessible Javascript using Frameworks - Barcamp London 5Accessible Javascript using Frameworks - Barcamp London 5
Accessible Javascript using Frameworks - Barcamp London 5Dirk Ginader
 
Rapid Prototyping With J Query
Rapid Prototyping With J QueryRapid Prototyping With J Query
Rapid Prototyping With J QueryBootstrap
 
Java Web Frameworks Sweetspots
Java Web Frameworks SweetspotsJava Web Frameworks Sweetspots
Java Web Frameworks SweetspotsMatt Raible
 
Web Fundamentals Crash Course
Web Fundamentals Crash CourseWeb Fundamentals Crash Course
Web Fundamentals Crash CourseMrAbas
 
Accessible Javascript with and without WAI ARIA
Accessible Javascript with and without WAI ARIAAccessible Javascript with and without WAI ARIA
Accessible Javascript with and without WAI ARIADirk Ginader
 

Mais procurados (19)

Style Guides Are The New Photoshop (Smashing Conference 2012)
Style Guides Are The New Photoshop (Smashing Conference 2012)Style Guides Are The New Photoshop (Smashing Conference 2012)
Style Guides Are The New Photoshop (Smashing Conference 2012)
 
Front end developer responsibilities what does a front-end developer do?
Front end developer responsibilities  what does a front-end developer do?Front end developer responsibilities  what does a front-end developer do?
Front end developer responsibilities what does a front-end developer do?
 
L’importance du crawl du JavaScript : pourquoi, comment et pour quels bénéfic...
L’importance du crawl du JavaScript : pourquoi, comment et pour quels bénéfic...L’importance du crawl du JavaScript : pourquoi, comment et pour quels bénéfic...
L’importance du crawl du JavaScript : pourquoi, comment et pour quels bénéfic...
 
[FrontInBH 2012] Por uma web mais rápida: técnicas de otimizações de sites - ...
[FrontInBH 2012] Por uma web mais rápida: técnicas de otimizações de sites - ...[FrontInBH 2012] Por uma web mais rápida: técnicas de otimizações de sites - ...
[FrontInBH 2012] Por uma web mais rápida: técnicas de otimizações de sites - ...
 
How to do Scalable UI-Heavy Development at a Breakneck Pace
How to do Scalable UI-Heavy Development at a Breakneck PaceHow to do Scalable UI-Heavy Development at a Breakneck Pace
How to do Scalable UI-Heavy Development at a Breakneck Pace
 
6 css week12 2020 2021 for g10
6 css week12 2020 2021 for g106 css week12 2020 2021 for g10
6 css week12 2020 2021 for g10
 
Responsive Web Design - but for real!
Responsive Web Design - but for real!Responsive Web Design - but for real!
Responsive Web Design - but for real!
 
The Role Of Java Script
The Role Of Java ScriptThe Role Of Java Script
The Role Of Java Script
 
Front-End 개발의 괜찮은 선택 ES6 & React
Front-End 개발의 괜찮은 선택  ES6 & ReactFront-End 개발의 괜찮은 선택  ES6 & React
Front-End 개발의 괜찮은 선택 ES6 & React
 
Critical Rendering Path - Velocidade também é uma funcionalidade
Critical Rendering Path - Velocidade também é uma funcionalidadeCritical Rendering Path - Velocidade também é uma funcionalidade
Critical Rendering Path - Velocidade também é uma funcionalidade
 
Web Development Life Cycle
Web Development Life CycleWeb Development Life Cycle
Web Development Life Cycle
 
Make your website load really really fast - seo campus 2017
Make your website load really really fast  - seo campus 2017Make your website load really really fast  - seo campus 2017
Make your website load really really fast - seo campus 2017
 
Practical guide for front-end development for django devs
Practical guide for front-end development for django devsPractical guide for front-end development for django devs
Practical guide for front-end development for django devs
 
NewBCamp08: Intro to Web Standards
NewBCamp08: Intro to Web StandardsNewBCamp08: Intro to Web Standards
NewBCamp08: Intro to Web Standards
 
Accessible Javascript using Frameworks - Barcamp London 5
Accessible Javascript using Frameworks - Barcamp London 5Accessible Javascript using Frameworks - Barcamp London 5
Accessible Javascript using Frameworks - Barcamp London 5
 
Rapid Prototyping With J Query
Rapid Prototyping With J QueryRapid Prototyping With J Query
Rapid Prototyping With J Query
 
Java Web Frameworks Sweetspots
Java Web Frameworks SweetspotsJava Web Frameworks Sweetspots
Java Web Frameworks Sweetspots
 
Web Fundamentals Crash Course
Web Fundamentals Crash CourseWeb Fundamentals Crash Course
Web Fundamentals Crash Course
 
Accessible Javascript with and without WAI ARIA
Accessible Javascript with and without WAI ARIAAccessible Javascript with and without WAI ARIA
Accessible Javascript with and without WAI ARIA
 

Semelhante a Fundamental Progressive Enhancement [Web Design World Boston 2008]

Fundamental Progressive Enhancement [Web Design World - Seattle 2009]
Fundamental Progressive Enhancement [Web Design World - Seattle 2009]Fundamental Progressive Enhancement [Web Design World - Seattle 2009]
Fundamental Progressive Enhancement [Web Design World - Seattle 2009]Aaron Gustafson
 
It's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrIt's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrMichael Enslow
 
wepik-mastering-the-trio-exploring-the-depths-of-html-css-and-javascript-2024...
wepik-mastering-the-trio-exploring-the-depths-of-html-css-and-javascript-2024...wepik-mastering-the-trio-exploring-the-depths-of-html-css-and-javascript-2024...
wepik-mastering-the-trio-exploring-the-depths-of-html-css-and-javascript-2024...priyadharshini63304
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX DesignersAshlimarie
 
Optimizing web performance (Fronteers edition)
Optimizing web performance (Fronteers edition)Optimizing web performance (Fronteers edition)
Optimizing web performance (Fronteers edition)Dave Olsen
 
Single Page WebApp Architecture
Single Page WebApp ArchitectureSingle Page WebApp Architecture
Single Page WebApp ArchitectureMorgan Cheng
 
Style Your Site Part 2
Style Your Site Part 2Style Your Site Part 2
Style Your Site Part 2Ben MacNeill
 
Standardizing the Web: A Look into the Why of Web Standards
Standardizing the Web: A Look into the Why of Web StandardsStandardizing the Web: A Look into the Why of Web Standards
Standardizing the Web: A Look into the Why of Web StandardsTim Wright
 
Awesomizing your Squarespace Website
Awesomizing your Squarespace WebsiteAwesomizing your Squarespace Website
Awesomizing your Squarespace WebsiteSeth Familian
 
SSR with Quasar Framework - JSNation 2019
SSR with Quasar Framework - JSNation 2019SSR with Quasar Framework - JSNation 2019
SSR with Quasar Framework - JSNation 2019Razvan Stoenescu
 
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]Aaron Gustafson
 
Doing Modern Web, aka JavaScript and HTML5 in the Enterprise
Doing Modern Web, aka JavaScript and HTML5 in the EnterpriseDoing Modern Web, aka JavaScript and HTML5 in the Enterprise
Doing Modern Web, aka JavaScript and HTML5 in the EnterpriseChris Love
 
Core Web Vitals - The Modern Web Experience
Core Web Vitals - The Modern Web ExperienceCore Web Vitals - The Modern Web Experience
Core Web Vitals - The Modern Web ExperienceCakra Danu Sedayu
 
Basics of Rich Internet Applications
Basics of Rich Internet ApplicationsBasics of Rich Internet Applications
Basics of Rich Internet ApplicationsSubramanyan Murali
 
Progressive Enhancement 101
Progressive Enhancement 101Progressive Enhancement 101
Progressive Enhancement 101ohellojames
 
Drupal Theming with CSS Frameworks (960grid)
Drupal Theming with CSS Frameworks (960grid)Drupal Theming with CSS Frameworks (960grid)
Drupal Theming with CSS Frameworks (960grid)Ryan Cross
 
Web 2.0 = Accessibility 2.0?
Web 2.0 = Accessibility 2.0?Web 2.0 = Accessibility 2.0?
Web 2.0 = Accessibility 2.0?Jared Smith
 
A Day Building Fast, Responsive, Extensible Single Page Applications
A Day Building Fast, Responsive, Extensible Single Page ApplicationsA Day Building Fast, Responsive, Extensible Single Page Applications
A Day Building Fast, Responsive, Extensible Single Page ApplicationsChris Love
 

Semelhante a Fundamental Progressive Enhancement [Web Design World Boston 2008] (20)

Fundamental Progressive Enhancement [Web Design World - Seattle 2009]
Fundamental Progressive Enhancement [Web Design World - Seattle 2009]Fundamental Progressive Enhancement [Web Design World - Seattle 2009]
Fundamental Progressive Enhancement [Web Design World - Seattle 2009]
 
It's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking ModernizrIt's a Mod World - A Practical Guide to Rocking Modernizr
It's a Mod World - A Practical Guide to Rocking Modernizr
 
wepik-mastering-the-trio-exploring-the-depths-of-html-css-and-javascript-2024...
wepik-mastering-the-trio-exploring-the-depths-of-html-css-and-javascript-2024...wepik-mastering-the-trio-exploring-the-depths-of-html-css-and-javascript-2024...
wepik-mastering-the-trio-exploring-the-depths-of-html-css-and-javascript-2024...
 
Web Development for UX Designers
Web Development for UX DesignersWeb Development for UX Designers
Web Development for UX Designers
 
Optimizing web performance (Fronteers edition)
Optimizing web performance (Fronteers edition)Optimizing web performance (Fronteers edition)
Optimizing web performance (Fronteers edition)
 
Single Page WebApp Architecture
Single Page WebApp ArchitectureSingle Page WebApp Architecture
Single Page WebApp Architecture
 
Style Your Site Part 2
Style Your Site Part 2Style Your Site Part 2
Style Your Site Part 2
 
Standardizing the Web: A Look into the Why of Web Standards
Standardizing the Web: A Look into the Why of Web StandardsStandardizing the Web: A Look into the Why of Web Standards
Standardizing the Web: A Look into the Why of Web Standards
 
Awesomizing your Squarespace Website
Awesomizing your Squarespace WebsiteAwesomizing your Squarespace Website
Awesomizing your Squarespace Website
 
Web Design
Web DesignWeb Design
Web Design
 
SSR with Quasar Framework - JSNation 2019
SSR with Quasar Framework - JSNation 2019SSR with Quasar Framework - JSNation 2019
SSR with Quasar Framework - JSNation 2019
 
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
Crafting Rich Experiences with Progressive Enhancement [Beyond Tellerrand 2011]
 
Doing Modern Web, aka JavaScript and HTML5 in the Enterprise
Doing Modern Web, aka JavaScript and HTML5 in the EnterpriseDoing Modern Web, aka JavaScript and HTML5 in the Enterprise
Doing Modern Web, aka JavaScript and HTML5 in the Enterprise
 
Core Web Vitals - The Modern Web Experience
Core Web Vitals - The Modern Web ExperienceCore Web Vitals - The Modern Web Experience
Core Web Vitals - The Modern Web Experience
 
Basics of Rich Internet Applications
Basics of Rich Internet ApplicationsBasics of Rich Internet Applications
Basics of Rich Internet Applications
 
Progressive Enhancement 101
Progressive Enhancement 101Progressive Enhancement 101
Progressive Enhancement 101
 
Drupal Theming with CSS Frameworks (960grid)
Drupal Theming with CSS Frameworks (960grid)Drupal Theming with CSS Frameworks (960grid)
Drupal Theming with CSS Frameworks (960grid)
 
BackEnd-Roadmap.pdf
BackEnd-Roadmap.pdfBackEnd-Roadmap.pdf
BackEnd-Roadmap.pdf
 
Web 2.0 = Accessibility 2.0?
Web 2.0 = Accessibility 2.0?Web 2.0 = Accessibility 2.0?
Web 2.0 = Accessibility 2.0?
 
A Day Building Fast, Responsive, Extensible Single Page Applications
A Day Building Fast, Responsive, Extensible Single Page ApplicationsA Day Building Fast, Responsive, Extensible Single Page Applications
A Day Building Fast, Responsive, Extensible Single Page Applications
 

Mais de Aaron Gustafson

Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Aaron Gustafson
 
Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Aaron Gustafson
 
Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Aaron Gustafson
 
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Aaron Gustafson
 
Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Aaron Gustafson
 
Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Aaron Gustafson
 
Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Aaron Gustafson
 
Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Aaron Gustafson
 
Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]Aaron Gustafson
 
PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]Aaron Gustafson
 
Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Aaron Gustafson
 
Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Aaron Gustafson
 
Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]Aaron Gustafson
 
The Web Should Just Work for Everyone
The Web Should Just Work for EveryoneThe Web Should Just Work for Everyone
The Web Should Just Work for EveryoneAaron Gustafson
 
Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Aaron Gustafson
 
Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]Aaron Gustafson
 
Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Aaron Gustafson
 
Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Aaron Gustafson
 
Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Aaron Gustafson
 
Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Aaron Gustafson
 

Mais de Aaron Gustafson (20)

Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]Delivering Critical Information and Services [JavaScript & Friends 2021]
Delivering Critical Information and Services [JavaScript & Friends 2021]
 
Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]Adapting to Reality [Guest Lecture, March 2021]
Adapting to Reality [Guest Lecture, March 2021]
 
Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]Designing the Conversation [Beyond Tellerrand 2019]
Designing the Conversation [Beyond Tellerrand 2019]
 
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
Getting Started with Progressive Web Apps [Beyond Tellerrand 2019]
 
Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?Progressive Web Apps: Where Do I Begin?
Progressive Web Apps: Where Do I Begin?
 
Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]Media in the Age of PWAs [ImageCon 2019]
Media in the Age of PWAs [ImageCon 2019]
 
Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]Adapting to Reality [Starbucks Lunch & Learn]
Adapting to Reality [Starbucks Lunch & Learn]
 
Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]Conversational Semantics for the Web [CascadiaJS 2018]
Conversational Semantics for the Web [CascadiaJS 2018]
 
Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]Better Performance === Greater Accessibility [Inclusive Design 24 2018]
Better Performance === Greater Accessibility [Inclusive Design 24 2018]
 
PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]PWA: Where Do I Begin? [Microsoft Ignite 2018]
PWA: Where Do I Begin? [Microsoft Ignite 2018]
 
Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]Designing the Conversation [Concatenate 2018]
Designing the Conversation [Concatenate 2018]
 
Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]Designing the Conversation [Accessibility DC 2018]
Designing the Conversation [Accessibility DC 2018]
 
Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]Performance as User Experience [AEADC 2018]
Performance as User Experience [AEADC 2018]
 
The Web Should Just Work for Everyone
The Web Should Just Work for EveryoneThe Web Should Just Work for Everyone
The Web Should Just Work for Everyone
 
Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]Performance as User Experience [AEA SEA 2018]
Performance as User Experience [AEA SEA 2018]
 
Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]Performance as User Experience [An Event Apart Denver 2017]
Performance as User Experience [An Event Apart Denver 2017]
 
Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2Advanced Design Methods 1, Day 2
Advanced Design Methods 1, Day 2
 
Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1Advanced Design Methods 1, Day 1
Advanced Design Methods 1, Day 1
 
Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]Designing the Conversation [Paris Web 2017]
Designing the Conversation [Paris Web 2017]
 
Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]Exploring Adaptive Interfaces [Generate 2017]
Exploring Adaptive Interfaces [Generate 2017]
 

Último

"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 

Último (20)

"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 

Fundamental Progressive Enhancement [Web Design World Boston 2008]

  • 3. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Graceful Degradation User Experience NEWER OLDER Browser Age WEB DESIGN WORLD 3
  • 4. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Progressive Enhancement User Experience BASIC ADVANCED Browser Capabilities WEB DESIGN WORLD 4
  • 5.
  • 6. it’s about service
  • 11. a little treat for everyone Photo credit: madam.furie
  • 12.
  • 13.
  • 14.
  • 16. FUNDAMENTAL PROGRESSIVE ENHANCEMENT JavaScript CSS XHTML + HTTP only WEB DESIGN WORLD 13
  • 17. FUNDAMENTAL PROGRESSIVE ENHANCEMENT JavaScript some JavaScript CSS some CSS XHTML + HTTP only WEB DESIGN WORLD 13
  • 18. FUNDAMENTAL PROGRESSIVE ENHANCEMENT User Experience BASIC ADVANCED Browser Capabilities WEB DESIGN WORLD 14
  • 21. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Rise to meet needs robust JavaScript User Experience some JavaScript robust CSS some CSS XHTML & HTTP WEB DESIGN WORLD 16
  • 22. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Rise to meet needs robust JavaScript User Experience some JavaScript robust CSS some CSS XHTML & HTTP WEB DESIGN WORLD 16
  • 23. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Rise to meet needs robust JavaScript User Experience some JavaScript robust CSS some CSS XHTML & HTTP WEB DESIGN WORLD 16
  • 24. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Rise to meet needs robust JavaScript User Experience some JavaScript robust CSS some CSS XHTML & HTTP WEB DESIGN WORLD 16
  • 25. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Rise to meet needs robust JavaScript User Experience some JavaScript robust CSS some CSS XHTML & HTTP WEB DESIGN WORLD 16
  • 26. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Rely on your baseline robust JavaScript User Experience some JavaScript robust CSS some CSS XHTML & HTTP WEB DESIGN WORLD 17
  • 27. Photo credit: PetitPlat by sk_ you can still be creative
  • 28. every key we press a!ects user experience Photo credit: JasonRogers
  • 30. FUNDAMENTAL PROGRESSIVE ENHANCEMENT layout.css color.css main.css type.css WEB DESIGN WORLD 21
  • 31. FUNDAMENTAL PROGRESSIVE ENHANCEMENT type.css layout.css color.css WEB DESIGN WORLD 21
  • 32. FUNDAMENTAL PROGRESSIVE ENHANCEMENT <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> href=quot;main.cssquot; href=quot;color.cssquot; /> WEB DESIGN WORLD 22
  • 33. FUNDAMENTAL PROGRESSIVE ENHANCEMENT <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;main.cssquot; />/> href=quot;layout.cssquot; <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; /> WEB DESIGN WORLD 22
  • 34. FUNDAMENTAL PROGRESSIVE ENHANCEMENT <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; /> WEB DESIGN WORLD 23
  • 35. FUNDAMENTAL PROGRESSIVE ENHANCEMENT <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;print.cssquot; media=quot;printquot; /> WEB DESIGN WORLD 23
  • 36. FUNDAMENTAL PROGRESSIVE ENHANCEMENT <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;print.cssquot; media=quot;printquot; /> WEB DESIGN WORLD 23
  • 37. FUNDAMENTAL PROGRESSIVE ENHANCEMENT @import 'screen.css'; <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;print.cssquot; media=quot;printquot; /> WEB DESIGN WORLD 23
  • 38. FUNDAMENTAL PROGRESSIVE ENHANCEMENT @import 'screen.css';screen; 'screen.css' s; @import 'print.css' print; @import 'mobile.css' handheld; <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;print.cssquot; media=quot;printquot; /> WEB DESIGN WORLD 23
  • 39. (the browser that wouldn’t die) Photo credit: oskay
  • 40. FUNDAMENTAL PROGRESSIVE ENHANCEMENT <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; /> WEB DESIGN WORLD 25
  • 41. FUNDAMENTAL PROGRESSIVE ENHANCEMENT <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; /> <!--[if IE lte 7]> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;ie7.cssquot; /> <![endif]--> WEB DESIGN WORLD 25
  • 42. FUNDAMENTAL PROGRESSIVE ENHANCEMENT <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;type.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;layout.cssquot; /> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;color.cssquot; /> <!--[if IE lte 7]> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;ie7.cssquot; /> <![endif]--> <!--[if IE lte 6]> <link rel=quot;stylesheetquot; type=quot;text/cssquot; href=quot;ie6.cssquot; /> <![endif]--> WEB DESIGN WORLD 25
  • 43. property: value; html>/**/body _property: value; * html voice-family: quot;quot;}quot;quot;; -property: value; voice-family:inherit; *:first-child+html
  • 44. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Make smart decisions WEB DESIGN WORLD 27
  • 45. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Make smart decisions <form id=quot;contact-formquot; action=quot;#quot; method=quot;postquot;> <fieldset> <legend>Contact Us</legend> <p>Send us a message. All fields are required.</p> <ol> <li> <label for=quot;contact-namequot;>Name</label> <input type=quot;textquot; id=quot;contact-namequot; name=quot;namequot; /> </li> <li> <label for=quot;contact-emailquot;>Email</label> <input type=quot;textquot; id=quot;contact-emailquot; name=quot;emailquot; /> </li> <li> <label for=quot;contact-messagequot;>Message</label> <textarea id=quot;contact-messagequot; name=quot;messagequot; rows=quot;4quot; cols=quot;30quot;></textarea> </li> </ol> <button type=quot;submitquot;>Send It</button> </fieldset> </form> WEB DESIGN WORLD 27
  • 46. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Make smart decisions <form id=quot;contact-formquot; action=quot;#quot; method=quot;postquot;> <fieldset> <legend>Contact Us</legend> <p>Send us a message. All fields are required.</p> <ol> <li> <label for=quot;contact-namequot;>Name</label> <input type=quot;textquot; id=quot;contact-namequot; name=quot;namequot; /> </li> <li> <label for=quot;contact-emailquot;>Email</label> <input type=quot;textquot; id=quot;contact-emailquot; name=quot;emailquot; /> </li> <li> <label for=quot;contact-messagequot;>Message</label> <textarea id=quot;contact-messagequot; name=quot;messagequot; rows=quot;4quot; cols=quot;30quot;></textarea> </li> </ol> <button type=quot;submitquot;>Send It</button> </fieldset> </form> WEB DESIGN WORLD 27
  • 47. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Make smart decisions <form id=quot;contact-formquot; action=quot;#quot; method=quot;postquot;> <fieldset> <legend>Contact Us</legend> <p>Send us a message. All fields are required.</p> <ol> <li> <label for=quot;contact-namequot;>Name</label> <input type=quot;textquot; id=quot;contact-namequot; name=quot;namequot; /> </li> <li> <label for=quot;contact-emailquot;>Email</label> <input type=quot;textquot; id=quot;contact-emailquot; name=quot;emailquot; /> </li> <li> <label for=quot;contact-messagequot;>Message</label> <textarea id=quot;contact-messagequot; name=quot;messagequot; rows=quot;4quot; cols=quot;30quot;></textarea> </li> </ol> <button type=quot;submitquot;>Send It</button> </fieldset> </form> WEB DESIGN WORLD 27
  • 48. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Make smart decisions label:after { content: quot;:quot;; } WEB DESIGN WORLD 27
  • 53. ...can keep you from looking foolish
  • 54. FUNDAMENTAL PROGRESSIVE ENHANCEMENT robust JavaScript User Experience some JavaScript robust CSS some CSS XHTML & HTTP WEB DESIGN WORLD 34
  • 56. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Consider lala.com WEB DESIGN WORLD 36
  • 57. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Without JavaScript WEB DESIGN WORLD 37
  • 58. FUNDAMENTAL PROGRESSIVE ENHANCEMENT And looking at the markup... WEB DESIGN WORLD 38
  • 61. listen? Photo credit: Giando
  • 62. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Event Listening window.onload = handleExternalLinks; function handleExternalLinks(){ var server = document.location.hostname; var anchors = document.getElementsByTagName(quot;aquot;); var i, href; for( i=0; i < anchors.length; i++ ){ href = anchors[i].href; if( href.indexOf(quot;http://quot; + server) == -1 && href.indexOf(quot;https://quot; + server) == -1 ){ // HREF is not a file on my server anchors[i].onclick = function(){ newWin( this.href ); }; } } } WEB DESIGN WORLD 42
  • 63. or delegate? Photo credit: hebedesign
  • 64. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Event delegation document.getElementsByTagName( 'body' )[0].onclick = quot; clickDelegator; function clickDelegator( e ){ e = ( e ) ? e : event; var el = e.target || e.srcElement; // external links if( el.nodeName.toLowerCase() == 'a' && el.getAttribute( 'rel' ) == 'external' ){ newWin( el.href ); } } WEB DESIGN WORLD 44
  • 65. style can get out of hand Photo credit: thus spake drake
  • 66. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Smart styles ul.TabInterface-tab-list { position: absolute; top: 0; left: 0; width: 100%; border-bottom: 3px solid; margin: 0 0 3px; } ul.TabInterface- tab-list li { border-left: 1px solid; cursor: pointer; float: left; display: inline; width: 25%; padding-bottom: 1em; margin-right: -1px; } WEB DESIGN WORLD 46
  • 67. FUNDAMENTAL PROGRESSIVE ENHANCEMENT No style before its time <div id=quot;mainquot; class=quot;tabbedquot;> becomes <div id=quot;mainquot; class=quot;tabbed-onquot;> WEB DESIGN WORLD 47
  • 68. FUNDAMENTAL PROGRESSIVE ENHANCEMENT No style before its time Default Activated add “-on” to the class .tabbed .tabbed-on add an activation class .auto-submit .auto-submit.active change the form of the class .replace-me .replaced WEB DESIGN WORLD 47
  • 69. before you LEAP Photo credit: josh-n
  • 70. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Look for methods function someFunction(){ if( !document.getElementsByTagName ) return; // code that uses document.getElementsByTagName() ... } WEB DESIGN WORLD 49
  • 71. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Look for methods function someFunction(){ if( !document.getElementsByTagName || !document.getElementById ) return; /* code that uses document.getElementsByTagName() and document.getElementById() */ } WEB DESIGN WORLD 50
  • 72. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Look for elements function someFunction(){ if( !document.getElementsByTagName || !document.getElementsByTagName( 'p' ) ) return; /* code that uses document.getElementsByTagName() and requires the presence of a P element */ ... } WEB DESIGN WORLD 51
  • 73. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Look for identified elements function someFunction(){ if( !document.getElementById || !document.getElementById( 'content' ) ) return; // code that requires the presence of #content ... } WEB DESIGN WORLD 52
  • 74. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Look for objects function someFunction(){ if( typeof( Prototype ) == 'undefined' ) return; // code that uses Prototype ... } WEB DESIGN WORLD 53
  • 75. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Look for object versions function someFunction(){ if( typeof( Prototype ) == 'undefined' || parseFloat( Prototype.Version ) < 1.5 ) return; // code that uses Prototype 1.5 or higher ... } WEB DESIGN WORLD 54
  • 76. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Look before you leap window.onload = function(){ if( document.getElementsByTagName && document.getElementById ){ someFunction(); } }; WEB DESIGN WORLD 55
  • 79. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Example: Tab Interface Goal: to create a panel-based widget WEB DESIGN WORLD 59
  • 80. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Traditional approach <h1>Pumpkin Pie</h1> <div class=quot;containerquot;> <div class=quot;sectionquot;> <h2>Overview</h2> <img src=quot;pie.jpgquot; alt=quot;quot;> <p>Whether you're hosting a festive party or a casual get-together with friends, our Pumpkin Pie will make entertaining easy!</p> ... </div> ... <ul class=quot;tabsquot;> <li><a href=quot;#quot;>Overview</a></li> <li><a href=quot;#quot;>Ingredients</a></li> <li><a href=quot;#quot;>Directions</a></li> <li><a href=quot;#quot;>Nutrition</a></li> </ul> </div> WEB DESIGN WORLD 60
  • 81. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Static HTML with no style WEB DESIGN WORLD 61
  • 82. FUNDAMENTAL PROGRESSIVE ENHANCEMENT A little typography WEB DESIGN WORLD 62
  • 83. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Typography and color WEB DESIGN WORLD 63
  • 84. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Static HTML with no style WEB DESIGN WORLD 64
  • 85. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Static HTML with no style .tabbed WEB DESIGN WORLD 64
  • 86. FUNDAMENTAL PROGRESSIVE ENHANCEMENT The actual source <h1>Pumpkin Pie</h1> <div class=quot;tabbedquot;> <h2>Overview</h2> <img src=quot;pie.jpgquot; alt=quot;quot; /> <p>Whether you're hosting a festive party or a casual get-together with friends, our Pumpkin Pie will make entertaining easy!</p> ... <h2>Ingredients</h2> <ul> <li>1 (9<abbr title=quot;inchquot;>in</abbr>) unbaked deep dish pie crust</li> <li>! cup white sugar</li> <li>1 <abbr title=quot;teaspoonquot;>tsp</abbr> ground cinnamon</li> ... </ul> <h2>Directions</h2> ... </div> WEB DESIGN WORLD 65
  • 87. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Understanding the flow WEB DESIGN WORLD 66
  • 88. FUNDAMENTAL PROGRESSIVE ENHANCEMENT The full experience WEB DESIGN WORLD 67
  • 90. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Example: Collapsing Form Goal: to create a search form with optional advanced filters. By default the optional filters should be hidden, but users should be able to show and hide them as they need to. WEB DESIGN WORLD 69
  • 91. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Collapsing Form as HTML WEB DESIGN WORLD 70
  • 92. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Collapsing Form with CSS WEB DESIGN WORLD 71
  • 93. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Collapsing Form with CSS WEB DESIGN WORLD 72
  • 94. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Collapsing Form with CSS WEB DESIGN WORLD 73
  • 95. FUNDAMENTAL PROGRESSIVE ENHANCEMENT HTML hooks form.collapsing WEB DESIGN WORLD 74
  • 96. FUNDAMENTAL PROGRESSIVE ENHANCEMENT HTML hooks fieldset.optional WEB DESIGN WORLD 74
  • 97. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Understanding the flow WEB DESIGN WORLD 75
  • 98. FUNDAMENTAL PROGRESSIVE ENHANCEMENT Collapsing Form with JS WEB DESIGN WORLD 76
  • 101. Slides available at http://slideshare.net/AaronGustafson This presentation is licensed under Creative Commons Attribution-Noncommercial-Share Alike 3.0 flickr Photo Credits “MacBook Pro” by dansays “M&M” by madame.furie “Six-layered chocolate cake” by PetitPlat “Day 486 / 365 - Late Night High Level Coding” by JasonRogers “Leghoul” by oskay “Risk” by andyburnfield “fr tom” by ambery “CORNERSTONE” by spike55151 “Freedom” by drp “Headphone” by Giando “Shout, shout” by hebedesign “The writing is on the wall” by thus spake drake “Tiger Leaping Gorge - Ram” by josh-n “some assembly required” by massdistraction