HTML5 Polyfills

A polyfill, or polyfiller, is a "shim" or piece of code (or plugin) that provides the technology that the browser was supposed to have (but it doesn't, because its old or that element is not reality over all the browsers yet). You would also use a polyfill to plug the support for older browsers that just don't provide support for that feature.

Although it plugs the gap, it isn't quite a step forward or a progressive enhancement, but it also isn't the most graceful method to use even if its purpose is to serve as a fallback method. However - "the general idea is that: we, as developers, should be able to develop with the HTML5 apis, and scripts can create the methods and objects that should exist. Developing in this future-proof way means as users upgrade, your code doesn't have to change but users will move to the better, native experience cleanly."

For a great list of Polyfills for HTML5, see: The All-In-One Entirely-Not-Alphabetical No-Bullshit Guide to HTML5 Fallbacks

There are Polyfills for features such as:
 * SVG
 * Canvas ( fallback)
 * sessionstorage
 * CSS3 styles and transforms
 * printing html5 elements (without elements bleeding into DOM)
 * video (scripts which mimic html5 media api, fallback)
 * web SQL database
 * web forms
 * accessibility
 * web sockets
 * geo-location
 * browser state management (offline events, history)
 * EventSource
 * drag and drop
 * and many other features

Use this along with Modernizr, which lets you write conditions for what happens if the browser can or cannot detect a certain HTML5 feature.