【原】迎接微信winphone 5.0 版本的IE10樣式兼容


微信 Android 5.1 和 iPhone 5.1 已正式發布了,據說本12月底,微信將推出 Winphone 5.0版本,全面支持微信支付,它綁定 IE10 瀏覽器,那么做微信公眾號的 H5 頁面,除了做好 webkit 兼容外,IE10 的兼容也是必不可少的。

曾經寫過《常見CSS3屬性對ios&android&winphone的支持》一文,當時寫過對Windows Phone 7 和Windows Phone 8的對應的瀏覽器分別是IE9和IE10做好兼容,但由於產品的特性對 Winphone 支持不友好,項目組也沒有對 IE9 和 IE10 進行特別的處理,現在微信支付的到了讓我們重新開啟了對它重視,即便現在 Winphone 8 只有少部分用戶~

對Windows Phone 8 IE10 的測試,如果沒有winphone 8 的手機,在電腦win8系統上也是可以測試的,打開IE10,按 F12 或菜單工具->F12 開發者工具,點擊工具->更改用戶代理字符串(UA String),然后點擊 IE10 for Windows Phone 8,可模擬Windows Phone 8版IE10。

 

通過排查做過的微信公眾號H5頁面在IE10下的展現,發現了不少問題,總結下主要有3個:

1.只添加了-webkit 前綴的樣式並未添加向前兼容的寫法,在IE10下頁面無CSS3樣式特效

錯誤寫法:

正確寫法:

2.彈性布局(display:box 或者 display:flex),在IE10下頁面錯亂

錯誤展現:

正確展現:

3.不支持webkit私有樣式,如-webkit-appearance、-webkit-box-reflect等,在IE10下頁面無webkit樣式特效

錯誤展現:

正確展現:

對上面提到的3個問題,這里給出一套方案,經過測試后兼容 Winphone IE10、Android2.1+、Ios3.2+ 系統

1.向前兼容的寫法

做到向前兼容,代碼中除了帶有瀏覽器廠商前綴外的樣式,還需要添加W3c標准的寫法,這里整理了常見css3屬性,其中 WP IE 10 是為IE10准備的,代碼如下:

/* 圓角邊框 */
.border-radius {
  -webkit-border-radius: 12px; /* android 2.1, ios 3.2 */
          border-radius: 12px; /* android 2.2+, ios 4.0+, WP IE 10 */
}
/* 投影 */
.box_shadow {
  -webkit-box-shadow: 0px 0px 4px 0px #FFFFFF; /* android 2.1-3.0, ios 4.0.2-4.3 */
          box-shadow: 0px 0px 4px 0px #FFFFFF; /* android 4.0+, ios 5+, WP IE 10 */
}
/* 背景尺寸 */
.background-size{
  -webkit-background-size: 100% 100%; /* android 2.1-2.3, ios 3.2 */
          background-size: 100% 100%; /* android 3.0+, ios 4.0+, WP IE 10 */
}
/* 邊框盒 */
box-sizing{
  -webkit-box-sizing: border-box; /* android 2.1-3.0, ios 3.2-4.3 */
          box-sizing: border-box; /* android 4.0+, ios 5.0+, WP IE 10 */
}
/* 線性漸變 */
.linear-gradient{
  background-color: #444444;/* 由於部分android機器對該屬性的渲染效果不友好,可能會出現無顏色漸變,使用時注意添加背景顏色(background-color) */
  background-image: -webkit-gradient(linear, left top, left bottom, from(#444444), to(#999999)); /* 老版本寫法 Android 2.1-4.3 ios3.2-6.1 */
  background-image: -webkit-linear-gradient(top, #444444, #999999); /* 新版本寫法 Android 4.0+ iOS 5+ */
  background-image: linear-gradient(to bottom, #444444, #999999); /* Android 4.4, ios 7.0, WP IE 10 */
}
/* 旋轉 */
.rotate {
  -webkit-transform: rotate(7.5deg);  /* android 2.1+, ios 3.2+ */
          transform: rotate(7.5deg);  /* WP IE 10 */
}

2.兼容 webkit 和 IE10 的彈性布局

彈性布局出現以來,幾行簡單的代碼讓網頁布局變得非常靈活,對此微軟也不甘落后,2012年8月,Internet Explorer 10 引入了對 W3C CSS 彈性框(“Flexbox”)布局模塊的支持,

打開 Internet Explorer 10 開發人員指南 ,找到css欄目中的 彈性框 ("Flexbox") 布局 ,對 IE10 彈性布局進行了詳細的介紹:

 

可以看出 IE10 的樣式寫法與 display:flex 不一樣,且是帶有供應商前綴(-ms-),不過這已經不成問題,因為彈性布局在 IE10 中我們可以放心使用啦,那么,結合舊版彈性布局display:box 、新版彈性布局 display:flex 、IE10彈性布局 display: -ms-flexbox ,最終得到的彈性布局樣式如下:

.flex{
    /* 設置彈性布局 */
    display:-webkit-box;/* android 2.1-3.0, ios 3.2-4.3 */
    display:-webkit-flex;/* Chrome 21+ */
    display:-ms-flexbox;/* WP IE 10 */
    display:flex;/* android 4.4 */
}
.flex-direction-column{
    /* 設置彈性布局的方向,子元素按照在源文檔中聲明的順序從上到下顯示 */
    -webkit-box-orient: vertical;/* android 2.1-3.0, ios 3.2-4.3 */
    -webkit-flex-direction: column;/* Chrome 21+ */
    -ms-flex-direction: column;/* WP IE 10 */
    flex-direction: column;/* android 4.4 */
}
.flex-1{
   /* 子元素自動占據剩余的空間 */
    -webkit-box-flex:1;/* android 2.1-3.0, ios 3.2-4.3 */
    -webkit-flex:1;/* Chrome 21+ */
    -ms-flex:1;/* WP IE 10 */
    flex:1;/* android 4.4 */
}
.flex-pack-center{
    /* 水平布局下的子元素 水平居中 */
    -webkit-box-pack: center;/* android 2.1-3.0, ios 3.2-4.3 */
    -webkit-justify-content: center;/* Chrome 21+ */
    -ms-flex-pack: center;/* WP IE 10 */
    justify-content: center;/* android 4.4 */
}
.flex-align-center{
    /* 水平布局下的子元素 垂直居中 */
    -webkit-box-align: center;/* android 2.1-3.0, ios 3.2-4.3 */
    -webkit-align-items: center;/* Chrome 21+ */
    -ms-flex-align: center;/* WP IE 10 */
    align-items: center;/* android 4.4 */
}
.flex-pack-justify{
    /* 水平布局下的子元素 2端對齊 */
    -webkit-box-pack: justify;/* android 2.1-3.0, ios 3.2-4.3 */
    -webkit-justify-content: space-between;/* Chrome 21+ */
    -ms-flex-pack: justify;/* WP IE 10 */
    justify-content: space-between;/* android 4.4 */
}

強烈建議移動前端開發的同學加強對這塊的學習,因為簡單實用,這里推薦幾個彈性布局的學習網址:

flexyboxes

“老”的Flexbox和“新”的Flexbox

跨瀏覽器的Flexbox

3.使用 IE10 hack 的兼容方案

由於 webkit 瀏覽器有不少私有屬性,如 -webkit-appearance、-webkit-box-reflect 等,IE10 目前還有類似的寫法來支持,那么,我們可使用 IE10 hack 來做好兼容,保證頁面結構和功能正常的前提,做好差異化體驗~

/* 媒體查詢方法一 -ms-high-contrast 是IE10的私有屬性,結合媒體查詢,可以使用它來做 IE10的兼容*/
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {  
   /* 這里寫入IE10的樣式 */  
}
/* 媒體查詢方法二 該方案兼容IE9和IE10*/
@media screen and (min-width:0\0) {  
    /* 這里寫入IE10的樣式  */  
}

 更多 IE10 hack 的兼容方案請見:http://www.cnblogs.com/PeunZhang/archive/2012/12/13/2815914.html

 

此文章作為迎接微信 winphone 5.0 版本做的准備,winphone 版的微信跟 ios、android 版的微信存在很多不同體驗,而當它正式發布后,可能還有更多的問題需要關注,像分享到朋友圈、頂部和底部返回導航等,原生界面的布局都不同,那么對交互設計、視覺設計產出的設計稿也可能存在差異化的體驗,這也是對前端的響應式設計提出更高要求,讓我們拭目以待。

最后提前祝大家元旦快樂~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM