Progressive enhancement is a way of building websites and applications.
It's based on the idea that you should start by making your page work with just HTML, and consider everything else an extra.
This is because the only part of a page that you can rely on to work is the HTML. If the HTML fails there's no web page, so you should consider the rest optional.
Make the page usable with only HTML
This approach sets a baseline and means your site will work with practically every device and browser, including older ones.
Adding the extras
To build webpages using progressive enhancement, you should consider everything except HTML as an optional extra.
Add these extras only after your webpage works using only HTML:
- images, video and audio
- smoother and faster interactions that don't require the user to refresh the entire page
- ways to validate data that users submit before it hits the network
- interactive charts
Making your website accessible
If you add an image, you must add alternative text. This is both for people with visual impairment and for when the image fails to load.
Styling can't be the only way you share information. This is because:
- 'text in bold' is not enough when you can't tell the difference between bold and normal text
- 'red items are required' is not enough when you don't have colours applied, can't see the colours or can't distinguish them due to colour blindness
- video and audio without transcripts or subtitles are unsuitable for hearing impaired people
- information appearing in a video in a visual-only form (eg a question answered by people on screen with no audio) isn't suitable for people with visual impairments
- interactive elements that need a mouse can't be used by someone who only uses a keyboard or a touch-only device like a smartphone or tablet
There are many situations when extra layers can fail to load or are filtered. This can happen due to:
- temporary network errors
- DNS lookup failures
- overload or downtime affecting the server where the resource is found, meaning it fails to respond in time or at all
- corporate firewalls blocking, removing or altering content (large institutions like banks or government departments may use these)
- mobile network providers resampling images and altering content to speed up load times and reduce bandwidth usage
- personal firewalls or antivirus software altering or blocking content
- internet providers inserting their own code into the page that accidentally conflicts with your own
Of course, some users turn off features in their browsers deliberately - you should respect their decision and make sure they can still use your service.
You may also find the Designing for different devices guide useful.