Progressive Enhancement Resources
A comprehensive collection of resources on Progressive Enhancement. From concept and strategies to feature detection and testing methods. Complete with a list of (code) examples.
Contents
The Concept
Progressive Enhancement means gradually improving the user experience after verifying the target environment (e.g. browser) is capable of it. Start with content and ensure you maintain functionality & accessibility.
Strategies
You can apply Progressive Enhancement in different ways:
Feature Detection
Before you try to enhance the experience, you need to ensure the environment is capable of the enhancement. You test this by performing feature detections:
Support Tables
Different environments (platforms, browsers, versions) have different capabilities. Support tables tell you what capabilities each environment has. Knowing the level of support can help you weigh an enhancement against the effort and impact of its implementation.
-
The Web Platform - Overview of browser technologies with links to docs and test suites.
-
Can I use …? - Compare feature implementations and limitations across desktop & mobile browsers.
-
I want to use … - Figure out the browser support of combinations of features.
-
HTML5 Test - Test and compare HTML5 feature support across browsers.
-
CSS3 Test - Fine-grained tests for CSS3 feature support of your current browser.
-
Accessibility Support - Compare accessibility support of HTML elements and ARIA roles across browsers & assistive technologies.
-
State of Web Type - Support tables for type and typographic features on the web.
-
Font Family Reunion - Compatibility tables for default local (system) fonts.
-
HTML5 Accessibility - Compare feature support of HTML5 tags, input types and properties across major browsers.
-
WAI-ARIA Screen reader compatibility - ARIA roles and attributes support for different screen reader and browser combinations.
-
What web can do today - Lists and checks modern web APIs like access to device system, sensors and actuators.
-
HTML5 Worker test - Compare which APIs are supported in Web Workers and Service Workers across browsers.
-
HTML5 Please - Explore features with recommendations and links to polyfills.
-
API Catalog - Lets you compare implementation of API specifications in major desktop browsers.
-
Kangax’s ECMAScript compatibility table - Overview of JavaScript feature support across browsers and other runtimes.
-
Node compatibility table - Overview of JavaScript feature support across NodeJS versions.
-
Is service worker ready? - Overview of support for all features involved in the core technology behind Progressive Web Apps.
-
Is PWA ready? - Overview of support for the core and related technologies behind Progressive Web Apps for both popular global and many Chinese browsers.
-
Is WebRTC ready yet? - Overview of support for the different browser features behind real time communication.
-
Is WebVR ready? - Overview of support of different browser features behind WebVR including display, gamepad, audio and speech APIs.
-
Is Houdini ready yet? - Overview of support for Houdini (low-level APIs exposing parts of the CSS rendering engine) across browsers.
- Chrome Platform Status
- Edge Platform Status
- Firefox Platform Status
-
Webkit Platform Status (Safari)
-
MDN Compatibility tables - MDN’s web technology documentation has a browser compatibility table end the end of each article.
-
MDN Browser Compat Data - npm module powering the MDN Compatibility tables.
-
Device Bugs & Quirks - Crowd sourced collection of weird HTML, CSS, and JS quirks in mobile devices, which you won’t find in the other support tables.
-
Can I Email? - Support tables for HTML and CSS in emails. Inspired by Can I use.
-
Project Fugu API tracker - Browser support status overview of web API’s filling the “app gap”.
-
iOS PWA Compatibility - Support table for PWA features including service worker, manifest, background sync and push notifications (Unofficial, maintained by Maximiliano Firtman).
Testing Methods
With progressive enhancement you support different experiences in different environments. These are some ways to test all these variations:
Examples
-
Fancy radio buttons - Based on HTML radio buttons, visually enhanced using CSS pseudo classes and elements.
-
Checkboxes & radio buttons - With custom focus, hover and checked state. Enhanced asynchronously.
-
Toggle switch - Checkbox or radios, visually enhanced to sliding toggle switches using CSS only.
-
5-star rating - Based on HTML radio buttons, visually enhanced using CSS pseudo classes and elements.
-
jQuery slider - Accessible, custom slider widget based on a standard HTML select.
-
jQuery custom file input - Article and library.
-
React isomorphic form - Set of React form components which can be pre-rendered & handled server-side. They are enhanced client-side without losing state.
Data Visualisations
-
Timeline - From definition list to SVG illustration (article with demos).
-
Charts - From data table to themed charts using HTML5 canvas (article and library).
Images
Page Navigation
Asynchronously fetch and transition between static pages using ajax and history.pushState
:
-
Barba.js - Add page transitions with event hooks, cache and prefetch support.
-
SmoothState.js - Add page transitions with event hooks, cache and prefetch support. (requires jQuery).
-
jquery-pjax - Add page transitions with support for multiple containers / content slots (requires jQuery).
-
MoOx/pjax - Similar tot jquery-pjax, but without the jQuery dependency.
-
Turbolinks - Add page transitions with event hooks and cache support. Has adapters to bind to native navigation controls on iOS and Android.
Related Articles
License
Jasper Moelker waives all rights to this work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law.
You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.