響應(yīng)式開(kāi)發(fā)最佳實(shí)踐(viewport+rem)

一、CSS像素、物理像素、邏輯像素、設(shè)備像素比、PPI、Viewport

參考鏈接:https://github.com/jawil/blog/issues/21

要點(diǎn)歸納
  • DPR = 設(shè)備像素/CSS像素
  • viewport的值取widthinitial-scale的最大值
  • viewport只是改變document.documentElement.clientWidthwindow.innerWidth
  • 為了防止有滾動(dòng)條,禁止縮放:
<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0, user-scalable=no">


二、響應(yīng)式開(kāi)發(fā)最佳實(shí)踐(參考淘寶響應(yīng)式)

參考鏈接: http://www.cnblogs.com/lyzg/p/4877277.html

響應(yīng)式開(kāi)發(fā)最佳實(shí)踐原理分析:
  • 在實(shí)際項(xiàng)目中,把與元素尺寸有關(guān)的css,如width,height,line-height,margin,padding等都以rem作為單位,這樣頁(yè)面在不同設(shè)備下就能保持一致的網(wǎng)頁(yè)布局。
  • font-size用媒體查詢(xún)改變px,不能設(shè)為rem。
  • 網(wǎng)易響應(yīng)式:只修改font-size
  • 淘寶響應(yīng)式:即修改font-size,又修改viewport【看下面<script>的源碼】
  • 例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<script>
    document.addEventListener("DOMContentLoaded",function(){
    // 淘寶響應(yīng)式多寫(xiě)了下面這2句,修改viewport
    let scale = 1 / window.devicePixelRatio;
    document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no'); 
    // 淘寶+網(wǎng)易響應(yīng)式都需要的修改font-size
    document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
    },false)
</script>
<body>
    <div>
        <div style="
            background: pink;
            height: 2rem;
            width: 8rem;
        ">600px</div>
        <div style="
            background: lightblue;
            height: 2rem;
            width: 8rem;
        ">600px</div>
    </div>
</body>
</html>
  • 網(wǎng)易響應(yīng)式(只修改font-size):
  • 淘寶響應(yīng)式(既修改font-size,又修改viewport):

由此可見(jiàn):兩者最終視覺(jué)上的寬高是一致的,但同樣視覺(jué)寬高,淘寶做法顯示更多的像素點(diǎn),所以將會(huì)更加高清,效果更好,推薦使用。

  • 技術(shù)要點(diǎn):
<script>
    document.addEventListener("DOMContentLoaded",function(){
    // 淘寶做法多寫(xiě)了下面這2句,修改viewport
        let scale = 1 / window.devicePixelRatio;
        document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no'); 
    // 通用做法(淘寶+網(wǎng)易都需要),修改font-size
        document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
    },false)
</script>
  • 修改viewport的時(shí)候,即使屏幕變寬(從375px-->750px),但因?yàn)閒ont-size也跟著變大同樣的倍數(shù)(從37.5-->75px),所以用rem做單位的元素,寬高在視覺(jué)上沒(méi)有變化。
  • 淘寶響應(yīng)式,先將頁(yè)面的寬高根據(jù)DPR,由CSS像素(375px)還原成設(shè)備像素(750px),再由此時(shí)的clientWidth(750px)按照相對(duì)值設(shè)置font-size,再由rem設(shè)置相對(duì)尺寸,這樣根據(jù)750px設(shè)計(jì)稿便可輕松設(shè)計(jì)出設(shè)配不同像素的手機(jī)了
  • 若rem計(jì)算不方便,可設(shè)置font-size=cilentWidth/7.5=100px,如此便可方便換算了


附、Domready使用“DOMContentLoaded”事件監(jiān)聽(tīng)


參考鏈接:https://developer.mozilla.org/zh-CN/docs/Web/Events/DOMContentLoaded
參考鏈接:http://www.itdecent.cn/p/88b9d3874749

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,180評(píng)論 1 92
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,858評(píng)論 1 45
  • 偶然間發(fā)現(xiàn)這篇文章,可以說(shuō),這是我見(jiàn)到的對(duì)移動(dòng)rem單位做的最詳細(xì),最細(xì)心的一篇總結(jié)性文章,果斷轉(zhuǎn)載至本博客,以便...
    阿寶er閱讀 1,229評(píng)論 5 51
  • “春日遲遲,卉木萋萋。倉(cāng)庚喈喈,采蘩祁祁?!?都說(shuō)三月“千里鶯啼綠映紅”。 三月里鶯飛燕長(zhǎng),春風(fēng)散在空氣打轉(zhuǎn)著新抽...
    憶藍(lán)zing閱讀 1,089評(píng)論 0 0
  • 一、工作方面 1.盡力將一班的小伙伴們?nèi)考尤牒诵囊蝗海繕?biāo):最低完成30%) 2.合理安排好每天服務(wù)于時(shí)間管理學(xué)...
    謙謙Agoni閱讀 193評(píng)論 0 0

友情鏈接更多精彩內(nèi)容