自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何優(yōu)雅地實(shí)現(xiàn)瀏覽器兼容與CSS規(guī)則回退

開發(fā) 前端
本文就是探討如何優(yōu)雅地應(yīng)對(duì)瀏覽器兼容問題,包括四點(diǎn):層疊機(jī)制來支持較早的瀏覽器,Modernizr設(shè)置輔助類來分別編寫樣式,使用 @supports 規(guī)則回退,簡(jiǎn)短的 JavaScript 代碼實(shí)現(xiàn)回退。

[[409677]]

我們沒法控制用戶使用新版本還是老版本的瀏覽器,因此往往需要根據(jù)瀏覽器對(duì)于屬性的兼容情況書寫多套 CSS 代碼。本文就是探討如何優(yōu)雅地應(yīng)對(duì)瀏覽器兼容問題,包括四點(diǎn):層疊機(jī)制來支持較早的瀏覽器,Modernizr設(shè)置輔助類來分別編寫樣式,使用 @supports 規(guī)則回退,簡(jiǎn)短的 JavaScript 代碼實(shí)現(xiàn)回退。

提供瀏覽器兼容的網(wǎng)站

  • https://caniuse.com/
  • https://webplatform.github.io/
  • https://developer.mozilla.org/en-US/

層疊機(jī)制來支持較早的瀏覽器

  1. /* 防止 linear-gradient 在老瀏覽器中掛掉導(dǎo)致沒有背景 */ 
  2. background: rgb(255, 128, 0); 
  3. background: -moz-linear-gradient(0deg, yellow, red); 
  4. background: -o-linear-gradient(0deg, yellow, red); 
  5. background: -webkit-linear-gradient(0deg, yellow, red); 
  6. /* 應(yīng)該將標(biāo)準(zhǔn)語(yǔ)法放在最后,來確保最終生效的是是標(biāo)準(zhǔn)語(yǔ)法 */ 
  7. background: linear-gradient(90deg, yellow, red); 

Modernizr設(shè)置輔助類來分別編寫樣式

這里參考了一篇14年的老博客 Modernizr 的介紹和使用。

Modernizr 官網(wǎng):https://modernizr.com/

Modernizr 如何生效?如果頁(yè)面支持 text-shadow 屬性,那么 Modernizr 會(huì)添加 textshadow 類。如果不支持,那么它用 no-textshadow 類作為替代進(jìn)行添加。

因此,前端開發(fā)人員就可以設(shè)置兩套代碼,來應(yīng)對(duì)瀏覽器提供或者不提供 text-shadow 支持的兩種情況。

  1. /* 瀏覽器不支持 text-shaow */ 
  2. h1 { color: gray } 
  3.  
  4. /* 瀏覽器支持 text-shaow */ 
  5. .textshaow h1 { 
  6.   color: transparent; 
  7.   text-shadow: 0 0 .3rem gray; 

使用 @supports 規(guī)則回退

除了使用 Modernizr ,也可以使用瀏覽器自帶的 @supports :

  1. /* 瀏覽器不支持 text-shaow */ 
  2. h1 { color: gray } 
  3.  
  4. /* 瀏覽器支持 text-shaow */ 
  5. @supports (text-shadow: 0 0 .3rem gray){ 
  6.     h1 { 
  7.     color: transparent; 
  8.     text-shadow: 0 0 .3rem gray; 
  9.   } 

但是 Lea Verou 指出,上述代碼的投影效果只有在即支持 @supports 又支持 text-shadow 的瀏覽器中才會(huì)生效。因此慎用 @supports 。

簡(jiǎn)短的 JavaScript 代碼實(shí)現(xiàn)回退

思路與 Modernizr 相同,做特性檢測(cè),然后添加輔助類。

  1. var root = document.documentElement;  // <html> 
  2.  
  3. if ('textShadow' in root.style) { 
  4.   root.classList.add('textshadow'
  5. else { 
  6.   rott.classList.add('no-textshadow'

如上,我們?yōu)?html 添加了輔助類:

  • 如果瀏覽器支持 text-shadow ,那么添加 textshadow
  • 如果瀏覽器不支持 text-shadow ,那么添加 no-textshadow

上述代碼可以被封裝為函數(shù):

  1. function testProperty(property) { 
  2.   var root = document.documentElement; 
  3.  
  4.   if (property in root.style) { 
  5.     root.classList.add(property.toLowerCase()); 
  6.     return true
  7.   } 
  8.  
  9.   root.classList.add('no-' + property.toLowerCase()); 
  10.   return false

注意到上述方法只能用來檢測(cè)屬性是否支持,而非屬性值。(如下,解釋一下屬性和屬性值,如下代碼)

  1. background : linear-gradient(red, tan); 
  2.     屬性    :     屬性值                ; 

檢測(cè)屬性值是否支持,常見的思路是:賦給對(duì)應(yīng)屬性,然后看瀏覽器是否還保存著這個(gè)值。這個(gè)方法會(huì)改變?cè)貥邮?,因此可以用隱藏元素防止樣式因?yàn)闄z測(cè)被改變。

  1. var dummy = document.createElement('p'); 
  2. dummy.style.backgroundImage = 'linear-gradient(red, tan)'
  3.  
  4. if (dummy.style.backgroundImage) { 
  5.   root.classList.add('lineargradients'); 
  6. else { 
  7.   root.classList.add('no-lineargradients'); 

封裝函數(shù)如下:

  1. function testValue(id, value, property) { 
  2.   var dummy = document.createElement('p'); 
  3.   dummy.style[property] = value; 
  4.  
  5.   if (dummy.style[property])  // 屬性值被瀏覽器保留 
  6.   { 
  7.     root.classList.add(id); 
  8.     return true
  9.   } 
  10.    
  11.   root.classList.add('no-' + id); 
  12.   return false

 

責(zé)任編輯:姜華 來源: Piper蛋窩
相關(guān)推薦

2012-06-27 14:12:45

CSS

2016-09-18 20:48:21

蘋果safari瀏覽器

2010-08-20 13:46:10

IEFirefoxCSS

2010-09-16 13:48:15

CSS Hack

2010-04-01 13:03:10

2022-04-07 09:00:00

跨瀏覽器測(cè)試自動(dòng)化服務(wù)異常

2015-06-12 10:08:18

QQ瀏覽器9.0

2022-07-07 08:43:05

HoudiniAPICSS

2010-09-08 11:11:50

CSS樣式CSS

2010-09-14 13:32:33

CSS編碼準(zhǔn)則

2009-11-27 09:05:19

Windows 7Chrome兼容性

2009-11-26 11:00:28

Chrome瀏覽器Windows 7

2010-08-10 09:40:23

Flex與瀏覽器交互

2010-09-15 09:12:03

JavaScript瀏覽器兼容

2010-08-30 15:40:31

CSS瀏覽器兼容

2021-05-12 22:07:43

并發(fā)編排任務(wù)

2009-09-03 18:09:29

谷歌Chrome瀏覽器

2020-07-07 07:33:12

Java單元集成

2010-08-27 15:44:47

2010-09-08 09:19:49

DIVCSS
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)