SlideShare una empresa de Scribd logo
1 de 40
Descargar para leer sin conexión
Progressive Advancement
         by way of Progressive Enhancement
         with a sprinkle of Regressive Enhancement, where possible


                                                          Paul Irish
                                                    Google Chrome
                                                  FRONTEND2010



Sunday, September 12, 2010
Your mother does
                              NOT find a website
                             she likes the look of,
                              and then opens it
                               another browser.

                                       ~Andy Clarke (@malarkey)




Sunday, September 12, 2010
OMG Browser wars




Sunday, September 12, 2010
Shiny new toys




                             svg
Sunday, September 12, 2010
Contenteditable




Sunday, September 12, 2010
A Question...
     if you’re designing a mobile experience,

     do you start with how its going to look
     in blackberry and s60 and winmobile?

     or do you design it to look fucking great
     in android, iOS, happy new webkits...
     and function decently on the rest?
Sunday, September 12, 2010
So why have we had a different approach
           when it comes to the desktop?




Sunday, September 12, 2010
So we create an experience that takes
           advantage of hotness when we have it.

              and function decently when we don’t.




Sunday, September 12, 2010
How then?




Sunday, September 12, 2010
Modernizr
Sunday, September 12, 2010
Sunday, September 12, 2010
Feature Detection


Sunday, September 12, 2010
sni
                                   ffin
                                        g   use
                                               rag
                                                  ent
                                                     s ==
                                                            = sn
                                                                iffin
                                                                     g gl
                                                                            ue




Sunday, September 12, 2010
Sunday, September 12, 2010
Sunday, September 12, 2010
Native                    No Native
              Implementation            Implementation
              .box {                    .no-borderradius .box {
                 // use border-radius      // maybe less padding?
              }                         }


                                        if (Modernizr.borderradius == false){
                                           // call up DD_roundies, etc.
                                        }


Sunday, September 12, 2010
// geo-location bridge
        function getLocation(callback){
          if (getLocation.cache) return callback(getLocation.cache);

            if (Modernizr.geolocation) {

                navigator.geolocation.getCurrentPosition(function(position) {
                  callback(getLocation.cache = {
                     "lat": position.coords.latitude,
                     "lon": position.coords.longitude,
                     "obj": position
                  })
                });

            } else {

                $.getScript('//www.google.com/jsapi',function(){
                  callback(getLocation.cache = {
                     "lat": google.loader.ClientLocation.latitude,
                     "lon": google.loader.ClientLocation.longitude,
                     "obj": google.loader.ClientLocation
                  })
                });
            }
        }
        // usage
        getLocation(function(pos){
          console.log("I'm located at ",pos.lat,' and ',pos.lon);
        });


Sunday, September 12, 2010
Sunday, September 12, 2010
OM
                             onl G it’s
                                y3
                                   .7k
                                       !




Sunday, September 12, 2010
We got you covered, b.
              Rounded corners         2D Transformations
              @font-face fonts        CSS Gradients
              Canvas                  SVG
              rgba(), hsla() colors   Geolocation
              border-image            CSS Columns
              box-shadow              HTML5 Forms
              HTML5 Audio & Video     Web Workers
              CSS Animations          Offline Web Apps
              CSS Transitions         …


Sunday, September 12, 2010
We got you covered, b.
              Rounded corners         2D Transformations   webGL
              @font-face fonts        CSS Gradients        SMIL
              Canvas                  SVG                  hashchange event
              rgba(), hsla() colors   Geolocation          localStorage
              border-image            CSS Columns          sessionStorage
              box-shadow              HTML5 Forms          postMessage
              HTML5 Audio &           Web Workers          html5 drag ‘n drop
              Video
                                      Offline Web Apps      web sql database
              CSS Animations
              CSS Transitions



Sunday, September 12, 2010
We got you covered, b.
              Rounded corners           2D Transformations   webGL
              @font-face fonts          CSS Gradients        SMIL
              Canvas                    SVG                  hashchange event
              rgba(), hsla() colors     Geolocation          localStorage
              border-image              CSS Columns          sessionStorage
              box-shadow                HTML5 Forms          postMessage
              HTML5 Audio &             Web Workers          html5 drag ‘n drop
              Video
                                        Offline Web Apps      web sql database
              CSS Animations
              CSS Transitions             or just take the tests
                                      by themselves, sans-library
Sunday, September 12, 2010
Modernizr
              http://modernizr.com
                             @modernizr




                                          Yah, it’s open source. Fork it, baby.


Sunday, September 12, 2010
Sunday, September 12, 2010
CSS3 Please!




Sunday, September 12, 2010
.. but how can i convince my team
                        to use this stuff for modern
                                           browsers?




Sunday, September 12, 2010
Be the champion of performance.




Sunday, September 12, 2010
A Performance Policy

                             2 truths
        1. Both you and the client want the most
           responsive experience possible.
        2. Everything added to the page slows it
           down.


Sunday, September 12, 2010
A Performance Policy
              During IA, IxD and visual design
                    communicate impact of design decisions


              Tell the client all browsers will not have the
              same experience
                    It’s not worthwhile to have feature parity

Sunday, September 12, 2010
When performance is poor
          There are three options:


          1. Redevelop the code

          2. Drop the feature

          3. Redesign approach of the UI


Sunday, September 12, 2010
Make the case




Sunday, September 12, 2010
Killing code is a good thing
            HTML5            form controls             UI libraries

             HTML5           drag ‘n drop         jQuery.fn.draggable()

                   css transitions                     .animate()
                                             VS

            border-radius
            border-image                          large image sprites
         background gradients

                     localStorage                       cookies

Sunday, September 12, 2010
Tantek sez:




Sunday, September 12, 2010
Tantek’s list:
     dependable:             roughly usable:   experimentable:
      doctype                 canvas            geolocation
      charset                                   web sockets
      selfclose, quotes      awkward:           web sql database
      new semantics           form inputs       indexeddatabase
      audio/video             meter/progress    webstorage
                              autofocus,        web workers
                             placeholder




Sunday, September 12, 2010
Paul’s list:
     dependable:             roughly usable:   experimentable:
      doctype                 canvas            web sql database
      charset                 geolocation       indexeddatabase
      selfclose, quotes       web sockets       webstorage
      new semantics           autofocus,        web workers
      audio/video            placeholder
      data-* attrs
      drag n drop            awkward:
      contenteditable         form inputs
                              meter/progress


Sunday, September 12, 2010
Sunday, September 12, 2010
Sunday, September 12, 2010
Sunday, September 12, 2010
Me:
                             http://paulirish.com
                                   @paul_irish




Sunday, September 12, 2010
OM
                                                          G
                                                    THX
                                                        !
                             Me:
                             http://paulirish.com
                                   @paul_irish




Sunday, September 12, 2010

Más contenido relacionado

Similar a Progressive Advancement, by way of progressive enhancement

Ga london-html5&mobile advertising-tomlimongello
Ga london-html5&mobile advertising-tomlimongelloGa london-html5&mobile advertising-tomlimongello
Ga london-html5&mobile advertising-tomlimongello
Tom Limongello
 
Modern web application model
Modern web application modelModern web application model
Modern web application model
Michal Taberski
 
Dominion Enterprises _H@<k@th0n_
Dominion Enterprises _H@<k@th0n_Dominion Enterprises _H@<k@th0n_
Dominion Enterprises _H@<k@th0n_
Ken Collins
 
Responsive Design for the Web
Responsive Design for the WebResponsive Design for the Web
Responsive Design for the Web
jonbuda
 

Similar a Progressive Advancement, by way of progressive enhancement (20)

Ga london-html5&mobile advertising-tomlimongello
Ga london-html5&mobile advertising-tomlimongelloGa london-html5&mobile advertising-tomlimongello
Ga london-html5&mobile advertising-tomlimongello
 
Introduction to Canvas and Native Web Vector Graphics
Introduction to Canvas and Native Web Vector GraphicsIntroduction to Canvas and Native Web Vector Graphics
Introduction to Canvas and Native Web Vector Graphics
 
Sencha Touch beta — Amazing Mobile Web Apps with HTML5, CSS3 & JavaScript
Sencha Touch beta — Amazing Mobile Web Apps with HTML5, CSS3 & JavaScriptSencha Touch beta — Amazing Mobile Web Apps with HTML5, CSS3 & JavaScript
Sencha Touch beta — Amazing Mobile Web Apps with HTML5, CSS3 & JavaScript
 
Zeno rocha - HTML5 APIs para Mobile
Zeno rocha - HTML5 APIs para MobileZeno rocha - HTML5 APIs para Mobile
Zeno rocha - HTML5 APIs para Mobile
 
Using CartoDB to analyze OpenStreetMap data
Using CartoDB to analyze OpenStreetMap dataUsing CartoDB to analyze OpenStreetMap data
Using CartoDB to analyze OpenStreetMap data
 
07 problem-solving
07 problem-solving07 problem-solving
07 problem-solving
 
DjangoCon 2009 Keynote
DjangoCon 2009 KeynoteDjangoCon 2009 Keynote
DjangoCon 2009 Keynote
 
Big app design for Node.js
Big app design for Node.jsBig app design for Node.js
Big app design for Node.js
 
HTML5 e CSS3 - A nova novidade
HTML5 e CSS3 - A nova novidadeHTML5 e CSS3 - A nova novidade
HTML5 e CSS3 - A nova novidade
 
Modern web application model
Modern web application modelModern web application model
Modern web application model
 
Augmented Reality with JavaScript and Appcelerator Titanium
Augmented Reality with JavaScript and Appcelerator TitaniumAugmented Reality with JavaScript and Appcelerator Titanium
Augmented Reality with JavaScript and Appcelerator Titanium
 
Dominion Enterprises _H@<k@th0n_
Dominion Enterprises _H@<k@th0n_Dominion Enterprises _H@<k@th0n_
Dominion Enterprises _H@<k@th0n_
 
Joshfire Factory: Building Apps for Billion of Devices
Joshfire Factory: Building Apps for Billion of DevicesJoshfire Factory: Building Apps for Billion of Devices
Joshfire Factory: Building Apps for Billion of Devices
 
Sassy Stylesheets with SCSS
Sassy Stylesheets with SCSSSassy Stylesheets with SCSS
Sassy Stylesheets with SCSS
 
Macruby - RubyConf Presentation 2010
Macruby - RubyConf Presentation 2010Macruby - RubyConf Presentation 2010
Macruby - RubyConf Presentation 2010
 
WebGL and three.js
WebGL and three.jsWebGL and three.js
WebGL and three.js
 
100% JS
100% JS100% JS
100% JS
 
Responsive Design for the Web
Responsive Design for the WebResponsive Design for the Web
Responsive Design for the Web
 
Responsive Web Design & Workflow
Responsive Web Design & WorkflowResponsive Web Design & Workflow
Responsive Web Design & Workflow
 
Cloud Austin 2013: Conferenced2013
Cloud Austin 2013: Conferenced2013Cloud Austin 2013: Conferenced2013
Cloud Austin 2013: Conferenced2013
 

Más de Paul Irish (6)

webfonts & @font-face :: in brief
webfonts & @font-face :: in briefwebfonts & @font-face :: in brief
webfonts & @font-face :: in brief
 
Squeezing The Best Out Of Webfonts
Squeezing The Best Out Of WebfontsSqueezing The Best Out Of Webfonts
Squeezing The Best Out Of Webfonts
 
Employing Custom Fonts
Employing Custom FontsEmploying Custom Fonts
Employing Custom Fonts
 
jQuery Anti-Patterns for Performance & Compression
jQuery Anti-Patterns for Performance & CompressionjQuery Anti-Patterns for Performance & Compression
jQuery Anti-Patterns for Performance & Compression
 
Practical Design Solutions from Japan
Practical Design Solutions from JapanPractical Design Solutions from Japan
Practical Design Solutions from Japan
 
Rich Typography Options For The Web - or - Why sIFR is Dead in 2009
Rich Typography Options For The Web - or - Why sIFR is Dead in 2009Rich Typography Options For The Web - or - Why sIFR is Dead in 2009
Rich Typography Options For The Web - or - Why sIFR is Dead in 2009
 

Último

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Último (20)

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

Progressive Advancement, by way of progressive enhancement

  • 1. Progressive Advancement by way of Progressive Enhancement with a sprinkle of Regressive Enhancement, where possible Paul Irish Google Chrome FRONTEND2010 Sunday, September 12, 2010
  • 2. Your mother does NOT find a website she likes the look of, and then opens it another browser. ~Andy Clarke (@malarkey) Sunday, September 12, 2010
  • 3. OMG Browser wars Sunday, September 12, 2010
  • 4. Shiny new toys svg Sunday, September 12, 2010
  • 6. A Question... if you’re designing a mobile experience, do you start with how its going to look in blackberry and s60 and winmobile? or do you design it to look fucking great in android, iOS, happy new webkits... and function decently on the rest? Sunday, September 12, 2010
  • 7. So why have we had a different approach when it comes to the desktop? Sunday, September 12, 2010
  • 8. So we create an experience that takes advantage of hotness when we have it. and function decently when we don’t. Sunday, September 12, 2010
  • 13. sni ffin g use rag ent s == = sn iffin g gl ue Sunday, September 12, 2010
  • 16. Native No Native Implementation Implementation .box { .no-borderradius .box { // use border-radius // maybe less padding? } } if (Modernizr.borderradius == false){ // call up DD_roundies, etc. } Sunday, September 12, 2010
  • 17. // geo-location bridge function getLocation(callback){ if (getLocation.cache) return callback(getLocation.cache); if (Modernizr.geolocation) { navigator.geolocation.getCurrentPosition(function(position) { callback(getLocation.cache = { "lat": position.coords.latitude, "lon": position.coords.longitude, "obj": position }) }); } else { $.getScript('//www.google.com/jsapi',function(){ callback(getLocation.cache = { "lat": google.loader.ClientLocation.latitude, "lon": google.loader.ClientLocation.longitude, "obj": google.loader.ClientLocation }) }); } } // usage getLocation(function(pos){ console.log("I'm located at ",pos.lat,' and ',pos.lon); }); Sunday, September 12, 2010
  • 19. OM onl G it’s y3 .7k ! Sunday, September 12, 2010
  • 20. We got you covered, b. Rounded corners 2D Transformations @font-face fonts CSS Gradients Canvas SVG rgba(), hsla() colors Geolocation border-image CSS Columns box-shadow HTML5 Forms HTML5 Audio & Video Web Workers CSS Animations Offline Web Apps CSS Transitions … Sunday, September 12, 2010
  • 21. We got you covered, b. Rounded corners 2D Transformations webGL @font-face fonts CSS Gradients SMIL Canvas SVG hashchange event rgba(), hsla() colors Geolocation localStorage border-image CSS Columns sessionStorage box-shadow HTML5 Forms postMessage HTML5 Audio & Web Workers html5 drag ‘n drop Video Offline Web Apps web sql database CSS Animations CSS Transitions Sunday, September 12, 2010
  • 22. We got you covered, b. Rounded corners 2D Transformations webGL @font-face fonts CSS Gradients SMIL Canvas SVG hashchange event rgba(), hsla() colors Geolocation localStorage border-image CSS Columns sessionStorage box-shadow HTML5 Forms postMessage HTML5 Audio & Web Workers html5 drag ‘n drop Video Offline Web Apps web sql database CSS Animations CSS Transitions or just take the tests by themselves, sans-library Sunday, September 12, 2010
  • 23. Modernizr http://modernizr.com @modernizr Yah, it’s open source. Fork it, baby. Sunday, September 12, 2010
  • 26. .. but how can i convince my team to use this stuff for modern browsers? Sunday, September 12, 2010
  • 27. Be the champion of performance. Sunday, September 12, 2010
  • 28. A Performance Policy 2 truths 1. Both you and the client want the most responsive experience possible. 2. Everything added to the page slows it down. Sunday, September 12, 2010
  • 29. A Performance Policy During IA, IxD and visual design communicate impact of design decisions Tell the client all browsers will not have the same experience It’s not worthwhile to have feature parity Sunday, September 12, 2010
  • 30. When performance is poor There are three options: 1. Redevelop the code 2. Drop the feature 3. Redesign approach of the UI Sunday, September 12, 2010
  • 31. Make the case Sunday, September 12, 2010
  • 32. Killing code is a good thing HTML5 form controls UI libraries HTML5 drag ‘n drop jQuery.fn.draggable() css transitions .animate() VS border-radius border-image large image sprites background gradients localStorage cookies Sunday, September 12, 2010
  • 34. Tantek’s list: dependable: roughly usable: experimentable: doctype canvas geolocation charset web sockets selfclose, quotes awkward: web sql database new semantics form inputs indexeddatabase audio/video meter/progress webstorage autofocus, web workers placeholder Sunday, September 12, 2010
  • 35. Paul’s list: dependable: roughly usable: experimentable: doctype canvas web sql database charset geolocation indexeddatabase selfclose, quotes web sockets webstorage new semantics autofocus, web workers audio/video placeholder data-* attrs drag n drop awkward: contenteditable form inputs meter/progress Sunday, September 12, 2010
  • 39. Me: http://paulirish.com @paul_irish Sunday, September 12, 2010
  • 40. OM G THX ! Me: http://paulirish.com @paul_irish Sunday, September 12, 2010