zoukankan      html  css  js  c++  java
  • 一篇真正教会你开发移动端页面的文章(二)

    一篇真正教会你开发移动端页面的文章(二)

    psd图:
    现在移动端的设计图一般以iphone5(640px)和iphone6(750px)为准,ps左下角放大到100%,看宽度是多少,就是以多少为准。本篇以iphone6(750px为准),其它尺寸道理一样。psd原稿按照设备像素来设计的。

    iphone5理想视口像素:320*568
    iphone5的设备像素是:640*1136;
    dpr=2

    iphone6理想视口像素:375*667
    iphone6的设备像素是:750*1334;
    dpr=2

    dpr=设备像素个数/理想css像素个数

    window的全局属性可以测试设备比:devicePixelRatio

    web开发基于布局视口,现在将布局视口的宽设置为理想视口的宽,width=device-width,
    所以现在你眼里的屏幕宽度对应的css像素是375*667;


    实例一:
    第一步
    你测量了psd上一个正方形:200px*200px
    你在代码写上了200*200px,打开浏览器一看,傻眼了,比例明显不对。

    原因:psd原稿尺寸是按照设备像素来设计的,我们按照phone6的尺寸,所以设计稿的尺寸是iphone6的设备像素尺寸,是750*1334,而我们css中的样式是基于布局视口计算的,由于页面写上了标签
    <mata name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable="no"/>
    width=device-width这段代码是让布局视口等于理想视口,最终导致:布局视口是375*667px,
    你写的200*200是基于750*1334,
    而你的css对应屏幕的是375*667;
    所以不对;
    解决:100px height:100px,就正常了

    第二部:
    根据上面,psd总宽750px,测元素宽200px,而我们真正做页面基于布局视口,布局视口是375px,正好是设计稿的一半,所以应该将测得尺寸除以2,于是修改代码:100px*100px,现在效果一样了
    但是,我们知道测得除以2,111除以2得55.5,计算机或手机没办法显示不到1像素的像素值,计算机或手机将自动补全为1,显示是56像素,这不是我们要的。

    写页面的时候已经将布局视口=理想视口了
    缩放比为1的dpr(devicePixelRatio)=设备/理想(屏宽css,开发者眼里的css)

    元素 设备像素
    问题:200*200 750*1334 设计稿

    元素css 理想视口屏宽
    100*100 375*667 iphone6
    100*100 x 414*736 7plus 比例又不一致了,所以不能直接除以2

    750/414=200/x x=200*(414/750) x=测*(设备理想视口宽/psd宽)

    所以:
    不同的手机,布局视口(现在也等于理想视口也等于屏宽)不一样,比例又不一致了,所以不能直接除以2。直接除以2不能在所有设备显示完好

    于是:如果 布局视口尺寸==设备像素尺寸,那么测得尺寸可以直接用于开发页面,其它的手机,只需要进行等比缩放就OK了
    如果:我们改变了理想视口尺寸的话,也就改变了布局视口尺寸,==>测得即写得;如何改变理想视口尺寸呢?如何让理想等于设备?
    解答:缩放是缩小或放大css的过程,以iphone6为例,由于iphone6的dpr是2,当缩放比是1,
    一个css像素尺寸对应2个设备像素尺寸,
    当将一个css像素缩小到原来一半,即原来的0.5倍,缩小倍数=设备像素比的倒数
    解决:scale=1/window.devicePixelRatio 设置scale动态,保证布局永远等于设备
    布局永远等于设备,就会出现测得即写得;
    200px height:200px

    第三步:iphone5与iphone6对比效果,由于iphone5与iphone6的设备像素不一致,ihpone6保持与设计图一致,而iphone5不一致。效果偏差
    解决:利用rem

    总结:
    第一种方法(所测即所得):
    1、将布局视口大小设为设备像素尺寸:
    var scale = 1 / window.devicePixelRatio;
    document.querySelector('meta[name="viewport"]').setAttribute('content','width=device-width,initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
    原理:scale=1/window.devicePixelRatio 设置scale动态,保证布局永远等于设备,所测及所写(再转rem)

    2、动态设置html字体大小:
    document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
    document.documentElement.clientWidth就是布局视口尺寸也是理想视口尺寸
    3、将设计图中的尺寸换算成rem

    元素的rem尺寸 = 元素的psd稿测量的像素尺寸 / 动态设置的html标签的font-size值


    第二种方法是(等比缩放):
    <mata name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable="no"/>
    1 已知psd尺寸,布局视口=理想视口,dpr=设备/理想,
    比如:假设我们以iPhone6设计图尺寸为标准,在设计图的尺寸下设置一个font-size值为100px。
    也就是说:750px宽的页面,我们设置100px的font-size值,那么页面的宽度换算为rem就等于 750 / 100 = 7.5rem。
    即:font-size=100px,1rem=100px,针对750px的设计图,7.5rem;
    那:font-size=clientWidth/7.5 1rem=clientWidth/7.5 ,针对布局视口clientWidth宽图, 7.5rem=clientWidth
    例子如:iphone5 clientWidth=320 1rem=320/7.5=42.666666667px     写得:测/100 rem
    例子如:iphone6 clientWidth=375 1rem=375/7.5=50px 2rem               写得:测/100 rem


    可以通过以下JavaScript代码获取布局视口的宽度和高度:
    document.documentElement.clientWidth
    document.documentElement.clientHeight

  • 相关阅读:
    敏捷开发 之 计划、测试 与 重构
    敏捷开发 之 理论概述篇
    第二十章 排查和调试Web程序 之 设计异常处理策略
    第十九章 排查和调试Web程序 之 防止和排查运行时问题
    第十八章 提升用户体验 之 减少带宽占用
    第十七章 提升用户体验 之 使用MVC扩展功能控制程序行为
    第十六章 提升用户体验 之 设计实现routes
    第十五章 提升用户体验 之 设计实现MVC controllers 和 actions
    第十四章 提升用户体验 之 设计实现国际化和本地化
    Nginx系统学习笔记(3)同一端口下设置Alias(虚拟目录)
  • 原文地址:https://www.cnblogs.com/wulinzi/p/8269926.html
Copyright © 2011-2022 走看看