The candy coating is applied to M&Ms; in a tumbler. The sugar is sprayed into the machine while the M&Ms; tumble around. After the sugar is added, color is added in the same way and tumbled until polished.
Copy & paste the code below to embed this comment.
Tobias Sailer
Lets say: one likes candy and the peanut; but no chocolate.
I found, that most of the time it doesn’t make sense to activate JS, when there is no CSS support. But sometimes there is a need for JS even with no CSS.
The workaround usually do:
on a documentReady Event, I check, if a certain CSS Property is present. Mostly I check if the body background-image is rendered. If so, I apply all the magic done with JS. If not, I just fire-up basic JS.
Example: BASIC JS: If you have some Ajax Content, it might be a valuable information to users with JS support and no CSS support( Top3 news for example). So all users will get served with this.
Advanced JS: All kind of thick-, fancy, and greyboxes won’t work correctly ,if there is no CSS support. So only users with CSS and JS will get served with the convenient js-Lightboxes.
Graceful degradation focuses on building the website for the most advanced/capable browsers. Testing in browsers deemed “older”? or less capable usually takes place during the last quarter of the development cycle and is often restricted to the previous release of the major browsers (IE, Mozilla, etc.). Under this paradigm, older browsers are expected to have a poor, but passable experience. Small fixes may be made to accommodate a particular browser. Because they are not the focus, little attention is paid beyond fixing the most egregious errors.
That may be the way some people viewed graceful degradation, but it is certainly not the approach that I or many other accessibility-aware developers worked.
Yes, a GD website was built for the latest popular browser(s). But sites were made to be accessible in much older and less advanced browsers than “the previous version”. I designed sites that used noscript and noframes to ensure that they worked in the most basic browsers, albeit in many cases with a much reduced user experience. It may be that people with slightly older or less capable browsers would be treated as thought they had the oldest and least capable browsers, but they would still be able to access the site.
I agree with the points laid out in the article. But where progressive enhancement falls short is in rich internet applications. I’m personally OK with requiring a certain level of browser requirement in order to experience in a certain way. I also think fostering progressive enhancement leads to things like IE6 being around even after 10 years. I find it stifling. There comes a point where you have to just drop support for older browsers because the experience on those devices is so verbose and hurts the message you are giving.
I agree that certain application-type sites might need minimum browser requirements, but most sites can offer a non-Ajax alternative or users can manage without certain features. People with older browsers know (mostly) that they can’t get the all-singing all-dancing stuff, but they still want/need to be able to access the content and basic functionality.
What has led to IE6 being around after 7 years (it was launched in 2001) is a well-known phenomenon, which is that as a particular technology becomes more widespread and pervasive, an ever smaller proportion of people keep their technology up-to-date. Opera and Firefox have got around this by prompting users to update every time a newer version is released, but IE hasn’t had that yet, so people who just want to browse that there ol’ internet use what came with their computer and that’s the end of that.
What progressive enhancement has done is to allow developers to build standards-compliant high-functioning websites that don’t alienate people with IE6. The alternative is that we would be stuck with sites designed for IE6 forever, and I don’t think that’s a better alternative!
Progressive enhancement isn’t just about catering for IE6. It also means catering for people using new technologies like mobile phones, and it is helpful for people using assistive technologies. You can’t blame good accessibility practice for the persistence of IE6!
Those pointing out that graceful degradation doesn’t differ from progressive enhancement are on the right track, as far as definitions are concerned; the problem was that for a long time in the mid-nineties and beyond, the trend in practice was towards simply winking at GD and building sites for cutting edge browsers that were then tweaked so they weren’t simply awful in older browsers. This is partly due to the fact that the technology support simply wasn’t there back then to allow for true separation of content and presentation; the primary point behind PE as a term was to give people a method to approach how sites could be built so they were usable and functional across a wide variety of browsers, and to show that it was even possible. Dave Shea’s CSS Zen Garden was just one of the first examples of the basic idea, but many people just saw it as an isolated experiment, rather than as a demonstration of the way things ought to be done in the future.
I coined the term as a replacement for the more unwieldy phrase “separation of content, presentation, and behavior for the sake of accessibility” and to give designers a method they could expand upon, using the ideas of content-driven design, minimal, semantic markup, CSS-driven presentation, and what has come to be called unobtrusive JavaScript. I’m happy to see that it has taken off as I’d intended, and I’m grateful to Aaron and ALA for helping to spread the ideas even further.
The point about “Web 2.0” sites and others with highly functional, interaction oriented interfaces being harder to do with PE methods is a valid one; I don’t think it’s impossible, but rather that it’s kind of an obvious point – if your app absolutely relies on scripted behavior, then it clearly won’t work at all in a browser that doesn’t support scripting. But I also believe that the vast majority of sites and pages are about delivering content, rather than interface, at least for the time being. And for those, PE represents a way to build those pages and sites in the most accessible way possible. And it makes for more easily maintained sites, due to the manner in which the underlying markup isn’t cluttered with presentational crud.
The fact that Yahoo, AOL, and others have embraced PE as the foundation of their design strategies is telling, and gratifying. In a way, PE was, for me, a way to get back to my roots in SGML, where we simply didn’t have presentational markup and where scripting and/or interaction was built into the applications, rather than into the underlying document source; many of us abandoned the sensible approach simply in order to keep up with the flood of new Netscape betas back in 1995, and when CSS was finally mature enough to use, it seemed important to return to those older lessons and apply them to the present day.
The author seems to me to be saying, in effect, this is what ‘graceful degradation’ should have been, and then giving it the a name, never mind the fact that GD is in many places what it should have been.
What happens now when the new ‘progressive enhancement’ is done badly in a few places and the ideal is not universally realised? Do we need to come up with a new name – this is what ‘progressive enhancement’ should have been?
That said, and regardless of what we call it, the author does well to draw our attention once more to this way of developing web sites.
the concept of “Web 2.0” began with a conference brainstorming session between O’Reilly and MediaLive International. Dale Dougherty, web pioneer and O’Reilly VP, noted that far from having “crashed”, the web was more important than ever, with exciting new applications and sites popping up with surprising regularity. What’s more, the companies that had survived the collapse seemed to have some things in common. Could it be that the dot-com collapse marked some kind of turning point for the web, such that a call to action such as “Web 2.0” might make sense? We agreed that it did, and so the Web 2.0 Conference was born. www.dreamconsultancy.com.au
Copy & paste the code below to embed this comment.
Marty DeAngelo
I’ve been a proponent of PE for a while, and have gotten push back from developers who want to create for the ‘latest and greatest’ and then look to fix any quirks later. One of they key areas of this battle has been Flash.
I see Flash as being the printed “m” on the M&M – it usually requires some JavaScript to work optimally, or at least there is very seldom Flash without JavaScript involved. Just curious as to other thoughts about this – in the example presented, would Flash be the printed “m” or a second candy shell?
Thank you for the wonderful article. I had no real understanding of the difference that progressive enhancement intends to bring to the table until I read this article. This article clearly portrays the advancements offered by such a development paradigm, and quickly offers up an understanding of it’s fundamental differences.
The article does miss explaining the ‘M’ printed on the candy. To me, this would represent the site’s favicon.
I’m a fan of progressive enhancement as I use NoScript on Firefox and hate it when a site forces me to allow their JavaScript just to use the site’s functionality, even though it’s not needed. Sometimes I’ll leave the site, but other ones I really need to use, so have to allow it.
Copy & paste the code below to embed this comment.
John K
I just don’t see the difference between progressive enhancement and graceful degradation. To me it seems like progressive enhancement is just graceful degradation done right.
Can anyone please tell me which of the two the following scenario adheres to?
Someone builds a Javascript image gallery that loads all images, and hides the non selected images using Javascript+css. Anchors are used by Javascript to display the selected image and hide the previous selected image. The default action of the anchors are suppressed by Javascript.
If Javascript is disabled, the images are not hidden and all appear in the page. The anchors “href” is set to target the image, so when a certain anchor is clicked, the browser jumps to the appropriate image on the page.
That was a quality article. And a good kick in the pants. Often when I go about CSS, even though I’m conscious to make it accessible and test it in older browsers, I focus on CSS being design – and I focus on design and plug the content in after. But really, the content does need to be first. Adding CSS while focusing on the content is a subtle but important shift in thinking. Thanks for the thoughts…
In the past i was styling my H’s nad A’s and P’s way before I put some content in the page. After that i started adding some content and then style it, then add some more content, and so on…
After I read your article it all clicked for me – I knew where I wanted to go with the development of my HTML pages.
Now I put in all of my content, then I apply styles to it. It was remarkable to notice how much LESS ie-workarounds I had to apply to my code by doing so. Sometimes I even don’t have to apply any. (those are the times when I’m grinning like a madman).
It amazes me that folks still mark up their pages this way. No self-respecting GD/PE website would replace real hyperlinks with inline JavaScript in the markup. Instead, the HTML link should (re)load the page with the next chunk of content, and a linked JavaScript file would override that hyperlink with the ScrollArrow() behavior.
Copy & paste the code below to embed this comment.
evanchaney
I believe in the idea of progressive enhancement and the reasoning behind it. I wonder your thoughts, Aaron, on how the idea can be applied, or if it does apply, to Web applications.
An argument can (and is being) made that applications need not be universally accessible; that an application, by nature of the behavior it has and the technologies it depends on, has minimum system requirements.
How do you view progressive enhancement as relates to applications for creating content, manipulating content or completing tasks that use Web technologies as the runtime environment inside a browser?
Copy & paste the code below to embed this comment.
antandcharmi
I’m way late reading this and so my comment may be utterly redundant by now, but I think that the difference between Graceful Degradation and Progressive Enhancement is in the point-of-view of the designer.
PE is a forward-planning effort including older browsers’ needs from the start, while GD is backward-looking stop-gap approach. GD builds an ideal site, and only throws in rough and basic accessibility as a quick and lazy afterthought; whereas PE deliberately plans well-designed access to the content from the ground up, adding more beautiful interactions along the way.
So they both achieve the same goal, but PE does it better (though perhaps at greater cost).
However, I also see a danger with PE:
The web is much, much more than content nowadays. It is just as much market-related entertainment and interaction. Entertaining and easy-to-use web-sites will have readers who not only stick, but also spread the word all over the web, increasing the site’s ‘web share’.
But starting from content and older-generation accessibility concerns from the ground up can unwittingly blinker your artistic flair and result in your missing a much better interaction design possible in the latest generation of browsers.
To tell the truth I haven’t designed a web-site yet but I think my personal instinctive approach would be a 3-pass design phase – first the ideal, then the basic, and finally a re-working of the two to find the best combination:
1. To carefully AVOID thinking of older browser needs at first for the artistic creative phase. To focus on designing a rewarding and easy EXPERIENCE for the user whatever it might involve.
2. Then to do the same thing again for the oldest browsers, and see how much of their design can overlap with your ideal design.
3. Finally to marry the two and produce a child design, now from the PE point of view, perhaps sacrificing some aspects of your ideal design. Or even perhaps to divorce the two, if the ideal is worth the maintenance.
Copy & paste the code below to embed this comment.
antandcharmi
As a PS to the above.
I misrepresented PE slightly above, in that as I understand it the aim is to forget the browser issues, and design the delivery of the content itself, THEN build that delivery for all levels of browser.
I guess I really am just qualifying PE by saying that we must design not only for content delivery but also for interaction and entertainment, and as a result, we are forced to consider browser capabilities from the start. And so, not to be unconsciously limited, we need to indulge in the luxury of the latest version of browsers before designing the delivery of content from the ground up.
I like thinking about Progressive Enhancement first, otherwise Graceful Degradation can end up like a zombie as this: http://ui-notes.com/progressive-enhance-vs-graceful-degradation/
Browser compatibility is very important part of website design. I face lots of errors when; I check my site in different browsers, Some websites works on Firefox but not in IE, Some website works in Chrome but not in IE and Firefox. Main reason of these errors is javascript element. Its can hurt your business customer, if your webpage is not browser compatibility.
43 Reader Comments
Back to the ArticleC Bird
Slightly off topic, but…
The candy coating is applied to M&Ms; in a tumbler. The sugar is sprayed into the machine while the M&Ms; tumble around. After the sugar is added, color is added in the same way and tumbled until polished.
Oh! And thanks for the article.
Tobias Sailer
Lets say: one likes candy and the peanut; but no chocolate.
I found, that most of the time it doesn’t make sense to activate JS, when there is no CSS support. But sometimes there is a need for JS even with no CSS.
The workaround usually do:
on a documentReady Event, I check, if a certain CSS Property is present. Mostly I check if the body background-image is rendered. If so, I apply all the magic done with JS. If not, I just fire-up basic JS.
Example:
BASIC JS: If you have some Ajax Content, it might be a valuable information to users with JS support and no CSS support( Top3 news for example). So all users will get served with this.
Advanced JS: All kind of thick-, fancy, and greyboxes won’t work correctly ,if there is no CSS support. So only users with CSS and JS will get served with the convenient js-Lightboxes.
O, btw. Thanks or the article.
Stephen Down
That may be the way some people viewed graceful degradation, but it is certainly not the approach that I or many other accessibility-aware developers worked.
Yes, a GD website was built for the latest popular browser(s). But sites were made to be accessible in much older and less advanced browsers than “the previous version”. I designed sites that used noscript and noframes to ensure that they worked in the most basic browsers, albeit in many cases with a much reduced user experience. It may be that people with slightly older or less capable browsers would be treated as thought they had the oldest and least capable browsers, but they would still be able to access the site.
Stephen Down
Cameron Westland:
I agree that certain application-type sites might need minimum browser requirements, but most sites can offer a non-Ajax alternative or users can manage without certain features. People with older browsers know (mostly) that they can’t get the all-singing all-dancing stuff, but they still want/need to be able to access the content and basic functionality.
What has led to IE6 being around after 7 years (it was launched in 2001) is a well-known phenomenon, which is that as a particular technology becomes more widespread and pervasive, an ever smaller proportion of people keep their technology up-to-date. Opera and Firefox have got around this by prompting users to update every time a newer version is released, but IE hasn’t had that yet, so people who just want to browse that there ol’ internet use what came with their computer and that’s the end of that.
What progressive enhancement has done is to allow developers to build standards-compliant high-functioning websites that don’t alienate people with IE6. The alternative is that we would be stuck with sites designed for IE6 forever, and I don’t think that’s a better alternative!
Progressive enhancement isn’t just about catering for IE6. It also means catering for people using new technologies like mobile phones, and it is helpful for people using assistive technologies. You can’t blame good accessibility practice for the persistence of IE6!
Steven Champeon
Those pointing out that graceful degradation doesn’t differ from progressive enhancement are on the right track, as far as definitions are concerned; the problem was that for a long time in the mid-nineties and beyond, the trend in practice was towards simply winking at GD and building sites for cutting edge browsers that were then tweaked so they weren’t simply awful in older browsers. This is partly due to the fact that the technology support simply wasn’t there back then to allow for true separation of content and presentation; the primary point behind PE as a term was to give people a method to approach how sites could be built so they were usable and functional across a wide variety of browsers, and to show that it was even possible. Dave Shea’s CSS Zen Garden was just one of the first examples of the basic idea, but many people just saw it as an isolated experiment, rather than as a demonstration of the way things ought to be done in the future.
I coined the term as a replacement for the more unwieldy phrase “separation of content, presentation, and behavior for the sake of accessibility” and to give designers a method they could expand upon, using the ideas of content-driven design, minimal, semantic markup, CSS-driven presentation, and what has come to be called unobtrusive JavaScript. I’m happy to see that it has taken off as I’d intended, and I’m grateful to Aaron and ALA for helping to spread the ideas even further.
The point about “Web 2.0” sites and others with highly functional, interaction oriented interfaces being harder to do with PE methods is a valid one; I don’t think it’s impossible, but rather that it’s kind of an obvious point – if your app absolutely relies on scripted behavior, then it clearly won’t work at all in a browser that doesn’t support scripting. But I also believe that the vast majority of sites and pages are about delivering content, rather than interface, at least for the time being. And for those, PE represents a way to build those pages and sites in the most accessible way possible. And it makes for more easily maintained sites, due to the manner in which the underlying markup isn’t cluttered with presentational crud.
The fact that Yahoo, AOL, and others have embraced PE as the foundation of their design strategies is telling, and gratifying. In a way, PE was, for me, a way to get back to my roots in SGML, where we simply didn’t have presentational markup and where scripting and/or interaction was built into the applications, rather than into the underlying document source; many of us abandoned the sensible approach simply in order to keep up with the flood of new Netscape betas back in 1995, and when CSS was finally mature enough to use, it seemed important to return to those older lessons and apply them to the present day.
Ian Goldby
The author seems to me to be saying, in effect, this is what ‘graceful degradation’ should have been, and then giving it the a name, never mind the fact that GD is in many places what it should have been.
What happens now when the new ‘progressive enhancement’ is done badly in a few places and the ideal is not universally realised? Do we need to come up with a new name – this is what ‘progressive enhancement’ should have been?
That said, and regardless of what we call it, the author does well to draw our attention once more to this way of developing web sites.
Maneet Puri
I loved the candy coat example! Couldnt have been more illustrative that that.
piyush kotadiya
the concept of “Web 2.0” began with a conference brainstorming session between O’Reilly and MediaLive International. Dale Dougherty, web pioneer and O’Reilly VP, noted that far from having “crashed”, the web was more important than ever, with exciting new applications and sites popping up with surprising regularity. What’s more, the companies that had survived the collapse seemed to have some things in common. Could it be that the dot-com collapse marked some kind of turning point for the web, such that a call to action such as “Web 2.0” might make sense? We agreed that it did, and so the Web 2.0 Conference was born. www.dreamconsultancy.com.au
Jonny Haynes
Great article as always! But isn’t this just common sense?
Martin Smales
I want M&Ms;!
Marty DeAngelo
I’ve been a proponent of PE for a while, and have gotten push back from developers who want to create for the ‘latest and greatest’ and then look to fix any quirks later. One of they key areas of this battle has been Flash.
I see Flash as being the printed “m” on the M&M – it usually requires some JavaScript to work optimally, or at least there is very seldom Flash without JavaScript involved. Just curious as to other thoughts about this – in the example presented, would Flash be the printed “m” or a second candy shell?
Alex Stanford
Thank you for the wonderful article. I had no real understanding of the difference that progressive enhancement intends to bring to the table until I read this article. This article clearly portrays the advancements offered by such a development paradigm, and quickly offers up an understanding of it’s fundamental differences.
Thanks again,
Alex
Kendall Conrad
The article does miss explaining the ‘M’ printed on the candy. To me, this would represent the site’s favicon.
I’m a fan of progressive enhancement as I use NoScript on Firefox and hate it when a site forces me to allow their JavaScript just to use the site’s functionality, even though it’s not needed. Sometimes I’ll leave the site, but other ones I really need to use, so have to allow it.
John K
I just don’t see the difference between progressive enhancement and graceful degradation. To me it seems like progressive enhancement is just graceful degradation done right.
Can anyone please tell me which of the two the following scenario adheres to?
Someone builds a Javascript image gallery that loads all images, and hides the non selected images using Javascript+css. Anchors are used by Javascript to display the selected image and hide the previous selected image. The default action of the anchors are suppressed by Javascript.
If Javascript is disabled, the images are not hidden and all appear in the page. The anchors “href” is set to target the image, so when a certain anchor is clicked, the browser jumps to the appropriate image on the page.
Graceful degradation or progressive enhancement?
Jeff Vdovjak
That was a quality article. And a good kick in the pants. Often when I go about CSS, even though I’m conscious to make it accessible and test it in older browsers, I focus on CSS being design – and I focus on design and plug the content in after. But really, the content does need to be first. Adding CSS while focusing on the content is a subtle but important shift in thinking. Thanks for the thoughts…
Pavel Kuts
In the past i was styling my H’s nad A’s and P’s way before I put some content in the page. After that i started adding some content and then style it, then add some more content, and so on…
After I read your article it all clicked for me – I knew where I wanted to go with the development of my HTML pages.
Now I put in all of my content, then I apply styles to it. It was remarkable to notice how much LESS ie-workarounds I had to apply to my code by doing so. Sometimes I even don’t have to apply any. (those are the times when I’m grinning like a madman).
A great read! All three articles. Thank, you
Paul Novitski
“http://www.panic.com/coda/ — A great example of progressive enhancement.”
Yikes, I don’t think so:
<a href=”[removed]ScrollArrow(‘right’,‘toolbar’,‘scroller’,‘new-pane’);”>
It amazes me that folks still mark up their pages this way. No self-respecting GD/PE website would replace real hyperlinks with inline JavaScript in the markup. Instead, the HTML link should (re)load the page with the next chunk of content, and a linked JavaScript file would override that hyperlink with the ScrollArrow() behavior.
evanchaney
I believe in the idea of progressive enhancement and the reasoning behind it. I wonder your thoughts, Aaron, on how the idea can be applied, or if it does apply, to Web applications.
An argument can (and is being) made that applications need not be universally accessible; that an application, by nature of the behavior it has and the technologies it depends on, has minimum system requirements.
How do you view progressive enhancement as relates to applications for creating content, manipulating content or completing tasks that use Web technologies as the runtime environment inside a browser?
antandcharmi
I’m way late reading this and so my comment may be utterly redundant by now, but I think that the difference between Graceful Degradation and Progressive Enhancement is in the point-of-view of the designer.
PE is a forward-planning effort including older browsers’ needs from the start, while GD is backward-looking stop-gap approach. GD builds an ideal site, and only throws in rough and basic accessibility as a quick and lazy afterthought; whereas PE deliberately plans well-designed access to the content from the ground up, adding more beautiful interactions along the way.
So they both achieve the same goal, but PE does it better (though perhaps at greater cost).
However, I also see a danger with PE:
The web is much, much more than content nowadays. It is just as much market-related entertainment and interaction. Entertaining and easy-to-use web-sites will have readers who not only stick, but also spread the word all over the web, increasing the site’s ‘web share’.
But starting from content and older-generation accessibility concerns from the ground up can unwittingly blinker your artistic flair and result in your missing a much better interaction design possible in the latest generation of browsers.
To tell the truth I haven’t designed a web-site yet but I think my personal instinctive approach would be a 3-pass design phase – first the ideal, then the basic, and finally a re-working of the two to find the best combination:
1. To carefully AVOID thinking of older browser needs at first for the artistic creative phase. To focus on designing a rewarding and easy EXPERIENCE for the user whatever it might involve.
2. Then to do the same thing again for the oldest browsers, and see how much of their design can overlap with your ideal design.
3. Finally to marry the two and produce a child design, now from the PE point of view, perhaps sacrificing some aspects of your ideal design. Or even perhaps to divorce the two, if the ideal is worth the maintenance.
antandcharmi
As a PS to the above.
I misrepresented PE slightly above, in that as I understand it the aim is to forget the browser issues, and design the delivery of the content itself, THEN build that delivery for all levels of browser.
I guess I really am just qualifying PE by saying that we must design not only for content delivery but also for interaction and entertainment, and as a result, we are forced to consider browser capabilities from the start. And so, not to be unconsciously limited, we need to indulge in the luxury of the latest version of browsers before designing the delivery of content from the ground up.
Saç kaynak
“The Chocolatey Layers of Progressive Enhancement” i like that idea so much, really so clever :))
Ehecatl
I like thinking about Progressive Enhancement first, otherwise Graceful Degradation can end up like a zombie as this: http://ui-notes.com/progressive-enhance-vs-graceful-degradation/
lukehenry
Browser compatibility is very important part of website design. I face lots of errors when; I check my site in different browsers, Some websites works on Firefox but not in IE, Some website works in Chrome but not in IE and Firefox. Main reason of these errors is javascript element. Its can hurt your business customer, if your webpage is not browser compatibility.