PC端、移動端的頁面適配及兼容處理


轉自

 

一、關於移動端兼容性

     目前針對跨終端的方案,主要分為兩大陣營:一套資源Vs兩套資源。

  第一種是通過響應式或頁面終端判斷去實現一套資源適配所有終端;

  第二種是通過終端判斷分別調取兩套資源以適配所有終端。

  這兩種思路我們並不能斬釘截鐵的說哪一個更優選,正所謂”合適的才是最好的”。

  思路一:通過響應式或頁面終端判斷去實現一套資源適配所有終端

  優勢:只需維護一套資源,維護成本較低。

  劣勢:需加載適配各個終端的各個資源,在不同終端通過響應式布局實現不同展現,部分交互效果需要在頁面中做終端判斷,代價較大,若圖片資源為一套,部分圖片在超高分辨率設備(例如iphone系列)下會失真,且在非wifi情況下即使加了延時加載也易出現加載慢的情況。

  技術選型:jquery(或原生js等)+ 響應式 + 前端模塊加載器(seajs或RequireJS等)+ css預處理器(sass 或less等)。jquery較好的兼容性配合響應式可相對代價較小地實現跨終端。前端模塊加載器主要負責按需加載,以提高頁面加載速度,css預處理器 的變量、運算、嵌套等特性可大大提高手動計算響應式的效率,媽媽再也不用擔心我把比例算錯了。當然后兩者可參考需求及成本決定是否采用。

  思路二:通過終端判斷分別調取兩套資源以適配所有終端

  優勢:可根據不同端做個性設計及個性化信息推送且可按需加載,如移動端可配合重力感應、不同手勢做各種炫酷拽效果,pc頁面可不受流量限制做適合pc端的效果。

  劣勢:需維護兩套資源,維護成本增加。

  技術選型:zepto(或xui等移動端輕量級框架)+ 響應式 + 前端模塊加載器 + css預處理器 + 終端適配。zepto作為jquery的移動端版本,依然延續其自身優勢,大幅優化了移動端API且摒棄了兼容”非現代瀏覽器”的冗余代碼,成為移動端輕 便可用的js框架代表,對於習慣了jquery的同學來說簡直是不二之選!

  終端適配目前一般通過ua判斷來實現。ua判斷可放在服務端也可放在頁面中,在代理服務器中做跳轉更快、更准確且不走應用程序層,即使瀏覽器禁用了js依然可以跳轉到相應的地址,同時秉承着公共服務放在服務端這樣的雲端服務理念,我們選擇了通過代理服務器做終端適配。

User-Agent嗅探,即Web瀏覽器發送一個Web頁面或資源請求時,會發送一個User-Agent首部作為HTTP請求的一部分,那么我們就可以在服務器端獲取想要的信息,進而判斷並引導用戶到達相應的頁面地址。

 

二、pc上的網站在移動端上怎么辦?

  如果把移動端的可視區域(320-768)的話,大部分網站都會因為太窄而顯示錯亂;所以瀏覽器默認把viewport設置為一個較寬的值 980px或1024px,至少保證PC網站在移動端上可以顯示,只不過出現了橫向滾動條而已。

(一)幾個概念

  1.css像素

  • html中度量的單位 用px來計算,在pc中往往 1 css px = 1 物理像素
  • css像素時抽象和相對的了,在不同設備中1px對應不同的設備像素;iphone3分辨率是320*480 即 css 1px = 1個物理像素;iphone4 分辨率640x960但屏幕尺寸沒有改變,意味着同一塊區域像素多了1倍 即 css 1px =2個物理像素;

  2.物理像素

  • 表示每英寸所擁有的像素數目,數值越高,代表屏幕能夠以更高的密度來顯示圖像

  3.分辨率

  • 顯示器所能顯示的像素多少,顯示器可以顯示的像素越多,畫面就越精細,同樣的屏幕區域能顯示的信息就越多

   4.devicePixelRatio

  • window.devicePixelRadio = 物理像素/css像素 在iphone4中devicePixelRatio=2 也就是1css像素=2個物理像素
  • devicePixelRatio在不同瀏覽器中存在一些兼容性問題,並不是完全可靠的

    5.layout viewport

  • 移動設備的默認viewport,css布局是以layout viewport 來做為參考系計算的
  • document.documenElement.clientWidth 獲取
  • 該尺寸時動態設置

    6.visual viewport

  • 代表瀏覽器窗口的尺寸,當用戶放大瀏覽器時這個尺寸就會變小
  • window.innerWidth 獲取

    7.ideal viewport

  • 屏幕尺寸 設備屏幕的尺寸 單位是物理像素
  • screen.width 獲取 屏幕尺寸是不變的
  • 在該viewport中用戶不需要縮放和橫向滾動就可以正常查看網站的所有內容
  • 設置移動端網站一般以這個viewport為准,ideal viewport 的寬度等於設備屏幕寬度,使得無論在什么分辨率下,那些針對ideal viewport設計的網站都可以完美的呈現給用戶。

(二)如何實現屏幕適配

  需要用到

1  <meta name="viewport" content="width=device-width">

  meta viewport 中有6個通用屬性:

  • width 設置layout viewport的寬度 正整數或字符串 'width-device'
  • initial-scale 設置頁面的初始縮放值,數字或小數
  • minimum-scale 允許用戶的最小縮放值 數字或小數
  • maximum-scale 允許用戶的最大縮放值 數字或小數
  • height 設置layout viewport 的高度,這個屬性很少用到
  • user-scaleabel 是否允許用戶進行縮放 'no'或‘yes’ 還有2個需要特別注意的兩個屬性
  • target-densitydpi 在andriod 4.0一下的設備中,不支持設置viewport的width,android 自帶瀏覽器支持設置 target-densitydpi來達到目的;

    target-densitydpi = UI-width/device-width*window.devicePixelRation*160
    //UI-width: 布局寬度
    //device-width:屏幕分辨率寬度 iphone4為640
    //target-densitydpi=device-dpi 標示使用設備本身物理屏幕的像素,不會發生默認縮放
  • miniual-ui ios的safari為meta表天新增的屬性,在網頁加載是隱藏頂部的地址欄和底部的導航欄

  (三)相關代碼講解

復制代碼
//移動頁面設計 480*854的比例 
//dpi = 480/screen.width*window.devicePixelRatio*160;
//scalevalue = screen.width/480;
//控制適配 分為5種組合

/* width + target-densitydpi(計算出來的) */
<meta name="viewport" content="width=480,target-densitydpi=dpi,minimal-ui">

/* width */
<meta name="viewport" content="width=480,minimal-ui">

/* width+target-densitydpi=device-dpi */
<meta name="viewport" content="width=480,targrt-densitydip=device-dip,minimal-ui">

/* width+initial-scale */
<meta name="viewport" content="width=480,initial-scale=scalevalue,maximum-scale=scalevalue,minimum-scale=scalevalue,minimal-ui">

/* targrt-densitydpi */
<meta name="viewport" content="targrt-densitydpi=dpi,minimal-ui">

//通過順序設置5次來實現適配 直到
Math.abs(window.innerWidth-480)<=10 表示viewport設置正確了。
復制代碼

(四)橫豎屏

js代碼控制

window.addEventListener("orientationchange",function () {
        This.isOrietation = true;
        This.changeOriention();
    });
//建議執行橫豎屏的事件都通過一個偵聽完成,做一個統一的管理;在屏幕橫豎屏切換完成之后再執行相應的事件

css控制

復制代碼
//定義橫屏顯示的樣式
@media screen and(orientation:landspace){...}
//定義豎屏顯示的樣式
@media screen and(orientation:portrait){...}
//某個尺寸的特殊樣式 豎屏時寬度為768px 符合一般ipad的條件
@media only screen and(orientation:portrait) and(device-width:768px){...}
復制代碼

 

 

參考:http://www.uisdc.com/mobile-compatibility-analysis

        http://www.ituring.com.cn/article/130015


免責聲明!

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



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