使用rem等比例缩放手机界面

使用rem等比例缩放手机界面这几天写公司官网的手机端界面 同事介绍了一种布局模式 即使用 rem 等比列缩放布局 rem 布局非常简单 首页你只需在页面引入这段原生 js 代码就可以了 function doc win vardocEl doc documentElem resizeEvt orientationc inwindo

这几天写公司官网的手机端界面,同事介绍了一种布局模式,即使用rem等比列缩放布局。

rem布局非常简单,首页你只需在页面引入这段原生js代码就可以了。


 (function (doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize', recalc = function () { var clientWidth = docEl.clientWidth; if (!clientWidth) return; if(clientWidth>=640){ docEl.style.fontSize = '100px'; }else{ docEl.style.fontSize = 100 * (clientWidth / 640) + 'px'; } }; if (!doc.addEventListener) return; win.addEventListener(resizeEvt, recalc, false); doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window);

如何使用?

  1. 为什么是640px?
    对于手机屏幕来说,640px的页面宽度是一个安全的最大宽度,保证了移动端页面两边不会留白。注意这里的px是css逻辑像素,与设备的物理像素是有区别的。如iPhone 5使用的是Retina视网膜屏幕,使用2px x 2px的 device pixel 代表 1px x 1px 的 css pixel,所以设备像素数为640 x 1136px,而它的CSS逻辑像素数为320 x 568px。
    如果要切移动端页面,你可以先把效果图宽度等比例缩放到640px,很好用。




  2. 为什么要设置html的font-size?
    rem就是根元素(即:html)的字体大小。html中的所有标签样式凡是涉及到尺寸的(如: height,width,padding,margin,font-size。甚至,left,top等)你都可以放心大胆的用rem作单位。
    如果你把html的font-size设为20px,前面说过,rem就是html的字体大小,那么1rem = 20px。
    此时,此时宽60px,高40px的元素样式就这样设置如下 ↓
    width: 3rem; height: 2rem;

    那要是宽55px,高37px呢?然后经过换算,,设置如下 ↓

    width: 2.75rem; height: 1.85rem;

    是不是发现这换算起来有点麻烦啊,,,(当然,你要是心算帝请无视)
    如果我们一开始把html的font-size设为100px呢?此时1rem = 100px,那么上面的宽55px,高37px的元素样式就可以这么设置 ↓

    width: 0.55rem; height: 0.37rem;

    是不是换算起来简单多了?!
    (当然可能有同学问,为什么不一开始把html的font-size设为1px呢,这样换算起来也简单,答:浏览器一般都有最小字体限制,比如谷歌浏览器,最小中文字体就是12px,所以实际上没有办法让1rem=1px。)
    根据上面的js代码,如果页面宽度低于640px,那么页面中html的font-size也会按照(当前页面宽度/640)的比例变化。这样,页面中凡是应用了rem的作尺寸单位的元素都会随着页面变化而等比例缩放了!












  3. 都哪些情况可以用rem布局?
    大部分情况下都可以用rem布局这个方法,当然具体还要看情况而定。拿我们公司项目举例,只有底部的导航不用rem,而是用的flex布局。因为导航点击最多,所以给它一个固定的大小(其实就是高度固定,宽度自适应的方案)。大家可以看看淘宝的这个手机页面淘宝手机站,基本就是这种感觉,底部导航和顶部搜索框用的高固定,宽自适应的方案,其余的部分基本都是随着浏览器宽度变化在等比例缩放。

最终页面代码首页代码大致如下

                /*你引进的资源*/      标题 /*你的代码*/         

回过头来再看看现在流行的几种布局方式:

1.定宽度布局

很多pc的网站都是定宽度布局的,也就是设置了min-width,

这样一来,如果小于这个宽度就会出现滚动条,

如果大于这个宽度则内容居中外加背景,

这种设计常见与pc端。

2.响应式布局

所谓响应式布局就是流式布局+媒体查询,

流式布局用来解决不同宽度的布局问题,

外加媒体查询,可以调整布局,例如大屏幕是布局1,小屏幕是布局2,

这种布局通吃pc和移动端,做到精细处,两者的效果都很好,

缺点是媒体查询是有限的,也就是可以枚举出来的,

只能适应主流的宽高。

3.rem布局

原理是,先按定高宽设计出来页面,然后转换为rem单位,

配合js查询屏幕大小来改变html的font-size,

最终做出所谓的完美自适应。

4.flex布局

这是css3 推出的一个新的属性。使用该属性可以很方便的达到布局的效果。使用该属性后,子元素不能再使用float、vertical-middle等属性。

目前新的主流浏览器都支持该属性(IE10+上)。因此该布局用于手机端,表示毫无压力。

详情可以查看http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool

【rem缺点】

rem一出好像所有移动端自适应不采用rem都很low一样,

来分析分析,

假设以100×100做出网页,

那么采用rem+js完全可以自适应所有200×200,300×300,450×450等等高宽,

问题来了,

如果用100×100设计好后,

来了100×200,100×300,100×400的手机,

那么效果无非两种:

1.网页内容只局限与网页顶部,例如100×400的手机,网页内容只占用的100×100的部分,

2.有人说可以高度也js+rem,那么效果无非是拉伸或者缩放

【不要抬杠】

有人会说了,现实中不会有100×400的手机,

我想说的是这种rem+js只不过是宽度自适应,

高度没有做到自适应,一些对高度,或者元素见间距要求比较高的设计,

那这种布局没有太大的意义。

如果只是宽度自适应,那我更推荐的是响应式设计。

【响应式 vs rem】

1.响应式

改变浏览器宽度,你会发现“布局”会随之变化,不是一成不变的,

例如导航栏在大屏幕下是横排,在小屏幕下是竖排,在超小屏幕下隐藏为菜单,

也就是说如果有足够的耐心,在每一种屏幕下都应该有合理的布局,完美的效果。

优点:适应pc和移动端,如果足够耐心,效果完美

缺点:要匹配足够多的屏幕大小,工作量不小,设计也需要多个版本

2.rem+js

改变浏览器宽度,你会发现,页面所有元素的高宽都等比例缩放,

也就是大屏幕下导航是横的,小屏幕下还是横的只不过变小了。。

优点:理想状态是所有屏幕的高宽比和最初的设计高宽比一样,或者相差不多,完美适应。

缺点:碰到重视高度的设计,或者重视元素间间距的设计,那就玩不开了。

【总结】

1.如果只做pc端

那么定宽度是最好的选择

2.如果做移动端,且设计对高度要求不高

那么rem+js是最好的选择,一份css+一份js调节font-size搞定

3.如果pc,移动要兼容,而且要求很高

那么响应式布局还是最好的选择,前提是设计根据不同的高宽做不同的设计,

响应式根据媒体查询做不同的布局。

【ps】

还有一种rem+媒体查询,和rem+js一对比感觉有点鸡肋就没有提及。

参考:

1:文/随意那天(简书作者)

原文链接:http://www.jianshu.com/p/b00cd
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。







2:http://blog.csdn.net/uikoo9/article/details/











版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/229963.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午3:27
下一篇 2026年3月16日 下午3:27


相关推荐

  • pytest 测试框架

    pytest 测试框架本篇章将讲解 pytest 测试框架的基本使用知识 从安装 到 API 方法的使用 命名方式 执行参数 参数化 前后置 固件等等做了一系列的讲解

    2026年3月19日
    3
  • 2020年最佳恶意软件删除工具Top 10「建议收藏」

    2020年最佳恶意软件删除工具Top 10「建议收藏」恶意软件删除工具可以帮助你从个人计算机中删除危险的恶意软件,从而避免受到黑客的攻击并防止以后的攻击隐患。保障你的电脑或笔记本电脑的安全性是非常重要的,因为你永远不知道攻击者何时会对你的设备发起攻击。所以,这意味着你不仅需要杀毒软件,还需要一个恶意软件删除工具。比如,广告软件和间谍软件有很大的不同之处,它们不是病毒。因此,仅查出设备是否已受到恶意软件的影响是远远不够的,而且采用手动删除的方法也是非常不切实际的。故此,恶意软件清除已成为一个普遍的问题。如今,恶意软件感染越来越普遍化,即便你自认为..

    2022年6月24日
    72
  • ssm框架理解

    ssm框架理解SSM框架理解最近两星期一直在学JavaEE的MVC框架,因为之前学校开的JavaEE课程就一直学的吊儿郎当的,所以现在真正需要掌握就非常手忙脚乱,在此记录下这段时间学习的感悟,如有错误,希望大牛毫不

    2022年7月4日
    25
  • 我的程序里

    我的程序里我的程序里没有一点点防备也没有一丝顾虑突然错误出现在我的日志里带给我惊喜身不自已可是你偏又这样在我不知不觉中悄悄的消失从我的堆栈里没有音讯剩下了报警短信你存在我某一个模块里我的梦里,我的心里,我的

    2022年7月3日
    27
  • 超好看的辅助网站html源码

    超好看的辅助网站html源码预览图片 纯 html 源码记事本修改就好了用途我就不说了大家都知道安装步骤 记事本修改好上传服务器或主机根目录参考修改教程和搭建教程下载地址 http www bytepan com dfdUnPaSfY1

    2026年3月26日
    2
  • php header 404写法 php header函数用法

    php header 404写法 php header函数用法header("HTTP/1.1404NotFound");exit;

    2022年7月1日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号