瀏覽器兼容CSS漸進增強 VS 優雅降級如何選擇

由于低級瀏覽器不支持 CSS3,但是 CSS3 特效太優秀不忍放棄,所以在高級瀏覽器中使用CSS3,而在低級瀏覽器只保證最基本的功能。二者的目的都是關注不同瀏覽器下的不同體驗,但是它們側重點不同,所以導致了工作流程上的不同。

百科解釋:

漸進增強(Progressive Enhancement):一開始就針對低版本瀏覽器進行構建頁面,完成基本的功能,然后再針對高級瀏覽器進行效果、交互、追加功能達到更好的體驗。
優雅降級(Graceful Degradation):一開始就構建站點的完整功能,然后針對瀏覽器測試和修復。比如一開始使用 CSS3 的特性構建了一個應用,然后逐步針對各大瀏覽器進行 hack 使其可以在低版本瀏覽器上正常瀏覽。
其實漸進增強和優雅降級并非什么新概念,只是舊的概念換了一個新的說法。在傳統軟件開發中,經常會提到向上兼容和向下兼容的概念。漸進增強相當于向上兼容,而優雅降級相當于向下兼容。向下兼容指的是高版本支持低版本的或者說后期開發的版本支持和兼容早期開發的版本,向上兼容的很少。大多數軟件都是向下兼容的,比如說Office2010能打開Office2007,Office2006,Office2005,Office2003等建的word文件,但是用Office2003就不能打開用Office2007,Office2010等建的word文件!
漸進增強和優雅降級的區別:
優雅降級和漸進增強只是看待同種事物的兩種觀點。優雅降級和漸進增強都關注于同一網站在不同設備里不同瀏覽器下的表現程度。關鍵的區別則在于它們各自關注于何處,以及這種關注如何影響工作的流程。
優雅降級觀點認為應該針對那些最高級、最完善的瀏覽器來設計網站。而將那些被認為“過時”或有功能缺失的瀏覽器下的測試工作安排在開發周期的最后階段,并把測試對象限定為主流瀏覽器(如 IE、Mozilla 等)的前一個版本。在這種設計范例下,舊版的瀏覽器被認為僅能提供“簡陋卻無妨 (poor, but passable)” 的瀏覽體驗。你可以做一些小的調整來適應某個特定的瀏覽器。但由于它們并非我們所關注的焦點,因此除了修復較大的錯誤之外,其它的差異將被直接忽略。
漸進增強觀點則認為應關注于內容本身。請注意其中的差別:我甚至連“瀏覽器”三個字都沒提。內容是我們建立網站的誘因。有的網站展示它,有的則收集它,有的尋求,有的操作,還有的網站甚至會包含以上的種種,但相同點是它們全都涉及到內容。這使得漸進增強成為一種更為合理的設計范例。
通過案例分析:
看如下這兩段代碼的書寫順序,表示了我們開發的著重點。
.transition { /*漸進增強寫法*/
-webkit-transition: all .5s;
-moz-transition: all .5s;
-o-transition: all .5s;
transition: all .5s;
}
.transition { /*優雅降級寫法*/
transition: all .5s;
-o-transition: all .5s;
-moz-transition: all .5s;
-webkit-transition: all .5s;
}
前綴CSS3(-webkit-* / -moz-* / -o-*)和正常CSS3在瀏覽器中的支持情況是這樣的:
  1. 很久以前:瀏覽器前綴CSS3和正常CSS3都不支持;
  2. 不久之前:瀏覽器只支持前綴CSS3,不支持正常CSS3;
  3. 現在:瀏覽器既支持前綴CSS3,又支持正常CSS3;
  4. 未來:瀏覽器不支持前綴CSS3,僅支持正常CSS3.
漸進增強的寫法,優先考慮老版本瀏覽器的可用性,最后才考慮新版本的可用性。在時期3前綴CSS3和正常CSS3都可用的情況下,正常CSS3會覆蓋前綴CSS3。優雅降級的寫法,優先考慮新版本瀏覽器的可用性,最后才考慮老版本的可用性。在時期3前綴CSS3和正常CSS3都可用的情況下,前綴CSS3會覆蓋正常的CSS3。
就CSS3這種例子而言,我更加推崇漸進增強的寫法。因為前綴CSS3的某些屬性在瀏覽器中的實現效果有可能與正常的CSS3實現效果不太一樣,所以最終還是得以正常CSS3為準。如果你好奇究竟是什么屬性在前綴CSS3和正常CSS3中顯式效果不一樣,可以看看這篇文章《需警惕CSS3屬性的書寫順序》。

如何抉擇


如果軟件開發的預算和時間充足,就不存在抉擇的問題。然而現實很殘酷,要么開發周期短,要么開發預算少,或者二者兼而有之,這個時候該如何抉擇?就我個人而言,講講我的觀點。
根據你的用戶所使用的客戶端的版本來做決定。請注意我的措辭,我沒有用瀏覽器,而是用客戶端。因為漸進增強和優雅降級的概念本質上是軟件開發過程中低版本軟件與高版本軟件面對新功能的兼容抉擇問題。服務端程序很少存在這種問題,因為開發者可以控制服務端運行程序的版本,就無所謂漸進增強和優雅降級的問題。但是客戶端程序則不是開發者所能控制的(你總不能強制用戶去升級它們的瀏覽器吧)。我們所謂的客戶端,可以指瀏覽器,移動終端設備(如:手機,平板電腦,智能手表等)以及它們對應的應用程序(瀏覽器對應的是網站,移動終端設備對應的是相應的APP)。
現在有很成熟的技術,能夠讓你分析使用你客戶端程序的版本比例。如果低版本用戶居多,當然優先采用漸進增強的開發流程;如果高版本用戶居多,為了提高大多數用戶的使用體驗,那當然優先采用優雅降級的開發流程。
然而事實情況是怎么樣的呢?絕大多數的大公司都是采用漸進增強的方式,因為業務優先,提升用戶體驗永遠不會排在最前面。例如:新浪微博網站前端的更新,擁有這種億級用戶的網站,絕對不可能追求某個特效而不考慮低版本用戶可不可用,一定是確保低版本到高版本的可訪問性,再去漸進增強,采用新功能給高版本用戶提供更好的用戶體驗。但也不是沒有反例。如果你開發的是一款面向青少年的軟件(或網站),你知道這個群體的人總是喜歡嘗試新事物,總是喜歡酷炫的特效,總是喜歡把它們的軟件更新到最新版本(而不像我們老一輩的用戶)。面對這種情況,漸進增強的開發流程實為上選。

轉載于:https://www.cnblogs.com/chaojiaheng/p/8564801.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390063.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390063.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

細數sass安裝中遇到的坑

前言: 前兩天打算清理電腦的時候,遇到了一點特殊的問題,打算重裝一些東西,其中就有我一直用的順手的SASS預編譯工具。 但是在重裝的時候,我發現我居然不會用了??? 靠,要不…

442. 數組中重復的數據

442. 數組中重復的數據 給定一個整數數組 a,其中1 ≤ a[i] ≤ n (n為數組長度), 其中有些元素出現兩次而其他元素出現一次。 找到所有出現兩次的元素。 你可以不用到任何額外空間并在O(n)時間復雜度內解決這個問題嗎? 示例&am…

[bzoj 2726] 任務安排 (斜率優化 線性dp)

3月14日第三題!!!(雖然是15號發的qwq) Description 機器上有N個需要處理的任務,它們構成了一個序列。這些任務被標號為1到N,因此序列的排列為1,2,3…N。這N個任務被分成若干批,每批…

2018年,牛客網小白月賽5

第一次啊,補題,希望大佬批評。 題目按我補題順序來的。 https://www.nowcoder.com/acm/contest/135#question H 題 最大公倍數 題意:給出兩個數,求最大公倍數 歐幾里德算法算出最大公約數k; 然后算出。最大公倍數即可 代碼如下: …

292. Nim 游戲

292. Nim 游戲 你和你的朋友,兩個人一起玩 Nim 游戲: 桌子上有一堆石頭。你們輪流進行自己的回合,你作為先手。每一回合,輪到的人拿掉 1 - 3 塊石頭。拿掉最后一塊石頭的人就是獲勝者。 假設你們每一步都是最優解。請編寫一個函…

0710 mux協議的作用(ppp撥號時如何和gprs進行at指令交互)

ppp撥號使gprs上網的同時如何和gprs模塊進行at指令的交互,這是一個問題。 在linux中,ppp撥號上網是內核中支持的,只需要在內核配置中選上。 ppp撥號的方式使gprs進行上網與at指令使gprs上網,兩者之間有不同。ppp是一個將用at指令使…

爬蟲筆記(十二)——瀏覽器偽裝技術

為什么要進行瀏覽器偽裝技術? 有一些網站為了避免爬蟲的惡意訪問,會設置一些反爬蟲機制,對方服務器會對爬蟲進行屏蔽。常見的飯爬蟲機制主要有下面幾個: 1. 通過分析用戶請求的Headers信息進行反爬蟲 2. 通過檢測用戶行為進行反…

650. 只有兩個鍵的鍵盤

650. 只有兩個鍵的鍵盤 最初記事本上只有一個字符 ‘A’ 。你每次可以對這個記事本進行兩種操作: Copy All(復制全部):復制這個記事本中的所有字符(不允許僅復制部分字符)。Paste(粘貼&#x…

Codeforces 626F Group Projects (DP)

題目鏈接 8VC Venture Cup 2016 - Elimination Round 題意 把$n$個物品分成若干組,每個組的代價為組內價值的極差,求所有組的代價之和不超過$k$的方案數。 考慮DP,$f[i][j][k]$表示考慮到第$i$個物品的時候,還有$j$組尚未分配完…

《活出生命的意義》:人生有何意義?

在你一生的閱讀體驗中,如果能夠有一本書,它的某個章節、某種思想、或者某句話能夠觸動你的內心,解決你的困惑,甚至能改變你的命運,那這樣的一本書你一定要視如珍寶,經常翻閱,維克多弗蘭克爾的《…

右鍵添加git-bash

主要: 右鍵如果沒有git-bash,如何給右鍵手動添加 前面對右鍵存在git-bash但使用出現問題的解決,也想到如果右鍵都沒有,該如何給右鍵添加了,于是接著記錄下如何添加的過程: 情形: 手動給右鍵添加…

Weblogic的緩存

2019獨角獸企業重金招聘Python工程師標準>>> 最近遇到一個關于weblogic緩存的問題。再把war包放入到weblogic指定目錄啟動以后,訪問頁面信息沒有更新。最后發現是\weblogic\user_projects\domains\base_domain\servers\AdminServer下的文件沒有清除&…

725. 分隔鏈表

725. 分隔鏈表 給你一個頭結點為 head 的單鏈表和一個整數 k ,請你設計一個算法將鏈表分隔為 k 個連續的部分。 每部分的長度應該盡可能的相等:任意兩部分的長度差距不能超過 1 。這可能會導致有些部分為 null 。 這 k 個部分應該按照在鏈表中出現的順…

LAMP介紹-MySQL安裝

2019獨角獸企業重金招聘Python工程師標準>>> LAMP: linux-apache-mysql-php (安裝方式有:rpm,源碼,二進制免編譯) linux-操作系統 apache-web服務軟件(httpd) mysql-存儲數據庫 php…

總結verilog產生隨機數的$random和seed

$random(seed)是verilog中最簡單的產生隨機數的系統函數。 在調用系統函數$random(seed)時,可以寫成三種樣式:1)$random,2)$random(),3)$random(seed)。下面分別說明: 1)…

326. 3的冪

326. 3的冪 給定一個整數,寫一個函數來判斷它是否是 3 的冪次方。如果是,返回 true ;否則,返回 false 。 整數 n 是 3 的冪次方需滿足:存在整數 x 使得 n 3x 示例 1:輸入:n 27 輸出&#x…

Lottie 站在巨人的肩膀上實現 Android 酷炫動畫效果

說到動畫效果,一般都會感到很高端,感覺很酷炫;而小菜技術有限,稍復雜的動畫效果也需要很多時間處理,但是遇到時間緊任務重的情況該怎么辦呢?那就嘗試一下 Lottie 吧,酷炫的動畫集成卻相當簡單&a…

正則表達式(讀書過程所記未整理)

\d 表示一位數字字符 \d{3} 表示3個數字字符 匹配電話比如400-400-1118 import re phone_number re.compile(r\d{3}-\d{3}-\d{4}) mo phone_number.search(rfor a number is 400-400-4000) print(mo.group()) ************************************************************…

java1

不知道為啥粘貼的圖片是一堆編碼。。。。 如何插入圖片 博客后后臺MarkDown編輯器上只有一個按鈕,就是用來上傳圖片并自動插入MarkDown標記的,超級好用 (一)學習總結 1.在java中通過Scanner類完成控制臺的輸入,查閱JDK…

430. 扁平化多級雙向鏈表

430. 扁平化多級雙向鏈表 多級雙向鏈表中,除了指向下一個節點和前一個節點指針之外,它還有一個子鏈表指針,可能指向單獨的雙向鏈表。這些子列表也可能會有一個或多個自己的子項,依此類推,生成多級數據結構&#xff0c…