liveBook · Manning

Progressive enhancement

As explained in Design for Developers

Progressive enhancement is a web development strategy that delivers core functionality with broadly supported technologies and adds richer capabilities when available.

Progressive enhancement builds a reliable baseline with semantic HTML and CSS, then layers JavaScript and newer platform features on top. Core functionality remains available when scripts, styles, devices, or browsers cannot provide the richer experience. section 12.1.1 section 12.1.3

Apply the strategy by making failure states part of the design from the beginning:

  • Start with semantic HTML so content remains understandable through user-agent styles and assistive technologies. section 12.1.1 section 12.3
  • Add CSS for visual hierarchy, but ensure content still arrives if stylesheets fail to load. section 12.1.1
  • Use JavaScript and modern platform features to improve the baseline rather than replace it. section 12.1.1 section 12.1.3
  • Test unsupported features with tools such as polyfills or CSS @supports feature queries, preserving a fallback outside the enhancement layer. section 12.1.3

When JavaScript or CSS fails

A page should still load and present its content if JavaScript is disabled to save data, or if CSS fails and the browser supplies its own outline and hierarchy. The enhanced interface can then serve users on modern devices without breaking the baseline for everyone else. section 12.1.1

Figure 12.1 In 2020, consultant Heydon Pickering developed his website so that it wouldn’t display if JavaScript was turned on in the browser.

Use the figure as a striking example of designing an experience around the presence or absence of JavaScript. section 12.1.1

How Design for Developers covers it

How deep it goes
Explains baseline construction, failure planning, feature layering, polyfills, and @supports, but stops short of implementation code.
Examples
Uses failed CSS or JavaScript scenarios, disabled JavaScript, polyfills, @supports queries, and a JavaScript-dependent website figure.
What it assumes
Starts with semantic HTML and treats CSS and JavaScript as progressively added layers rather than assuming scripting should provide the foundation.
What you can do after
Build a functional baseline and layer enhancements that remain usable across browser capabilities, device constraints, and loading failures.
How it connects
Connects semantic HTML, accessibility, CSS, JavaScript, browser support, performance, and user experience.

Also explained in

Compare how 2 books explain progressive enhancement →

Related concepts

This explainer was generated by Manning's knowledge graph from the text of Design for Developers. The section links point to the parts of the book it draws on.