美文网首页
响应式开发最佳实践(viewport+rem)

响应式开发最佳实践(viewport+rem)

作者: One_Hund | 来源:发表于2018-08-29 21:45 被阅读0次

一、CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport

参考链接:https://github.com/jawil/blog/issues/21

要点归纳
  • DPR = 设备像素/CSS像素
  • viewport的值取widthinitial-scale的最大值
  • viewport只是改变document.documentElement.clientWidthwindow.innerWidth
  • 为了防止有滚动条,禁止缩放:
<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0, user-scalable=no">

二、响应式开发最佳实践(参考淘宝响应式)

参考链接: http://www.cnblogs.com/lyzg/p/4877277.html

响应式开发最佳实践原理分析:
  • 在实际项目中,把与元素尺寸有关的css,如width,height,line-height,margin,padding等都以rem作为单位,这样页面在不同设备下就能保持一致的网页布局。
  • font-size用媒体查询改变px,不能设为rem。
  • 网易响应式:只修改font-size
  • 淘宝响应式:即修改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(){
    // 淘宝响应式多写了下面这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'); 
    // 淘宝+网易响应式都需要的修改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>
  • 网易响应式(只修改font-size):
  • 淘宝响应式(既修改font-size,又修改viewport):

由此可见:两者最终视觉上的宽高是一致的,但同样视觉宽高,淘宝做法显示更多的像素点,所以将会更加高清,效果更好,推荐使用。

  • 技术要点:
<script>
    document.addEventListener("DOMContentLoaded",function(){
    // 淘宝做法多写了下面这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'); 
    // 通用做法(淘宝+网易都需要),修改font-size
        document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
    },false)
</script>
  • 修改viewport的时候,即使屏幕变宽(从375px-->750px),但因为font-size也跟着变大同样的倍数(从37.5-->75px),所以用rem做单位的元素,宽高在视觉上没有变化。
  • 淘宝响应式,先将页面的宽高根据DPR,由CSS像素(375px)还原成设备像素(750px),再由此时的clientWidth(750px)按照相对值设置font-size,再由rem设置相对尺寸,这样根据750px设计稿便可轻松设计出设配不同像素的手机了
  • 若rem计算不方便,可设置font-size=cilentWidth/7.5=100px,如此便可方便换算了

附、Domready使用“DOMContentLoaded”事件监听


参考链接:https://developer.mozilla.org/zh-CN/docs/Web/Events/DOMContentLoaded
参考链接:https://www.jianshu.com/p/88b9d3874749

相关文章

  • 响应式开发最佳实践(viewport+rem)

    一、CSS像素、物理像素、逻辑像素、设备像素比、PPI、Viewport 参考链接:https://github....

  • 20 个最佳的极简 CSS 框架

    1.Spectre 这是一个轻量级、响应式的现代 CSS 框架,用于快速建站和扩展程序的开发。它通过最佳编码实践和...

  • 响应式架构最佳实践——MVI

    转载地址:https://xuyisheng.top/mvi/[https://xuyisheng.top/mvi...

  • js基础(6)

    27、移动端响应式布局开发 响应式布局开发 1、什么是响应式布局开发?把我们开发完成的产品,能够让其适配不同的设备...

  • 响应式布局---bootstrap框架

    移动端WEB开发之响应式布局 1.0 响应式开发原理 1.1 响应式开发原理 就是使用媒体查询针对不同宽度的设备进...

  • “一套代码,三屏齐发”——响应式开发浅析

    响应式开发 响应式是什么? 它能帮我们做些什么? 我们该怎么应用?它能达到什么效果?工作之余,通过响应式开发,我梳...

  • Reactor 3-响应式编程-冷序列与热序列

    如何使用响应式编程(一) 该篇主要是针对于响应式编程的实践,在一些实际的开发当中,利用具体的例子和应用场景,来加深...

  • Android周报第十七期

    1)Android开发最佳实践 注意对隐式Intent的运行时检查保护 Intent intent = new I...

  • 响应式开发

    响应式开发 响应式网站设计 -----Ethan Marcotte 第一章 响应式网站设计的三大技术成分 流动网格...

  • Angular表单验证

    angular4里一个响应式编程的小例子 Angular2 响应式表单验证 Angular开发(十一)-关于响应式...

网友评论

      本文标题:响应式开发最佳实践(viewport+rem)

      本文链接:https://www.haomeiwen.com/subject/ccclwftx.html