本節書摘來自華章社區《圖解CSS3:核心技術與案例實戰》一書中的第1章,第1.3節漸進增強,作者 大漠,更多章節內容可以訪問云棲社區“華章社區”公眾號查看
1.3 漸進增強
第一次聽到“漸進增強”(Progressive Enhancement)一詞是在前端重構交流會上。漸進增強并不是一種技術,而是一種開發的方式,更是一種Web設計理念。首先思考一個問題:“網站是否需要在每個瀏覽器中看起來都一樣?”帶著這個問題來看漸進增強。
1.3.1 漸進增強與優雅降級
正如前面所言,漸進增強是一種開發方式,更是一種設計理念。在編寫Web頁面時,首先保證最核心的功能實現,讓任何低端的瀏覽器都能看到站點內容,然后考慮使用高級但非必要的CSS和JavaScript等增強功能,為當前和未來的瀏覽器提供更好的支持,給用戶帶來更好的體驗。
在設計的時候,先考慮低端設備用戶能否看到所有內容,然后在此基礎之上為高端用戶進行設計。不僅為高端設備用戶提供一個完美的應用,也要為不同性能級別設備的用戶設計不同級別的不那么完美的應用。這稱為“優雅降級”。
目前而言,雖對“漸進增強”有所了解的人很多,但是要說普及或深入還遠遠沒到時候。在大家平時的設計思維中有一種極強的固定思維,也就是想讓網站在各個瀏覽器下表現一致。這種出發點本身并沒有什么問題,但是這樣會讓領先的瀏覽器的優勢無法充分顯示出來。
因此,從今天開始要改變制作Web站點的思維,讓網站能優雅降級,目標應該是——向盡可能多的用戶提供盡可能優質的用戶體驗。這跟用戶訪問網站使用方式無關,無論通過iPhone、高端的桌面系統、Kindle,還是閱讀器,用戶都能得到盡可能獨特且完美的體驗。
1.3.2 漸進增強的優點
“向盡可能多的用戶提供盡可能優質的用戶體驗”這一目標聽起來相當不錯。有的人制作Web站點時報怨,IE怎樣才具有CSS3的效果。誠然,我們不使用漸進增強也可以實現,如為一些舊瀏覽器提供一套兼容方案,確保頁面與現代瀏覽器保持一致。簡單來說就是在支持CSS3的瀏覽器中使用CSS3特性,在不支持的瀏覽器中另寫一套樣式來模擬CSS3效果,實現讓網站在所有瀏覽器都一樣。
可以說,通過這種方法只是讓低版本的瀏覽器渲染頁面更好看一點,并沒有得到實質性的提高。
因此,如果網站始終無法做到一模一樣,為什么不使用CSS3技術使它在現代瀏覽器上看起來更靚麗呢?當然,某些CSS3特性在不支持的瀏覽器中是“無法模擬”的,但使用漸進增強,就無須為了讓網站適合所有人而放棄這些技術。
CSS的漸進增強有別于CSS的hack。hack是瀏覽器廠商的一種手法,用來增強自己的競爭,而漸進增強起到錦上添花之效。所以前者應該盡量避免使用,而后者應該適當使用。
就樣式而言,漸進增強的對象是一些現代瀏覽器,漸進增強的一些屬性主要是CSS3的一些特性,或是IE低級版本不支持的一些屬性,或是其他一些特殊情況。淘寶網上的一個例子如圖1-7所示。

這里采用了CSS3的旋轉特性transform,鼠標移上去時,三角會實現旋轉的動畫效果,并改變方向。之前,要實現圖1-7所示的旋轉效果,需要一大串JavaScript腳本。而使用transform僅僅需要幾行代碼。
#site-nave .menu:hover .menu-hd {-webkit-transform: rotate(180deg);-webkit-transform-origin-x:50%;-webkit-transform-origin-y:30%;-moz-transform: rotate(180deg);-moz-transform-origin-x:50%;-moz-transform-origin-y:30%;-o-transform: rotate(180deg);-o-transform-origin-x:50%;-o-transform-origin-y:30%;-ms-transform: rotate(180deg);-ms-transform-origin-x:50%;-ms-transform-origin-y:30%;transform:rotate(180deg);transform-origin-x: 50%;transform-origin-y: 30%;
}
采用漸進增強能給現代瀏覽器用戶一個更好的體驗,在不支持CSS3的IE瀏覽器也能正常使用,只不過體驗會大打折扣。
以上只是一個簡單的例子,本書后面還會介紹CSS3漸進增強的案例,例如text-shadow文字陰影、border-radius圓角屬性、box-shadow盒陰影屬性、CSS3漸變背景和CSS3選擇器等。