如今工做中有超过一半的时间用于移动端项目的开发,包括app嵌入页,微信页面和移动wap页。javascript
开发移动端页面跟开发PC页面的一个大区别就是移动端对响应式布局的要求更高,不能像PC页面同样设计几个断点利用媒体查询,两边留空白就解决。移动端页面须要把屏幕空间都利用上,而移动设备的尺寸和分辨率多种多样,解决移动端页面的自适应布局问题是搭建新的移动端项目的重点和难点。css
通过研究,我在公司的多个移动端项目使用了REM布局来解决移动端自适应布局的问题。html
rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位,rem布局是一个流行的解决移动端响应式布局的方案。在页面初始化时,使用JS根据屏幕的尺寸和dpr等信息设置rem的大小,而在css中写下元素的高度等信息时,使用rem。如将rem设置为100px,则元素的高度为36px时,须要将元素的高度写成0.36rem。字体大小可能须要写成0.12rem等,可读性较差,输入起来也不方便,下降了工做效率。前端
在webpack中使用px2rem-loader。用法以下java
rules: [ { test: /\.css$/, use: ['style-loader', 'css-loader', 'px2rem-loader?remUnit=75&remPrecision=8'] } ]
这样即可以应对常见的750px的设计图,直接按照设计图的尺寸来填写属性大小就好,
注意,还须要在html文件中引入flexible文件webpack
<script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.2/??flexible_css.js,flexible.js"></script>
微信浏览器若是退回的话,页面被缓存,可是js文件没有从新调用,会致使布局混乱。须要调用pageshow事件来解决git
e.addeventListener('pageshow', function(e) { // d的做用是从新设置documentElement的fontsize为clientWidth的1/10 e.persisted&&d() })
你也许会对flexible.js作了什么比较感兴趣。在这以前,须要简单了解一下viewport的知识github
viewport meta标签有六个属性web
网站的宽度,能够经过document.documentElement.clientWidth获取,经过viewport meta标签设置浏览器
表明浏览器可视区域的大小,能够经过 document.documentElement.innerWidth来获取
跟移动设备相关的viewport,移动设备的宽度。iPhone的值是320
visual viewport width = ideal viewport width / zoom factor
zoom factor能够设置initial-scale来控制
当visual viewport = layout viewport时,页面无水平滚动条,恰好显示所有内容
若是不设置initial-scale,经过设置viewport meta的width为device-width,能够令layout viewport等于ideal viewport,从而达到页面无水平滚动条的效果
这时咱们咱们开发项目只要注意屏幕的宽度是10rem就能够了
其实REM方案主要仍是以clientWidth的1/10为基本单位设置元素的尺寸来达到自适应的目的。能够使用VW来代替,也有px2vw之类的插件。
要达到自适应布局,还能够使用百分比、flex布局或是grid布局,这里就不细说了。
本文章为前端进阶系列的一部分,
欢迎关注和star本博客或是关注个人github