@utluiz is right when he says that technically there is no difference. The antagonism between the two terms (they are not technical, they are more for philosophies) today is not as strong as it once was, and we need to remember where they come from. One is actually an evolution of the other, and what is currently used is the result of that evolution, and in a way a combination of the two.
Graceful Degradation
When did the expression Graceful Degradation, there was no standardized support for the most basic resources, and chaos prevailed. The browser with the largest market share had numerous CSS bugs, and did not support the W3C Javascript Apis. The browser update cycle was much slower than today. Many websites and applications broke into one or another browser - not to mention mobile devices, which were much more rudimentary and much less present.
When there was support for two or more browsers, this was done with browser detection techniques and browser-specific versions, which soon proved unsustainable. Then came the emphasis on a more elegant solution, hence Graceful. In practice, came the exchange of browser sniffing for Feature Detection. Instead of coding for one or another browser, it is verified whether the user’s browser supports a certain feature, and it is decided how to react to its presence or absence.
Progressive Enhancement
This model was a step forward towards a web cross-browser. Arose polyfills and shims, "buffers" for unsupported features, better leveling out what was possible to do. At the same time, movement was gaining ground by semantic marking, positioning techniques in search engines, mobile devices. This soon led the focus of development to move from resources to content. And only then did the current of Progressive Enhancement, that represented exactly this change of emphasis: from degradation (of resources) to improvement (of content). The distinction may seem subtle, but it’s important. The spirit before was to deliver "ugly" content if there was no other way. It is now to deliver "naked" content and add layers for those who can take advantage of them.
The technique that makes this possible has not changed much, it remains Feature Detection, added to a greater care with marking. This became simpler to achieve as browsers evolved.
In practice
When starting the development of a website or web application, you will always take into account:
- Your target audience
- The content that will be displayed
- The features that this content requires
Notice what I said demands in the last item. For example, if you create the site from a Javascript library for canvas manipulation, it is obvious that the library’s demo pages will depend on canvas support. Using Feature-Detection, you can show a screenshot and/or a message saying that canvas is a requirement, but it makes no sense to implement a functional version without canvas (for example, in Flash) if the purpose of your library is not to replace the canvas when it is not available. The library’s documentation pages, without working examples, should work on more browsers and devices, as they impose fewer limitations.
That is: its content is in charge (content is king). That’s in the spirit of Progressive Enhancement, but practical application (display alternative content or alternative appearance when there is no support for X) can also be seen as Graceful Degradation.
I believe that establishing the necessary prerequisites is the best option, and defining what must exist for the application to work properly is what I do. Ex: If someone opens on
IE
I immediately notify that it is better to open with the browser X,Y,Z for the reasons G,H,Y. If in the next versions the requirements increase and the browser Y does not support, I apply the same technique. I just don’t know if this fits into what "philosophy". I believe that things would be easier if all browsers had at the same level and very identical and standardized Features. My opinion.– Cold
@Cold This would be a case of UnGraceful Degradation hehe (joke, it is logical that if you had the effort to detect the browser and notify the user of the problem, then it is Graceful yes)
– mgibsonbr