• Stars
    star
    188
  • Rank 205,563 (Top 5 %)
  • Language
    HTML
  • Created about 10 years ago
  • Updated over 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

移动端网页 rem响应式布局 最佳实践代码

移动端网页 rem响应式布局 最佳实践代码

WHAT IS IT

使用rem布局,屏幕越大,对应的“字体、图片、交互按钮”的大小也越大,同时大小能在用户旋转设备方向,或调整窗口大小(桌面端)时自动调整,如图:

rem

使用经典的px并结合弹性盒布局,在更大的屏幕上将展示更多的内容,同时,图片(此处没有使用弹性盒)、交互按钮也相对屏幕较小。如图: px

WHY USE IT

在下列情况下,这种“rem响应式”布局会效果更好:

  • 页面可交互元素(可点击的图片、按钮、链接等)较多——此时如果按照“固定像素布局”,dpi过高的屏幕,每个css像素所对应的物理长度毫米数较小,那么可交互元素就会特别小,不易操作。大家可以拿魅族MX3感受一下
  • 页面需要考虑年龄较大、视力一般的用户——他们买大屏手机就是为了字体更大好不好?
  • 页面是海报、广告、产品(或新功能)介绍性质,希望保持图片、文字相对屏幕的比例——在“固定像素布局”布局中,图片我们当然可以通过百分比或弹性盒布局来自适应变大,可是处理文字的字体大小不太方便,可能会导致像这样:

海报比较

“固定内容布局”的布局在开发时还会带来一些便利,如:

  • 无需理解“弹性盒”,即可开发自适应的移动端页面
  • 可直接按照设计师给的PSD文件1:1开发,无需考虑自适应问题

相对直接设置 viewport meta 为一个定值,如 width=320 有什么不一样?

这样设置的确不用再处理rem,即可按照320px css像素的布局来渲染页面,而不用考虑设备的实际css像素宽度是多少,但是这种方案的缺点也比较明显

  • 失去了一些便捷性,所有的元素或间距都会按照屏幕宽度的变化而发生大小的变化。如果使用rem的方式来布局,希望按照屏幕宽度的变化而发生大小的变化的,则使用rem作为单位;不需要的,则还是可以使用先前经典的px作为单位,和结合弹性盒模型来布局
  • 过小的定值无效。设备将按照自己在 width=device-width 状态下的css像素和这个定值中的 较大值 来设置视窗的css像素宽度,使得过小的定值无效。如在iPhone 6上,设置定值320,而它在 width=device-width 状态下的css像素为375,375>320,则还是会按照375来设置视窗的css像素宽度
  • 使用定值可能会引起其他的问题。

HOW TO USE

  1. 设置移动端网页专用的viewport meta,至少需要包含 width=device-width,initial-scale=1.0 ,如 <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
  2. head 内,上述meta标签和指定charset的meta标签之后,任何外链的css或js文件之前,新建一个 script 标签,将 build/rem.js 粘贴进去(未压缩源码在src/rem.html内)。
  3. 设定参数,设定代码中最后3行的三个参数(通常情况下你不需要更改它们)。请注意最后一个参数的单位是css像素(参照像素),而非实际的物理像素
  4. 开始你的开发,按照设计图开发样式,但是长度单位需要通过除以你在第3步里面设置的第二个参数“开发时的被除数”(dividendFontSize)来换算。如:一个按钮的高度是20px(css像素),而你设定的dividendFontSize为16,则它的样式需要写成 height:1.25rem (20/16=1.25)

IE8 AND BELOW

有的时候我们需要考虑使用rem布局的页面在IE8级以下版本的浏览器中被打开时,不至于报错,于是可以采用以下hack方法,具体可以参考src/ie8.html。当然,你还需要为所有使用rem为单位的样式,另写(或生成、编译出)一份px为单位的。

// 在上面“HOW TO USE”中第2、3步粘贴代码的同一位置,改为:
<script>
	window.__remInitFunc = function(){
		// 这里面粘贴上面“HOW TO USE”中第2、3步的代码
	}
</script>
<!--[if lt IE 9]>
<script>
	window.__remInitFunc = function(){}
</script>
<![endif]-->
<script>
	window.__remInitFunc()
	window.__remInitFunc = undefined
</script>

License

All code licensed under the MIT License . In other words you are basically free to do whatever you want. Just don’t remove my name from the source.

夕阳树的照片、海报示例页面截图 来源网络。

More Repositories

1

remote_inspect_web_on_real_device

各种真机远程调试方法汇总——“真机远程调试”(remote inspect web on real device),是指用桌面电脑(PC或MAC)远程连接上移动设备,通过类似Chrome浏览器开发人员工具的界面,来调试移动设备上运行的网页
1,600
star
2

lazyload

一个jQuery或zepto的图片延迟加载插件。An jQuery | zepto plugin for lazy loading images.
JavaScript
715
star
3

dice

一个css3 3d动画效果的色子(或称骰子?)
JavaScript
44
star
4

sinaWeiboShare

封装了在web中分享到新浪微博的方法
JavaScript
14
star
5

flexibleWapHelper

一个基于Zepto或jQuery插件,帮助你构建【能灵活自适应宽度】的wap网页
JavaScript
9
star
6

peon

简单&通用的前端工程化编译工具
JavaScript
8
star
7

compress.sh

一个web站点用的无损压缩图片的工具,它区分图片类型并使用对应的压缩个工具将它压缩
Shell
7
star
8

recx

这个javascript组件,记录用户在页面上的输入和选择,当用户下一次载入该页面时,还原上次的输入和选择。进而达到降低用户成本,提高用户体验的目的。
JavaScript
7
star
9

easyGeoLocation

A library that optimizes and encapsulates native HTML5 geolocation JavaScript code. You can easily use it to get geolocation information. It offers get, watch and clear method of location, speed and heading. It also improves performance by means of buffering the callback function queue.
JavaScript
5
star
10

connection_detect

shim for html5 connection api
HTML
2
star