SlideShare ist ein Scribd-Unternehmen logo
1 von 59
Downloaden Sie, um offline zu lesen
Practical HTML5:
Using It Today
Doris Chen Ph.D.
Developer Evangelist
Microsoft
doris.chen@microsoft.com
http://blogs.msdn.com/dorischen/
@doristchen
Who am I?
 Developer Evangelist at Microsoft based in Silicon
  Valley, CA
    Blog: http://blogs.msdn.com/b/dorischen/
    Twitter @doristchen
    Email: doris.chen@microsoft.com
 over 15 years of experience in the software industry
  focusing on web technologies
 Spoke and published widely at JavaOne, O'Reilly, Silicon
  Valley Code Camp, SD West, SD Forum and worldwide
  User Groups meetings
 Doris received her Ph.D. from the University of California
  at Los Angeles (UCLA)

PAGE 2   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Agenda
               Browser Fragmentation


               Feature Detection


               Polyfills and Shims


               Polyfills and Shims: Examples


               Summary and Resources



PAGE 3   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Browser Fragmentation
Non-Modern Browsers
          Most non-modern browsers have trouble
             Non-modern Browsers (ref: caniuse.com)
                    IE 6 - 8
                    Firefox 3.6 and below
                    Safari 4.0 and below
                    Chrome 7
                    Opera 10.x and below

          Even modern browsers have issues
          Varying levels of feature support across all major
           browsers
PAGE 5      twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Browser Fragmentation
Fragmentation
 Varying Levels of Support
      Across browsers
      Across browser versions
      New versions released
       constantly
 Browser detection doesn’t
  work
      Fixes based on assumptions
      Full-time job tracking
       changes
 PAGE 7    twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Feature Detection
Feature Detection
 Based on what browsers support, not their versions
 Check for the feature you want to use
          Object, Method, Property, Behavior

 Detect for standards-based features
  first
     Browsers often support both standards and
      legacy
     Standards are your most stable ground to build
      upon
 Dynamically load custom code to mimic missing
  features
PAGE 9      twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Why not Check for a
Browser?
    Bad
    // If not IE then use addEventListener…
    if (navigator.userAgent.indexOf("MSIE") == -1) {

          window.addEventListener( “load”, popMessage, false );

    } else if (window.attachEvent) {

          window.attachEvent( “onload”, popMessage);

    }
PAGE 10    twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Why not Check for a
Browser?
 Good
    if (window.addEventListener) {

         window.addEventListener( “load”, popMessage,
    false );

    } else if (window.attachEvent) {

          window.attachEvent( “onload”, popMessage);

    }
PAGE 11   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
What Happens When Feature Detection
Looks Like This…
Yuck! Even the monkey is freaked!
 function(){

        var
        sheet, bool,
        head = docHead || docElement,
        style = document.createElement("style"),
        impl = document.implementation || { hasFeature: function() { return false; } };

        style.type = 'text/css';
        head.insertBefore(style, head.firstChild);
        sheet = style.sheet || style.styleSheet;

        var supportAtRule = impl.hasFeature('CSS2', '') ?
             function(rule) {
                if (!(sheet && rule)) return false;
                var result = false;
                try {
                    sheet.insertRule(rule, 0);
                    result = (/src/i).test(sheet.cssRules[0].cssText);
                    sheet.deleteRule(sheet.cssRules.length - 1);
                } catch(e) { }
                return result;
             }:
             function(rule) {
                if (!(sheet && rule)) return false;
                sheet.cssText = rule;

                  return sheet.cssText.length !== 0 && (/src/i).test(sheet.cssText) &&
                   sheet.cssText
                       .replace(/r+|n+/g, '')
                       .indexOf(rule.split(' ')[0]) === 0;
             };

        bool = supportAtRule('@font-face { font-family: "font"; src: url(data:,); }');
        head.removeChild(style);
        return bool;
   };




 PAGE 12                      twitter @doristchen             Blog http://blogs.msdn.com/dorischen
Feature Detection
  Best option in my opinion for this…
  http://www.modernizr.com/




PAGE 13   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
 Best feature detection Support
           Detects:
             All major HTML5 features
             All major CSS3 features
           Includes HTML5Shim for semantic tag support
           Widespread adoption
             Twitter, National Football League, Burger King,
              and many more…
           Constantly updated

PAGE 14
           Shipping with ASP.NET MVC 3 Tools update
Get Custom Build
Test for @font-face
You can do this
                                function(){

                                       var
                                       sheet, bool,
                                       head = docHead || docElement,
                                       style = document.createElement("style"),
                                       impl = document.implementation || { hasFeature: function() { return false; } };

                                       style.type = 'text/css';
                                       head.insertBefore(style, head.firstChild);
                                       sheet = style.sheet || style.styleSheet;

                                       var supportAtRule = impl.hasFeature('CSS2', '') ?
                                            function(rule) {
                                               if (!(sheet && rule)) return false;
                                               var result = false;
                                               try {
                                                   sheet.insertRule(rule, 0);
                                                   result = (/src/i).test(sheet.cssRules[0].cssText);
                                                   sheet.deleteRule(sheet.cssRules.length - 1);
                                               } catch(e) { }
                                               return result;
                                            }:
                                            function(rule) {
                                               if (!(sheet && rule)) return false;
                                               sheet.cssText = rule;

                                                 return sheet.cssText.length !== 0 && (/src/i).test(sheet.cssText) &&
                                                  sheet.cssText
                                                      .replace(/r+|n+/g, '')
                                                      .indexOf(rule.split(' ')[0]) === 0;
                                            };

                                       bool = supportAtRule('@font-face { font-family: "font"; src: url(data:,); }');
                                       head.removeChild(style);
                                       return bool;
                                  };




PAGE 16   twitter @doristchen            Blog http://blogs.msdn.com/dorischen
Test for @font-face
Or ….




                          if (Modernizr.fontface){
                          …
                          }




PAGE 17   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Demo
Polyfills and Shims
Polyfills & Shims

           What are they?
             Typically JavaScript, HTML & CSS code
           What do they do?
             Provides the technology that you, the developer,
              expect the browser to provide natively
             Provides support for missing features
           When do you use them?
             Use them to fallback gracefully or mimic
              functionality


PAGE 20      twitter @doristchen   Blog http://blogs.msdn.com/dorischen
21
What’s the Difference?

           Polyfill:
              Replicates the real, standard feature API
              You can develop for the future

           Shims
              Provides own API to a missing feature
              Doesn’t adhere to a specification but fills the
               gap
              Generally provides more features

PAGE 22       twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Polyfills & Shims

           Big List of Polyfills: http://bit.ly/b5HV1x
              Some are good, some not so good
           Some frequently used Polyfills & Shims
              Polyfill:
                      HTML5Shim - Semantic tag support
                      Storage Polyfill - HTML5 localStorage
                      H5F – Simulates new HTML5 form types
              Shims:
                      Amplify Store – persistent client-side storage using
                       localStorage, globalStorage, sessionStorage & userData
                      easyXDM – Cross-domain messaging


PAGE 23       twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Consider This
  You need to vet the code
           Does it work as expected?
           Cross-browser?
  You may need to support it in the future
           Developer abandons work
           Do you have the skills to maintain it?
  API Consistency
           Will you need to rewrite your code later?


PAGE 24      twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Polyfills & Shims: Examples
  Semantic Tags
  Video Tags
  Media Queries
  Conditional Resource Loader
HTML5 Semantics
Semantic Document Structure
 HTML5 introduces a new semantic
  structure
     Replacing the use of DIV, SPAN
                                                                             HEADER
      and other elements with class and
      ID attributes
 New elements include header, nav,                                            NAV
  article, section, aside, and footer

                                                                           ARTICLE
                                                                                      ASIDE


                                                                             FOOTER
    PAGE 26   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
HTML5 Semantic Tags
Supported in Internet Explorer 9
<body>                                                                       <mark>Doris dancing!</mark>
 <header>                                                                    </section>
  <hgroup>                                                                 </article>
   <h1>Doris Chen Dancing</h1>                                             ...
   <h2>Funky Town!</h2>                                                    </section>
  </hgroup>
 </header>                                                                  <aside>Aside items (i.e.
                                                                          links)</aside>
 <nav>
 <ul>Navigation links</ul>                                                 <figure>
 </nav>                                                                     <img src="..." />
                                                                            <figcaption>Doris
 <section>                                                                dancing</figcaption>
 <article>                                                                 </figure>
  <header>
    <h1>Can you believe it?</h1>                                           <footer>Copyright © 2011</footer>
  </header>
  <section>                                                               </body>
   PAGE 27   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
HTML Tags
               <div id=”header”>

                 <div id=”nav”>




   <div id=”sidebar”>    <div id=”article”>




                <div id=”footer”>
New Semantic HTML Tags
                <header>

                 <nav>




                           <section>
      <aside>
                             <article>




                <footer>
Recognition & Styling
 Non-modern browsers don’t recognize the new
  tags
 Internal stylesheets not updated
 You can’t style elements not recognized




   PAGE 30   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Demo
Semantic Tags
Polyfills & Shims: Examples
  Semantic Tags
  Video Tags
  Media Queries
  Conditional Resource Loader
HTML5 Video & Audio
 <audio     <video
 src=       src=       The url to the audio or video
            width=     The width of the video element
            height=    The height of the video element
            poster=    The url to the thumbnail of the video
 preload=   preload=   (none, metadata, auto) Start downloading
 autoplay   autoplay   Audio or video should play immediately
 loop       loop       Audio or video should return to start and play
 controls   controls   Will show controls (play, pause, scrub bar)
 >          >
 …          …
 </audio>   </video>
Compatibility Table
HTML5 <video>




                                                                                    10.0.648.20
vCurrent                        9                      6                   5.0.4                  11.01
                                                                                         4


VP8
(WebM)
                                                     Yes                   No (*)      Yes         Yes
video
support
                              Yes

H.264 video
                                                  No (*)                    Yes       Yes (*)     No (*)
format
    PAGE 34   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Elements With Fall Backs

  Browsers won’t render elements
  they don’t understand...

       For example:
           <video src=“video.mp4”>
               What will it render?
           </video>


  But, they will render what’s
  between those elements


  PAGE 35   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
HTML5 <video> : Degrading Gracefully
 Multiple video sources to support multiple browsers

   <video id="myVideo" controls="controls" autoplay>
   <source src="videos/video.mp4" type="video/mp4" />
   <source src="videos/video.webm" type="video/webm" />

   <!-- Flash/Silverlight video here -->

   <object type="application/x-silverlight-2" width="640" height="384">
          <param name="source" value="/resources/VideoPlayer10_01_18.xap"></param>
          <param name="initParams"
   value="m=http://mysite.com/video.mp4,autostart=true,autohide=true></param>
          <param name="background" value="#00FFFFFF"></param>
          <param name="x-allowscriptaccess" value="never"></param>
          <param name="allowScriptAccess" value="never" />
          <param name="wmode" value="opaque" />
        </object>


   </video>
      PAGE 36   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Demo
Video, fall back
Polyfills & Shims: Examples
  Semantic Tags
  Video Tags
  Media Queries
  Conditional Resource Loader
Use Respond.js for Media Queries
  Respond.js
       Enable responsive web designs in browsers
       A fast polyfill for CSS3 Media Queries
               Lightweight: 3kb minified / 1kb gzipped
               for Internet Explorer 6-8 and more
       https://github.com/scottjehl/Respond
     <head>
        <meta charset="utf-8" />
        <link href="test.css" rel="stylesheet"/>
        <script src="../respond.min.js"></script>
     </head>

  PAGE 39   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Use Respond for Media Queries
Realife: http://bostonglobe.com/


   Demo
Polyfills & Shims: Examples
  Semantic Tags
  Video Tags
  Media Queries
  Conditional Resource Loader
 Asynchronous conditional resource loader for JavaScript and CSS

 Integrated into Modernizr , only 1.6kb

 Load only the scripts that your users need

 Fully decouples preloading from execution
     full control of when your resource is executed
     change that order on the fly

 http://yepnopejs.com/


   PAGE 42   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Yepnope and Modernizr
<script type="text/javascript"
src="yepnope.1.0.2-min.js"></script>
  <script type="text/javascript">
      yepnope({
          test : Modernizr.geolocation,
          yep : 'normal.js',
          nope : ['polyfill.js', 'wrapper.js']
      });
  </script>


   PAGE 43   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
 Asynchronous conditional resource loader for JavaScript and CSS

  Integrated into Modernizr , only 1.6kb

  Load only the scripts that your users need

  Fully decouples preloading from execution
           full control of when your resource is executed
           change that order on the fly

  http://yepnopejs.com/


PAGE 44       twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Yepnope and Modernizr
<script type="text/javascript"
src="yepnope.1.0.2-min.js"></script>
  <script type="text/javascript">
      yepnope({
          test : Modernizr.geolocation,
          yep : 'normal.js',
          nope : ['polyfill.js', 'wrapper.js']
      });
  </script>


PAGE 45   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
MSNBC site:
Building Cross Browser Plugin-
free Experiences
Building Cross Browser Plugin-free
Experiences
 “Plug-in” refers broadly to browser extensions that run
  native client code using low-level browser interfaces
    Adobe Flash
    ActiveX controls and Browser Helper Objects
    Some of Webkit’s Approach
 More browsers start to adopt plug-in-free approach
    Lots of Web browsing simply don’t support plug-ins
             IE 10 Metro
    Browsers that do support plugins offer many ways to run
     plugin free
             YouTube http://www.youtube.com/html5
 MSNBC plugin-free experience for rich media
    Styles and Scripts


  PAGE 47   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Need Plugin on Old MSNBC Site




PAGE 48
Step 1: Declare Standards Mode and
Valid Markup for Modern Browsers
 Ensure that you are operating in standards mode
 Use valid markup
    include the HTML5 doctype at the top of your document
    <!DOCTYPE html>




  PAGE 49   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Step 2: Update CSS3 vendor prefixes
 The CSS3 language is constantly in a state of change
    New features suggested, updated, and standardized
    For learning, browser vendors offer experimental
     implementations via prefixed
 Ensure that prefixes from each vendor are included in
  your site




  PAGE 50   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Ensure all CSS3 prefixes included
background: -webkit-gradient(
  linear,
  left top,
  left bottom,
  color-stop(1, rgba(192,192,192,.6)),
  color-stop(0.5, rgba(0,0,0,.6))
);
background: -webkit-linear-gradient(
  top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0,                       0, 0, 0.6 ) 50% );
background: -moz-linear-gradient(
  top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0,                       0, 0, 0.6 ) 50% );
background: -ms-linear-gradient(
  top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0,                       0, 0, 0.6 ) 50% );
background: -o-linear-gradient(
  top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0,                       0, 0, 0.6 ) 50% );
background: linear-gradient(
  top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0,                       0, 0, 0.6 ) 50% );

    PAGE 51   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Step 3: Get rid of browser Sniffing
methods
 Methods to determine what the user’s browser and
  device are capable of
   if ( navigator.userAgent.indexOf("iPad") > -1 ) {
     // Load HTML5 Experience
   } else {
     // Load Flash Experience
   }

   if ( tests.IE ) {
     j = /msie.(d.d+)/i;
     k = navigator.userAgent.match(j)[1];
   }

 The user agent string is not immutable
    easily changed by plugins, or even the user.
    Most modern browsers include the ability to easily change this value from
     their development tools
  PAGE 52   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Sniffing Methods




PAGE 53
Feature Detection
 Remove the browser sniffing code, and replace it with
  feature detection code

      if ( Modernizr.video ) {
        // Load HTML5 Video
      }
Or

      if ( !!document.createElement(“video”).canPlayType ) {
        // Load HTML5 Video
      } else {
        // Load Flash Video
      }
     PAGE 54   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Use Fiddler (no direct access):
http://fiddler2.com
 Modify remote files as though they were on
  my local machine
 A great way for testing changes without
  the risk of breaking your live site
if (!(navigator.userAgent.toLowerCase().indexOf("ipad")>-1)){
  // Flash Experience
}
Replace with:

 if ( !document.createElement("video").canPlayType ) {
  // Flash Experience
}
   PAGE 55   twitter @doristchen   Blog http://blogs.msdn.com/dorischen
Fiddle: Setup AutoResponder




PAGE 56
Demo
MSNBC : Cross Browser Plugin-free
Take Away

           Avoid browser detection
                Browsers change
                Varying levels of feature support across all major browsers

           Use feature detection
                Check for the feature you want to use
                Detect for standards first
           Use Modernizr – http://modernizr.com
                Cleaner code & they’ve done the work for you
           Polyfills and Shims
                mimics a standard API to avoid a rewrite

             Use Yepnope
                For conditional resource loader, work with Modernizr



PAGE 58         twitter @doristchen   Blog http://blogs.msdn.com/dorischen
RESOURCES
• HTML5 Cheat Sheets
  http://bit.ly/html5cheatsheets
• Free HTML5 Video Training
  http://bit.ly/HTML5WebCampVideoTraining
• Feature-specific demos
      • http://ie.microsoft.com/testdrive/
• Real-world demos
      • http://www.beautyoftheweb.com/



PAGE 59   twitter @doristchen   Blog http://blogs.msdn.com/dorischen

Weitere ähnliche Inhalte

Was ist angesagt?

https://www.facebook.com/valdyna.monna?fref=ts
https://www.facebook.com/valdyna.monna?fref=tshttps://www.facebook.com/valdyna.monna?fref=ts
https://www.facebook.com/valdyna.monna?fref=tsArif Alexi
 
JavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your codeJavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your codeLaurence Svekis ✔
 
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehrBeyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehrJens-Christian Fischer
 
Prototyping w/HTML5 and CSS3
Prototyping w/HTML5 and CSS3Prototyping w/HTML5 and CSS3
Prototyping w/HTML5 and CSS3Todd Zaki Warfel
 
Você precisa aprender Web
Você precisa aprender WebVocê precisa aprender Web
Você precisa aprender WebJean Carlo Emer
 

Was ist angesagt? (8)

https://www.facebook.com/valdyna.monna?fref=ts
https://www.facebook.com/valdyna.monna?fref=tshttps://www.facebook.com/valdyna.monna?fref=ts
https://www.facebook.com/valdyna.monna?fref=ts
 
JavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your codeJavaScript Advanced - Useful methods to power up your code
JavaScript Advanced - Useful methods to power up your code
 
Send.php
Send.phpSend.php
Send.php
 
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehrBeyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
 
Emmet cheat-sheet
Emmet cheat-sheetEmmet cheat-sheet
Emmet cheat-sheet
 
Prototyping w/HTML5 and CSS3
Prototyping w/HTML5 and CSS3Prototyping w/HTML5 and CSS3
Prototyping w/HTML5 and CSS3
 
Você precisa aprender Web
Você precisa aprender WebVocê precisa aprender Web
Você precisa aprender Web
 
HTML5 Essentials
HTML5 EssentialsHTML5 Essentials
HTML5 Essentials
 

Ähnlich wie Practical HTML5: Using It Today

Practical HTML5: Using It Today
Practical HTML5: Using It TodayPractical HTML5: Using It Today
Practical HTML5: Using It TodayDoris Chen
 
Styling components with JavaScript
Styling components with JavaScriptStyling components with JavaScript
Styling components with JavaScriptbensmithett
 
Web performance essentials - Goodies
Web performance essentials - GoodiesWeb performance essentials - Goodies
Web performance essentials - GoodiesJerry Emmanuel
 
Enhance Web Performance
Enhance Web PerformanceEnhance Web Performance
Enhance Web PerformanceAdam Lu
 
Javascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksJavascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksHjörtur Hilmarsson
 
03 form-data
03 form-data03 form-data
03 form-datasnopteck
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to DjangoJoaquim Rocha
 
Rey Bango - HTML5: polyfills and shims
Rey Bango -  HTML5: polyfills and shimsRey Bango -  HTML5: polyfills and shims
Rey Bango - HTML5: polyfills and shimsStarTech Conference
 
Geek Moot '09 -- Smarty 101
Geek Moot '09 -- Smarty 101Geek Moot '09 -- Smarty 101
Geek Moot '09 -- Smarty 101Ted Kulp
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSAntonio Peric-Mazar
 
Exploring Symfony's Code
Exploring Symfony's CodeExploring Symfony's Code
Exploring Symfony's CodeWildan Maulana
 
The Django Web Application Framework
The Django Web Application FrameworkThe Django Web Application Framework
The Django Web Application FrameworkSimon Willison
 
Designing CakePHP plugins for consuming APIs
Designing CakePHP plugins for consuming APIsDesigning CakePHP plugins for consuming APIs
Designing CakePHP plugins for consuming APIsNeil Crookes
 
Web 2.0 Expo: Even Faster Web Sites
Web 2.0 Expo: Even Faster Web SitesWeb 2.0 Expo: Even Faster Web Sites
Web 2.0 Expo: Even Faster Web SitesSteve Souders
 
Php interview questions
Php interview questionsPhp interview questions
Php interview questionssekar c
 
Zend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_ToolZend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_ToolGordon Forsythe
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2fishwarter
 
Java Technology
Java TechnologyJava Technology
Java Technologyifnu bima
 
Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!Eric Palakovich Carr
 

Ähnlich wie Practical HTML5: Using It Today (20)

Practical HTML5: Using It Today
Practical HTML5: Using It TodayPractical HTML5: Using It Today
Practical HTML5: Using It Today
 
Styling components with JavaScript
Styling components with JavaScriptStyling components with JavaScript
Styling components with JavaScript
 
Web performance essentials - Goodies
Web performance essentials - GoodiesWeb performance essentials - Goodies
Web performance essentials - Goodies
 
Enhance Web Performance
Enhance Web PerformanceEnhance Web Performance
Enhance Web Performance
 
Javascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & TricksJavascript MVC & Backbone Tips & Tricks
Javascript MVC & Backbone Tips & Tricks
 
03 form-data
03 form-data03 form-data
03 form-data
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
Rey Bango - HTML5: polyfills and shims
Rey Bango -  HTML5: polyfills and shimsRey Bango -  HTML5: polyfills and shims
Rey Bango - HTML5: polyfills and shims
 
Geek Moot '09 -- Smarty 101
Geek Moot '09 -- Smarty 101Geek Moot '09 -- Smarty 101
Geek Moot '09 -- Smarty 101
 
Building Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJSBuilding Single Page Application (SPA) with Symfony2 and AngularJS
Building Single Page Application (SPA) with Symfony2 and AngularJS
 
Exploring Symfony's Code
Exploring Symfony's CodeExploring Symfony's Code
Exploring Symfony's Code
 
The Django Web Application Framework
The Django Web Application FrameworkThe Django Web Application Framework
The Django Web Application Framework
 
Designing CakePHP plugins for consuming APIs
Designing CakePHP plugins for consuming APIsDesigning CakePHP plugins for consuming APIs
Designing CakePHP plugins for consuming APIs
 
Web 2.0 Expo: Even Faster Web Sites
Web 2.0 Expo: Even Faster Web SitesWeb 2.0 Expo: Even Faster Web Sites
Web 2.0 Expo: Even Faster Web Sites
 
Php interview questions
Php interview questionsPhp interview questions
Php interview questions
 
Zend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_ToolZend Framework 1.9 Setup & Using Zend_Tool
Zend Framework 1.9 Setup & Using Zend_Tool
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
The Django Web Application Framework 2
The Django Web Application Framework 2The Django Web Application Framework 2
The Django Web Application Framework 2
 
Java Technology
Java TechnologyJava Technology
Java Technology
 
Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!Django Rest Framework and React and Redux, Oh My!
Django Rest Framework and React and Redux, Oh My!
 

Mehr von Doris Chen

Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016Doris Chen
 
Building Web Sites that Work Everywhere
Building Web Sites that Work EverywhereBuilding Web Sites that Work Everywhere
Building Web Sites that Work EverywhereDoris Chen
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_uDoris Chen
 
Lastest Trends in Web Development
Lastest Trends in Web DevelopmentLastest Trends in Web Development
Lastest Trends in Web DevelopmentDoris Chen
 
Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!Doris Chen
 
OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...Doris Chen
 
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps FasterPractical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps FasterDoris Chen
 
Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5Doris Chen
 
What Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS AppsWhat Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS AppsDoris Chen
 
Windows 8 Opportunity
Windows 8 OpportunityWindows 8 Opportunity
Windows 8 OpportunityDoris Chen
 
Wins8 appfoforweb fluent
Wins8 appfoforweb fluentWins8 appfoforweb fluent
Wins8 appfoforweb fluentDoris Chen
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Doris Chen
 
What Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsWhat Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsDoris Chen
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Doris Chen
 
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Doris Chen
 
Introduction to CSS3
Introduction to CSS3Introduction to CSS3
Introduction to CSS3Doris Chen
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Doris Chen
 
Dive Into HTML5
Dive Into HTML5Dive Into HTML5
Dive Into HTML5Doris Chen
 
HTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and DesktopHTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and DesktopDoris Chen
 
Dive into HTML5: SVG and Canvas
Dive into HTML5: SVG and CanvasDive into HTML5: SVG and Canvas
Dive into HTML5: SVG and CanvasDoris Chen
 

Mehr von Doris Chen (20)

Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016Practical tipsmakemobilefaster oscon2016
Practical tipsmakemobilefaster oscon2016
 
Building Web Sites that Work Everywhere
Building Web Sites that Work EverywhereBuilding Web Sites that Work Everywhere
Building Web Sites that Work Everywhere
 
Angular mobile angular_u
Angular mobile angular_uAngular mobile angular_u
Angular mobile angular_u
 
Lastest Trends in Web Development
Lastest Trends in Web DevelopmentLastest Trends in Web Development
Lastest Trends in Web Development
 
Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!Angular or Backbone: Go Mobile!
Angular or Backbone: Go Mobile!
 
OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...OSCON Presentation: Developing High Performance Websites and Modern Apps with...
OSCON Presentation: Developing High Performance Websites and Modern Apps with...
 
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps FasterPractical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
Practical Performance Tips and Tricks to Make Your HTML/JavaScript Apps Faster
 
Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5Developing High Performance Websites and Modern Apps with JavaScript and HTML5
Developing High Performance Websites and Modern Apps with JavaScript and HTML5
 
What Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS AppsWhat Web Developers Need to Know to Develop Native HTML5/JS Apps
What Web Developers Need to Know to Develop Native HTML5/JS Apps
 
Windows 8 Opportunity
Windows 8 OpportunityWindows 8 Opportunity
Windows 8 Opportunity
 
Wins8 appfoforweb fluent
Wins8 appfoforweb fluentWins8 appfoforweb fluent
Wins8 appfoforweb fluent
 
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
Develop High Performance Windows 8 Application with HTML5 and JavaScriptHigh ...
 
What Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 AppsWhat Web Developers Need to Know to Develop Windows 8 Apps
What Web Developers Need to Know to Develop Windows 8 Apps
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
 
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Windows 8 apps with JavaScript, HTML5 & CSS3
 
Introduction to CSS3
Introduction to CSS3Introduction to CSS3
Introduction to CSS3
 
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
Building Beautiful and Interactive Metro apps with JavaScript, HTML5 & CSS3
 
Dive Into HTML5
Dive Into HTML5Dive Into HTML5
Dive Into HTML5
 
HTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and DesktopHTML 5 Development for Windows Phone and Desktop
HTML 5 Development for Windows Phone and Desktop
 
Dive into HTML5: SVG and Canvas
Dive into HTML5: SVG and CanvasDive into HTML5: SVG and Canvas
Dive into HTML5: SVG and Canvas
 

Kürzlich hochgeladen

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Kaya Weers
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 

Kürzlich hochgeladen (20)

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)Design pattern talk by Kaya Weers - 2024 (v2)
Design pattern talk by Kaya Weers - 2024 (v2)
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 

Practical HTML5: Using It Today

  • 1. Practical HTML5: Using It Today Doris Chen Ph.D. Developer Evangelist Microsoft doris.chen@microsoft.com http://blogs.msdn.com/dorischen/ @doristchen
  • 2. Who am I?  Developer Evangelist at Microsoft based in Silicon Valley, CA  Blog: http://blogs.msdn.com/b/dorischen/  Twitter @doristchen  Email: doris.chen@microsoft.com  over 15 years of experience in the software industry focusing on web technologies  Spoke and published widely at JavaOne, O'Reilly, Silicon Valley Code Camp, SD West, SD Forum and worldwide User Groups meetings  Doris received her Ph.D. from the University of California at Los Angeles (UCLA) PAGE 2 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 3. Agenda Browser Fragmentation Feature Detection Polyfills and Shims Polyfills and Shims: Examples Summary and Resources PAGE 3 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 5. Non-Modern Browsers  Most non-modern browsers have trouble  Non-modern Browsers (ref: caniuse.com)  IE 6 - 8  Firefox 3.6 and below  Safari 4.0 and below  Chrome 7  Opera 10.x and below  Even modern browsers have issues  Varying levels of feature support across all major browsers PAGE 5 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 7. Fragmentation  Varying Levels of Support  Across browsers  Across browser versions  New versions released constantly  Browser detection doesn’t work  Fixes based on assumptions  Full-time job tracking changes PAGE 7 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 9. Feature Detection  Based on what browsers support, not their versions  Check for the feature you want to use  Object, Method, Property, Behavior  Detect for standards-based features first  Browsers often support both standards and legacy  Standards are your most stable ground to build upon  Dynamically load custom code to mimic missing features PAGE 9 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 10. Why not Check for a Browser? Bad // If not IE then use addEventListener… if (navigator.userAgent.indexOf("MSIE") == -1) { window.addEventListener( “load”, popMessage, false ); } else if (window.attachEvent) { window.attachEvent( “onload”, popMessage); } PAGE 10 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 11. Why not Check for a Browser? Good if (window.addEventListener) { window.addEventListener( “load”, popMessage, false ); } else if (window.attachEvent) { window.attachEvent( “onload”, popMessage); } PAGE 11 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 12. What Happens When Feature Detection Looks Like This… Yuck! Even the monkey is freaked! function(){ var sheet, bool, head = docHead || docElement, style = document.createElement("style"), impl = document.implementation || { hasFeature: function() { return false; } }; style.type = 'text/css'; head.insertBefore(style, head.firstChild); sheet = style.sheet || style.styleSheet; var supportAtRule = impl.hasFeature('CSS2', '') ? function(rule) { if (!(sheet && rule)) return false; var result = false; try { sheet.insertRule(rule, 0); result = (/src/i).test(sheet.cssRules[0].cssText); sheet.deleteRule(sheet.cssRules.length - 1); } catch(e) { } return result; }: function(rule) { if (!(sheet && rule)) return false; sheet.cssText = rule; return sheet.cssText.length !== 0 && (/src/i).test(sheet.cssText) && sheet.cssText .replace(/r+|n+/g, '') .indexOf(rule.split(' ')[0]) === 0; }; bool = supportAtRule('@font-face { font-family: "font"; src: url(data:,); }'); head.removeChild(style); return bool; }; PAGE 12 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 13. Feature Detection  Best option in my opinion for this…  http://www.modernizr.com/ PAGE 13 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 14.  Best feature detection Support  Detects:  All major HTML5 features  All major CSS3 features  Includes HTML5Shim for semantic tag support  Widespread adoption  Twitter, National Football League, Burger King, and many more…  Constantly updated PAGE 14  Shipping with ASP.NET MVC 3 Tools update
  • 16. Test for @font-face You can do this function(){ var sheet, bool, head = docHead || docElement, style = document.createElement("style"), impl = document.implementation || { hasFeature: function() { return false; } }; style.type = 'text/css'; head.insertBefore(style, head.firstChild); sheet = style.sheet || style.styleSheet; var supportAtRule = impl.hasFeature('CSS2', '') ? function(rule) { if (!(sheet && rule)) return false; var result = false; try { sheet.insertRule(rule, 0); result = (/src/i).test(sheet.cssRules[0].cssText); sheet.deleteRule(sheet.cssRules.length - 1); } catch(e) { } return result; }: function(rule) { if (!(sheet && rule)) return false; sheet.cssText = rule; return sheet.cssText.length !== 0 && (/src/i).test(sheet.cssText) && sheet.cssText .replace(/r+|n+/g, '') .indexOf(rule.split(' ')[0]) === 0; }; bool = supportAtRule('@font-face { font-family: "font"; src: url(data:,); }'); head.removeChild(style); return bool; }; PAGE 16 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 17. Test for @font-face Or …. if (Modernizr.fontface){ … } PAGE 17 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 18. Demo
  • 20. Polyfills & Shims  What are they?  Typically JavaScript, HTML & CSS code  What do they do?  Provides the technology that you, the developer, expect the browser to provide natively  Provides support for missing features  When do you use them?  Use them to fallback gracefully or mimic functionality PAGE 20 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 21. 21
  • 22. What’s the Difference?  Polyfill:  Replicates the real, standard feature API  You can develop for the future  Shims  Provides own API to a missing feature  Doesn’t adhere to a specification but fills the gap  Generally provides more features PAGE 22 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 23. Polyfills & Shims  Big List of Polyfills: http://bit.ly/b5HV1x  Some are good, some not so good  Some frequently used Polyfills & Shims  Polyfill:  HTML5Shim - Semantic tag support  Storage Polyfill - HTML5 localStorage  H5F – Simulates new HTML5 form types  Shims:  Amplify Store – persistent client-side storage using localStorage, globalStorage, sessionStorage & userData  easyXDM – Cross-domain messaging PAGE 23 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 24. Consider This  You need to vet the code  Does it work as expected?  Cross-browser?  You may need to support it in the future  Developer abandons work  Do you have the skills to maintain it?  API Consistency  Will you need to rewrite your code later? PAGE 24 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 25. Polyfills & Shims: Examples Semantic Tags Video Tags Media Queries Conditional Resource Loader
  • 26. HTML5 Semantics Semantic Document Structure  HTML5 introduces a new semantic structure  Replacing the use of DIV, SPAN HEADER and other elements with class and ID attributes  New elements include header, nav, NAV article, section, aside, and footer ARTICLE ASIDE FOOTER PAGE 26 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 27. HTML5 Semantic Tags Supported in Internet Explorer 9 <body> <mark>Doris dancing!</mark> <header> </section> <hgroup> </article> <h1>Doris Chen Dancing</h1> ... <h2>Funky Town!</h2> </section> </hgroup> </header> <aside>Aside items (i.e. links)</aside> <nav> <ul>Navigation links</ul> <figure> </nav> <img src="..." /> <figcaption>Doris <section> dancing</figcaption> <article> </figure> <header> <h1>Can you believe it?</h1> <footer>Copyright © 2011</footer> </header> <section> </body> PAGE 27 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 28. HTML Tags <div id=”header”> <div id=”nav”> <div id=”sidebar”> <div id=”article”> <div id=”footer”>
  • 29. New Semantic HTML Tags <header> <nav> <section> <aside> <article> <footer>
  • 30. Recognition & Styling  Non-modern browsers don’t recognize the new tags  Internal stylesheets not updated  You can’t style elements not recognized PAGE 30 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 32. Polyfills & Shims: Examples Semantic Tags Video Tags Media Queries Conditional Resource Loader
  • 33. HTML5 Video & Audio <audio <video src= src= The url to the audio or video width= The width of the video element height= The height of the video element poster= The url to the thumbnail of the video preload= preload= (none, metadata, auto) Start downloading autoplay autoplay Audio or video should play immediately loop loop Audio or video should return to start and play controls controls Will show controls (play, pause, scrub bar) > > … … </audio> </video>
  • 34. Compatibility Table HTML5 <video> 10.0.648.20 vCurrent 9 6 5.0.4 11.01 4 VP8 (WebM) Yes No (*) Yes Yes video support Yes H.264 video No (*) Yes Yes (*) No (*) format PAGE 34 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 35. Elements With Fall Backs Browsers won’t render elements they don’t understand... For example: <video src=“video.mp4”> What will it render? </video> But, they will render what’s between those elements PAGE 35 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 36. HTML5 <video> : Degrading Gracefully  Multiple video sources to support multiple browsers <video id="myVideo" controls="controls" autoplay> <source src="videos/video.mp4" type="video/mp4" /> <source src="videos/video.webm" type="video/webm" /> <!-- Flash/Silverlight video here --> <object type="application/x-silverlight-2" width="640" height="384"> <param name="source" value="/resources/VideoPlayer10_01_18.xap"></param> <param name="initParams" value="m=http://mysite.com/video.mp4,autostart=true,autohide=true></param> <param name="background" value="#00FFFFFF"></param> <param name="x-allowscriptaccess" value="never"></param> <param name="allowScriptAccess" value="never" /> <param name="wmode" value="opaque" /> </object> </video> PAGE 36 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 38. Polyfills & Shims: Examples Semantic Tags Video Tags Media Queries Conditional Resource Loader
  • 39. Use Respond.js for Media Queries  Respond.js  Enable responsive web designs in browsers  A fast polyfill for CSS3 Media Queries  Lightweight: 3kb minified / 1kb gzipped  for Internet Explorer 6-8 and more  https://github.com/scottjehl/Respond <head> <meta charset="utf-8" /> <link href="test.css" rel="stylesheet"/> <script src="../respond.min.js"></script> </head> PAGE 39 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 40. Use Respond for Media Queries Realife: http://bostonglobe.com/ Demo
  • 41. Polyfills & Shims: Examples Semantic Tags Video Tags Media Queries Conditional Resource Loader
  • 42.  Asynchronous conditional resource loader for JavaScript and CSS  Integrated into Modernizr , only 1.6kb  Load only the scripts that your users need  Fully decouples preloading from execution  full control of when your resource is executed  change that order on the fly  http://yepnopejs.com/ PAGE 42 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 43. Yepnope and Modernizr <script type="text/javascript" src="yepnope.1.0.2-min.js"></script> <script type="text/javascript"> yepnope({ test : Modernizr.geolocation, yep : 'normal.js', nope : ['polyfill.js', 'wrapper.js'] }); </script> PAGE 43 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 44.  Asynchronous conditional resource loader for JavaScript and CSS  Integrated into Modernizr , only 1.6kb  Load only the scripts that your users need  Fully decouples preloading from execution  full control of when your resource is executed  change that order on the fly  http://yepnopejs.com/ PAGE 44 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 45. Yepnope and Modernizr <script type="text/javascript" src="yepnope.1.0.2-min.js"></script> <script type="text/javascript"> yepnope({ test : Modernizr.geolocation, yep : 'normal.js', nope : ['polyfill.js', 'wrapper.js'] }); </script> PAGE 45 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 46. MSNBC site: Building Cross Browser Plugin- free Experiences
  • 47. Building Cross Browser Plugin-free Experiences  “Plug-in” refers broadly to browser extensions that run native client code using low-level browser interfaces  Adobe Flash  ActiveX controls and Browser Helper Objects  Some of Webkit’s Approach  More browsers start to adopt plug-in-free approach  Lots of Web browsing simply don’t support plug-ins  IE 10 Metro  Browsers that do support plugins offer many ways to run plugin free  YouTube http://www.youtube.com/html5  MSNBC plugin-free experience for rich media  Styles and Scripts PAGE 47 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 48. Need Plugin on Old MSNBC Site PAGE 48
  • 49. Step 1: Declare Standards Mode and Valid Markup for Modern Browsers  Ensure that you are operating in standards mode  Use valid markup  include the HTML5 doctype at the top of your document  <!DOCTYPE html> PAGE 49 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 50. Step 2: Update CSS3 vendor prefixes  The CSS3 language is constantly in a state of change  New features suggested, updated, and standardized  For learning, browser vendors offer experimental implementations via prefixed  Ensure that prefixes from each vendor are included in your site PAGE 50 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 51. Ensure all CSS3 prefixes included background: -webkit-gradient( linear, left top, left bottom, color-stop(1, rgba(192,192,192,.6)), color-stop(0.5, rgba(0,0,0,.6)) ); background: -webkit-linear-gradient( top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0, 0, 0, 0.6 ) 50% ); background: -moz-linear-gradient( top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0, 0, 0, 0.6 ) 50% ); background: -ms-linear-gradient( top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0, 0, 0, 0.6 ) 50% ); background: -o-linear-gradient( top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0, 0, 0, 0.6 ) 50% ); background: linear-gradient( top, rgba( 0, 0, 0, 0.0 ) 0%, rgba( 0, 0, 0, 0.6 ) 50% ); PAGE 51 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 52. Step 3: Get rid of browser Sniffing methods  Methods to determine what the user’s browser and device are capable of if ( navigator.userAgent.indexOf("iPad") > -1 ) { // Load HTML5 Experience } else { // Load Flash Experience } if ( tests.IE ) { j = /msie.(d.d+)/i; k = navigator.userAgent.match(j)[1]; }  The user agent string is not immutable  easily changed by plugins, or even the user.  Most modern browsers include the ability to easily change this value from their development tools PAGE 52 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 54. Feature Detection  Remove the browser sniffing code, and replace it with feature detection code if ( Modernizr.video ) { // Load HTML5 Video } Or if ( !!document.createElement(“video”).canPlayType ) { // Load HTML5 Video } else { // Load Flash Video } PAGE 54 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 55. Use Fiddler (no direct access): http://fiddler2.com  Modify remote files as though they were on my local machine  A great way for testing changes without the risk of breaking your live site if (!(navigator.userAgent.toLowerCase().indexOf("ipad")>-1)){ // Flash Experience } Replace with: if ( !document.createElement("video").canPlayType ) { // Flash Experience } PAGE 55 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 57. Demo MSNBC : Cross Browser Plugin-free
  • 58. Take Away  Avoid browser detection  Browsers change  Varying levels of feature support across all major browsers  Use feature detection  Check for the feature you want to use  Detect for standards first  Use Modernizr – http://modernizr.com  Cleaner code & they’ve done the work for you  Polyfills and Shims  mimics a standard API to avoid a rewrite  Use Yepnope  For conditional resource loader, work with Modernizr PAGE 58 twitter @doristchen Blog http://blogs.msdn.com/dorischen
  • 59. RESOURCES • HTML5 Cheat Sheets http://bit.ly/html5cheatsheets • Free HTML5 Video Training http://bit.ly/HTML5WebCampVideoTraining • Feature-specific demos • http://ie.microsoft.com/testdrive/ • Real-world demos • http://www.beautyoftheweb.com/ PAGE 59 twitter @doristchen Blog http://blogs.msdn.com/dorischen