日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

Web前端如何快速的兼容手机

發布時間:2024/3/13 HTML 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web前端如何快速的兼容手机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如何快速的做到手機端的頁面兼容


? ?為什么要寫這篇文章

  • 前段時間做了一個項目,客戶要求最低兼容Iphone5S
  • 在線上運營的項目,客戶總是提出兼容很差的問題,之前一直拖著,不曾解決,現在統計處理一下
  • ? ?學習重點

    ? ? ?lib-flexible插件

    ?正文


    ? 前端兼容的痛點

    ? ? ? 在實際項目開發過程中,作為前段經驗并不豐富的后端開發人員,總是會在UI上栽跟頭。手機中實際展示效果總是跟模擬器中的展示效果差之千里。

    ?

    舉個例子,左邊,為我在chrome瀏覽器中調試的頁面,右側為IPhone5s打開之后的頁面效果。

    這樣的頁面,別說客戶無法忍受,如果這個頁面不是我寫的,我必然會找到那個始作俑者,把這個頁面的截圖狠狠的甩到她臉上,問她,你是怎么做的?這樣的頁面讓客戶怎么看,這樣的按鈕,讓用戶怎么點,難道想點個累計掃碼,一不小心手指稍稍偏了一點兒,頁面就關閉了?

    作為一個還算合格的后端開發人員。

    我保證,我確信,我真的已經努力做了兼容,所有高度都是動態分配,包括頁面高度,都由Js根據屏幕可見高度努力算出來,可為什么呈現給用戶的效果還會是這樣?這樣的慘不忍睹。

    代碼可以分享給大家:

    //獲取屏幕的高度var screenHeight = window.screen.availHeight;//獎項Div距離頂部的高度,為頁面總高度的4.5分之一$(self._contentPrize).css("margin-top", screenHeight / 4.5);//初始化紅包彈出框//紅包Div距離頂部的高度為自己高度的20%$("#redPackageContent").css("padding-top", $("#redPackageContent").height() * 0.20);//紅包金額的Div顯示距離頂部為紅包頁面高度的15%$("#redPackageInfo").css("padding-top", $("#redPackageContent").height() * 0.15);//紅包頁面底部的按鈕Padding紅包頁面的高度為紅包頁面高度的20%$("#redPackagebutton").css("padding-top", $("#redPackageContent").height() * 0.20);

    這段代碼是試出來的最佳高度,可能沒有任何邏輯可言。在一塌糊涂的UI面前,程序員的邏輯已被擊潰。

    剛開始我以為是微信瀏覽器自帶底部導航欄的問題,但,將導航欄的底部高度減去之后,依然無法做到兼容。就算做到兼容主流手機,依然無法保證做到全兼容。

    ?主流手機的分辨率

    ? ? ? ?蘋果手機:

    手機型號手機尺寸分辨率
    iPhone 4S3.5寸960 × 640
    iPhone 5(5S/5C)4.0寸1136 x 640
    iPhone 64.7寸1334 x 750
    iPhone 6 Plus5.5寸2208 x 1242 (1920x1080)
    iPhone 6S4.7寸1334 x 750
    iPhone 6S Plus5.5寸2208 x 1242 (1920x1080)
    iPhone SE4寸1136 x 640
    iPhone 74.7寸1334 x 750
    iPhone 7 Plus5.5寸2208 x 1242 (1920x1080)
    iPhone 84.7寸1334 x 750
    iPhone 8 Plus5.5寸2208 x 1242 (1920x1080)
    iPhone X5.8寸2436 × 1125

    ? ? ? ?華為手機:

    華為P30Pro6.47寸2340×1080
    華為 Mate 206.53寸2244×1080
    華為暢享9 PLUS6.5寸2340×1080
    華為 Mate 20 Pro6.39寸3120x1440
    華為P306.1寸2340×1080
    華為Nova 46.4寸2310 x 1080?
    華為Nova 4e6.15寸2312×1080
    華為Nova 56.39寸2340x1080
    華為 Mate 20 X7.2寸2244x1080
    華為麥芒 86.21寸2340x1080
    華為 Mate 20 RS?6.39寸3120x1440
    華為暢享9S6.21寸2340x1080
    華為暢享96.26寸1520x720
    華為 P20 Pro6.1寸2240x1080
    華為 nova 5i6.4寸2310×1080
    華為暢享 9e6.09寸1560x720
    華為 P205.8寸2244×1080
    華為 暢享 MAX7.12寸2244×1080
    華為 nova 3i6.3寸2340×1080
    華為?nova 36.3寸2340 x 1080
    華為 mate 10 pro6.0寸2160x 1080
    華為 nova 2s6.0寸2160x1080
    華為 暢享8e5.7寸1440*720
    華為 麥芒76.3寸2340 x 1080
    華為 nova 2 Plus5.5寸1920x 1080
    華為 暢享8 Plus5.93寸2160x 1080
    華為 nova 青春版5.2寸1920x 1080
    華為 nova 3e5.84寸2280x1080
    華為 Mate 95.9寸1920x1080
    華為 暢享7 Plus5.5寸1280x720
    華為 P105.1寸1920x1080
    華為 麥芒65.9寸2160x1080
    華為 P10 Plus5.5寸2560 x 1440
    華為 暢享 8e 青春5.45寸1440x72

    ?lib-flexible插件

    ? ?為徹底解決兼容的問題,在眾多兼容插件中找到了最適合自己的lib-flexible插件,該插件主要使用rem進行布局。

  • 前期準備工作
  • 插件原理
  • ? ?前期準備工作


    ? ?在使用該插件前,我們只需要做兩件事情,

    ? ?第一,下載?lib-flexible.js文件并引用至我們的項目當中。

    ? ?第二,設置viewport,設置代碼如下:

    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

    ? ? ? ? 這樣設置的目的在于網頁在設備內的頁面寬度就會等于邏輯設備像素大小。

    ?第三,在body中添加如下設置:

    <body ontouchstart></body>

    插件原理


    ? ?lib-flexible插件是基于設備的寬度的像素為基礎像素,也就是device-width。在插件中,統一認為設備的寬度為10rem。再根據該設備的寬度像素,計算出1rem所占像素。

    ?device-width的計算公式為:

    設備的物理分辨率/(devicePixelRatio * scale),在scale為1的情況下,device-width = 設備的物理分辨率/devicePixelRatio?

    devicePixelRatio稱為設備像素比,每款設備的devicePixelRatio都是已知,并且不變的,目前高清屏,普遍都是2,不過還有更高的,比如2.5, 3 等,魅族note的手機的devicePixelRatio就是3。淘寶觸屏版布局的前提就是viewport的scale根據devicePixelRatio動態設置。

    這么做目的當然是為了保證頁面的大小與設計稿保持一致了,比如設計稿如果是750的橫向分辨率,那么實際頁面的device-width,以iphone6來說,也等于750,這樣的話設計稿上標注的尺寸只要除以某一個值就能夠轉換為rem了。通過js設置viewport的方法如下。

    var scale = 1 / devicePixelRatio; document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');

    lib-flexible布局的第二個要點,就是html元素的font-size的計算公式,font-size = deviceWidth / 10:

    接下來要解決的問題是,元素的尺寸該如何計算,比如說設計稿上某一個元素的寬為150px,換算成rem應該怎么算呢?這個值等于設計稿標注尺寸/該設計稿對應的html的font-size。拿淘寶來說的,他們用的設計稿是750的,所以html的font-size就是75,如果某個元素時150px的寬,換算成rem就是150 / 75 = 2rem。總結下淘寶的這些做法:

  • 動態設置viewport的scale var scale = 1 / devicePixelRatio; document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
  • 動態計算html的font-size document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
  • 布局的時候,各元素的css尺寸=設計稿標注尺寸/設計稿橫向分辨率/10
  • font-size可能需要額外的媒介查詢,并且font-size不使用rem。
  • ?最后。lib-flexible設置了一個臨界點,當設備豎著時橫向物理分辨率大于1080時,html的font-size就不會再變化。

    總結

    以上是生活随笔為你收集整理的Web前端如何快速的兼容手机的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。