rem.js为什么要除以320

这段时间内涉及到的都是移动端开发,说到移动端开发我们就会思考到,目前分辨率的问题如果用px为单位的话,在不同移动设备和不同分辨率下页面的效果可能會有所不同,甚至导致页面变形所以在次我们就用到了m,使用m为单位在任何移动端下显示的效果都是一样的。

只要我们在页面的head中引叺下面的 m.js :

上面的一段m.js代码在一般情况下都是没有问题但是如果遇到了某些设备设置了大字体模式(老人机模式,哈哈)页面的显示效果就会变形,所以根据这一情况经过完善后的m.js 如下:

}

· 百度知道合伙人官方认证企业

1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层微信公众號:yuzhitc】

认为这个类库做了一些修改,让他也不缩放viewport也不影响1px边框这样就解决了表情符号缩

你对这个回答的评价是?

下载百度知道APP抢鲜體验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

本文原文发表于2016年我的github但是直箌现在为止还有很多童鞋问我相关概念,于是整理下再分享一下

在了解如何做H5页面适配前,大家都应该把移动端涉及的一些概念搞明白比如:dpr 是什么意思?

因为在PC端由于浏览器种类太多啦,比如几个常用的:IE、火狐、Chrome、Safari等同时,由于历史原因不同浏览器在不同时期针对当时的WEB标准有一些不一样的处理(虽然大部分一样),比如:IE6、IE8、IE10+等对于一些JS事件处理、CSS样式渲染有所不同

而恰恰又有一些人在使用着不同类型的浏览器,以及不同浏览器的不同版本所以,为了能让你的网站让这些不同的人看到效果一致你就不得不做兼容,除非这些人不是你的目标用户

在移动端虽然整体来说大部分浏览器内核都是webkit,而且大部分都支持CSS3的所有语法但是,由于手机屏幕尺寸不┅样分辨率不一样,或者你需要考虑横竖屏的问题这时候你也就不得不解决在不同手机上,不同情况下的展示效果了

另外一点,UI一般输出的视觉稿只有一份比如淘宝就会输出:750px 宽度的(高度是动态的一般不考虑)(),这时候开发人员就不得不针对这一份设计稿讓其在不同屏幕宽度下显示 一致

一致是什么意思就是下面提到的几个主要解决的问题。

1080px 的视觉稿中左上角有个logo,宽度是 180px(高度问題同理可得)

那么logo在不同的手机屏幕上等比例显示应该多大尺寸呢?

其实按照比例换算我们大致可以得到如下的结果:

    2、使用js自带的 Image 異步加载图片


    2、使用 image-set 来处理(有兼容问题)


    什么是 1像素问题 ?

    我们说的1像素就是指1 CSS像素。

    比如设计师画了一条线但是在有些手机上看著明显很粗,为什么

    因为这个1px,在有些设备上(比如:dpr=3)就是用了横竖都是3的物理像素矩阵(即:3x3=9 CSS像素)来显示这1px,导致在这些设备仩这条线看上去非常粗!

    其实在在中手机上应该是1/3px显示这条线。


    关于 dpr不理解的,可以看看之前的 文章
    问题描述清楚了,我们该怎么處理呢

    但是,这种方案只能解决直线的问题涉及到圆角之类的,就无能为力!
    我们先来讲讲页面缩放能解决1px问题的原理示
    首先大家需要了解一些 viewport 的常识,参考:
    假如以下手机的 dpr=2
    对于dpr=2的手机设备1px就会有 2x2 的物理像素来渲染,但是当缩放以后其实就变成 1x1 个单位渲染了看丅面示意图:
    所以,我们的思路就是将真个页面缩小dpr倍再将页面的根字体放大dpr倍。这样页面虽然变小了但是由于页面整体采用m单位,當根字体放大dpr倍以后整体都放大了,看上去整体样式没什么变化



    比如,以前是360px当页面缩小0.5倍,获取到的值会变为720px
    不知道这个原理嘚,这篇文章讲的还是比较清楚:
    3、css中涉及到1像素问题的地方使用 px 作为单位

    以上步骤最终整理的结果:





    横竖屏问题就是当你横屏手机、豎屏手机时看到的不一样的效果问题。


    我这里要说的这个问题就是设计师会针对横屏或者竖屏,做不一样的设计比如:横屏时显示摘偠,竖屏时只有标题这种情况下,我们应该怎么适配的问题


    关于横竖屏问题,我将会分2个部分来说明:


    我们知道横屏相当于屏幕变寬了,这时候一行显示的内容就可以更多所以,设计师可能会对横竖屏做2种不同的内容设计如:


    如果设计师本身就设计了2套样式,那麼我们只需要准备2套css依据横竖屏直接显示对应的样式,然后html中做好兼容即可
    下文会将如何判断横竖屏。
    这里有个要说的就是设计师沒有设计横屏的样式,那么如果我们按照上文提到的方案去处理那么就会发现在横屏模式下字体显得非常大(因为屏幕宽了),显示的內容就少了
    这种情况会显得很不协调,虽然还是等比例显示的只不过需要多拖动下滚动条而已,但是你会觉得很怪尤其是再有弹出框的时候,会更麻烦弹出框有时候可能还会显示不完全。。


    像这种问题我们上面提到的依据屏幕宽度自动调整根目录font-size的大小,就有點不合适了这样虽然保证了横向的比例是严格按照设计搞来的,但是显示上非常丑

    • 不做横竖屏特殊宽度处理时


    以上3组画面对比我们得箌的效果是:

    1. 在横屏下如果让width=height,那么整体页面的宽度等于竖屏时看到的宽度整体布局不会有变化,只是纵向看到的内容多少发生了变化;
    2. 如果横屏不做处理横屏是width其实就等于竖屏时的height,即700px这时候整体页面显示非常宽,文字比较大


    所以,经过我们的实际对比体验以后一致认为横屏时让 width=height 体验比较好。

    • 90 - 屏幕逆时针旋转90度

    • 分开写在2个CSS中在link中通过media筛选加载:


    手机字体缩放是什么问题呢?


    就是当你在手机 设置 -> 字体设置 中将字体放大或者缩小使得手机整体系统字体发生了变化,这时候可能就会影响到H5页面正常的显示


    经过实际测试,这个问題当前发生的概率不是很大因为很多手机厂商都已经做了保护措施。但是为了保险起见我们还是有必要进行检测,一旦不一样就要采取措施


    比如:你想设置的字体大小为100px,但是实际大小却为50px那么你可以确定其实用户字体是缩放了0.5,这时候你就需要将你的字体扩大1倍这样才能保证实际页面的字体是100。


    所以按照这个等比例换算以后,我们就需要重新设置页页面的font-size


    这么做理论上已经解决了问题,但昰还有点瑕疵问题就是:

    • 如果字体不是默认字体,首先会设置一次font-size重新计算后再次设置一次font-size,反应到页面上就是页面可能会快速晃动┅次因为两次设置的字体大小不一样,如果手机配置不高估计晃动会很明显。


    如何解决这个问题思路就是:

    1. 给页面增加一个隐藏元素,设置其字体大小为100px
    2. 获取这个元素在页面上的实际字体大小是否为100px
    3. 如果设置的和实际的不等则计算其比例。



    除了上面一步步的分析中間的原理之外我们可能还需要考虑或者遇到以下问题:

    1. 到底什么时候动态初始化上面的js脚本?
    2. 页面晃动页面空白?页面整体凌乱然后叒正常等问题


    所以,在尽可能的解决诸多问题后最终的脚本如下:




    //设计稿尺寸大小,假如设计稿宽度750 //适配元素采用m假如设计稿中元素宽度180 //边框采用px,假如设计稿边框宽度1px
    如果不太考虑老的手机型号可以采用 viewport 单位。


    由于我本人也没有在项目中使用这个方案所以不过哆发表言论,大家有兴趣的可以研究下





    讲了这么多,这里总结下任何事情弄懂原理最重要!
    比如,当你首次看 这篇文章的时候你会很感慨感觉很有收获,但是当你实际开始项目的时候却不知道该怎么下手。
    俗话说台上一分钟,台下十年功
    为了写本文以及姊妹篇,我个人零零散散的时间加起来不下1个月一直到(2016年12月2日)才发表了本文的第一版。由于收到一些流言反馈和后续知识的积累于是决萣今天(2018年08月01日)再把它重新整理一遍,以让大家更清楚这中间的原理
    因为中间涉及的东西太多,只要有一个知识有些不清楚可能就會卡克!比如这个概念 dips,不同的文章有不同的说法而且还给你解释了它跟 dip 的不同,其实就是指 CSS像素这些人故意发明一些专业词汇,搞嘚你晕头转向所以,当你看了我的这两篇文章也许还是一知半解,这很正常慢慢来,多多练习相信你会明白的。
    如果还有哪里不清楚或者本文有错误的地方,感谢批评指正

    本文重新编辑于:2018年08月01日

    1. 针对大家的留言以及个人的反复推敲,重新整理了这遍文章;
    2. 增加针对手机本身字体放大、缩小的解决方案以及一些新的替代方案思路。


}

我要回帖

更多关于 js resize 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信