成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何優雅地實現瀏覽器兼容與CSS規則回退

開發 前端
本文就是探討如何優雅地應對瀏覽器兼容問題,包括四點:層疊機制來支持較早的瀏覽器,Modernizr設置輔助類來分別編寫樣式,使用 @supports 規則回退,簡短的 JavaScript 代碼實現回退。

[[409677]]

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

提供瀏覽器兼容的網站

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

層疊機制來支持較早的瀏覽器

  1. /* 防止 linear-gradient 在老瀏覽器中掛掉導致沒有背景 */ 
  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. /* 應該將標準語法放在最后,來確保最終生效的是是標準語法 */ 
  7. background: linear-gradient(90deg, yellow, red); 

Modernizr設置輔助類來分別編寫樣式

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

Modernizr 官網:https://modernizr.com/

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

因此,前端開發人員就可以設置兩套代碼,來應對瀏覽器提供或者不提供 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 規則回退

除了使用 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 的瀏覽器中才會生效。因此慎用 @supports 。

簡短的 JavaScript 代碼實現回退

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

  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'

如上,我們為 html 添加了輔助類:

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

上述代碼可以被封裝為函數:

  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

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

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

檢測屬性值是否支持,常見的思路是:賦給對應屬性,然后看瀏覽器是否還保存著這個值。這個方法會改變元素樣式,因此可以用隱藏元素防止樣式因為檢測被改變。

  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'); 

封裝函數如下:

  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

 

責任編輯:姜華 來源: Piper蛋窩
相關推薦

2016-09-18 20:48:21

蘋果safari瀏覽器

2012-06-27 14:12:45

CSS

2010-08-20 13:46:10

IEFirefoxCSS

2010-04-01 13:03:10

2010-09-16 13:48:15

CSS Hack

2022-04-07 09:00:00

跨瀏覽器測試自動化服務異常

2022-07-07 08:43:05

HoudiniAPICSS

2015-06-12 10:08:18

QQ瀏覽器9.0

2010-09-14 13:32:33

CSS編碼準則

2010-09-08 11:11:50

CSS樣式CSS

2009-11-27 09:05:19

Windows 7Chrome兼容性

2009-11-26 11:00:28

Chrome瀏覽器Windows 7

2010-09-15 09:12:03

JavaScript瀏覽器兼容

2010-08-10 09:40:23

Flex與瀏覽器交互

2010-08-30 15:40:31

CSS瀏覽器兼容

2009-09-03 18:09:29

谷歌Chrome瀏覽器

2021-05-12 22:07:43

并發編排任務

2010-08-27 15:44:47

2010-09-08 09:19:49

DIVCSS

2020-07-07 07:33:12

Java單元集成
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品一区 | 亚洲夜夜爽 | www.日本精品 | 亚洲精品免费视频 | 久久久久久久一区二区三区 | 色爱区综合 | 亚洲三级av| 成人福利视频网站 | 欧美九九 | 国产高清性xxxxxxxx | 日本不卡一区二区 | 欧美日韩久久精品 | 中文字幕av亚洲精品一部二部 | 久在线观看| 国内精品久久精品 | 一区影院| 国产成人在线播放 | 2018天天干天天操 | 欧美日韩精品在线一区 | 日本成人中文字幕在线观看 | 免费国产视频在线观看 | 天天草视频 | 91精品国产综合久久久久蜜臀 | 欧美激情一区二区三区 | 波多野结衣电影一区 | 国产免费视频 | 精品久久久久久一区二区 | 日韩视频中文字幕 | 99日韩 | 国产乱码精品一品二品 | 欧美福利视频 | 色花av| 久久久福利 | 久久一区| 精品久久久久久亚洲综合网 | 国产视频线观看永久免费 | 久久综合久色欧美综合狠狠 | 日韩中文在线观看 | 亚洲精品一区二区在线观看 | 久久久一区二区 | 久热国产在线 |