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

SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 
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
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
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
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
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
 
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
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 

Kürzlich hochgeladen (20)

SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 
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!
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
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
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
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
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
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
 
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
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 

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