资讯专栏INFORMATION COLUMN

移动端rem布局的学习(基于自己写的一个网易云播放页面的思考)

he_xd / 1903人阅读

摘要:最近在看关于移动端的响应式布局,其中涉及到比较多的就是大小属性的设置等等,今天自己就捋一捋的用法。然而万一不能用该怎么办啊,所以还是要学会自己写原生的页面布局,也就会有今天的这篇文章了。的使用是指相对于根元素的字体大小的单位。

对于一个前端的初学者来说,首先要做好的事就是切页面了,切页面不得不说的就是布局了,布局的重要性不言而喻,为了良好的用户体验,提出了许多不一样的布局:响应式布局,弹性布局,流动布局等等,也流入出了许多的框架。最近在看关于移动端的响应式布局,其中涉及到比较多的就是大小属性的设置:px、vw、vh、%、em、rem等等,今天自己就捋一捋rem的用法。

说在前面

一想到写移动端的页面,就要考虑自己写的页面能够适应各种不同的移动设备,起初想想要做到感觉好难啊,最初想到的就是用第三方的框架,用别人写的东西应该会很方便。然而万一不能用该怎么办啊,所以还是要学会自己写原生的页面布局,也就会有今天的这篇文章了。先看看自己用普通百分比、像素来写的页面和后来改用rem写的页面的对比:

普通百分百布局与rem布局的比较

小分辨率(375*667)

小分辨率(414*736)

上面是两种小的分辨率,最后得到的效果不会很差,感觉差不多,现在还成大一点的分辨率,效果就不一样了:

大分辨率

简单的对比下就看出了效果。当不用别人的框架,该怎么去写。最容易想到的就是用百分比来写,这种写法对设备的宽度有用,宽度是固定的,对高度不起什么作用,大部分人的做法就是宽度用百分来设置,高度用px来设置,但这种的做法体验并不是很好,用分辨率小的设备感觉不是很差,一旦换成了分辨率比较大的设备效果就差很多了,大部分的标签元素都会被拉伸。高度固定,换成了大的分辨率各种元素效果还是原来的,各种元素固定了大小,体验并不是很好。

rem的使用

rem是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位,通过根元素进行适配的。

普通使用

大部分是通过设置html的字体大小就可以控制rem的大小,例如:html的字体大小为20px,那么就说20px为1rem,接下来的所有元素的大小都基于这个比例来换算。这种的算法是存在问题的,当我们计算页面的宽度rem值得时候都是使用某一款移动设备的分辨率来计算的,下面的例子我用的是iphone6的分辨率375*667,它的宽度为375px,20px为1rem,那么375px就是18.75rem。看下面的代码:



    
        
        
        
        
        
    
    
        
手手手手手手手手手手手手手手手手手手手手手手手
段段段段段段段段段段段段段段段段段段段段段段段
方方方方方方方方方方方方方方方方方方方方方方方方
哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦

上面的代码在375667的分辨率下刚好能够占满宽度,当你切换到其他的分辨率(如414736)时问题就来了,看图:

这个问题的原因很简单,这种写法即使用的是rem也起不来作用,宽度和高度都是固定的,width为18.75rem就是375px,切换成其它分辨率(如414*736),它的宽度还是375px,空白处还是显示出来了,很多人会认为可以把宽度设置成百分比的形式,或者用媒介查询@media,或是viewport设置中的那个deviceWidth()的方式来解决问题,当然这些方式均能解决宽度的问题,然而高度的问题又该怎么办呢?看下面:



    
        
        
        
        
        
        
        
    
    
        
手手手手手手手手手手手手手手手手手手手手手手手
段段段段段段段段段段段段段段段段段段段段段段段
方方方方方方方方方方方方方方方方方方方方方方方方
哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦

看效果:

看图就知道了,宽度可以适应不同的移动设备,然而高度一直都没有发生变化,一直都是150px,页面效果并不好看,分辨率大了,页面被拉伸,高度显得变小了。

正确使用

动态计算html的font-size,核心是切换不同移动设备通过js获取设备宽度,然后按比例计算html的font-size的值,动态变化。

var d = document.documentElement;//获取html元素
var cw = d.clientWidth || 750;
d.style.fontSize = (20 * (cw / 375)) > 40 ? 40 + "px" : (20 * (cw / 375)) + "px";

上述代码解释:

设计稿横向分辨率为375(iphone6),计划20px为1rem;

布局的时候,各元素的css尺寸= 20 * (设备宽度/设计稿竖向分辨率)。

完整代码:

window.addEventListener(("orientationchange" in window ? "orientationchange" : "resize"), (function() {//判断是屏幕旋转还是resize
                function c() {
                    var d = document.documentElement;//获取html元素
                    var cw = d.clientWidth || 750;
                    d.style.fontSize = (20 * (cw / 375)) > 40 ? 40 + "px" : (20 * (cw / 375)) + "px";
                }
                c();
                return c;
            })(), false);

上面的做法就可以动态的设置各种标签元素的宽和高,按比例的调试适应不同的移动设备。例如下:
上面的代码中是以iphone6为设计稿的,box1的height为7.5rem(150px),如果切换成iphone6 plus的大小,box1的height=(414/375)7.5=8.28rem,也就是8.2820=165.6px,与iphone6时的高度是不一样的,写页面时会更加的美观。看效果:

看上面显示的效果就可以看出来,和计算出的结果是一样的,方法正确。以后可以用了。看看整体效果:

页面元素完全没有被拉伸的效果,按照一定的比例缩放,保持页面效果美观。

源码


    
        
        
        
        
        
        
        
        
    
    
        
手手手手手手手手手手手手手手手手手手手手手手手
段段段段段段段段段段段段段段段段段段段段段段段
方方方方方方方方方方方方方方方方方方方方方方方方
哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦哦
写在最后

终于写完了这篇文章,感觉写文章的过程就是再学习的过程,可以多做做;

最近在学习写写网易云的播放页面,一做页面就要考虑布局的事情,就思考了这方面的问题,记录下来。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/112718.html

相关文章

  • 移动rem布局学习基于自己一个网易播放页面思考

    摘要:最近在看关于移动端的响应式布局,其中涉及到比较多的就是大小属性的设置等等,今天自己就捋一捋的用法。然而万一不能用该怎么办啊,所以还是要学会自己写原生的页面布局,也就会有今天的这篇文章了。的使用是指相对于根元素的字体大小的单位。 对于一个前端的初学者来说,首先要做好的事就是切页面了,切页面不得不说的就是布局了,布局的重要性不言而喻,为了良好的用户体验,提出了许多不一样的布局:响应式布局,...

    wums 评论0 收藏0
  • 用vue全家桶写一个“以假乱真”网易音乐

    摘要:关于路由,刚开始设计路由的时候想了很多,由于一开始的目标就是网易云音乐的所有内容,所以设计了三级路由,,大概这样,点击查看。 标题略夸张了,但是这个从ui还原上已经很接近官方版本了。虽然目前这个是很多人造过的轮子,但是可能每个人的实现方式都不一样,自己写一遍也会有许多收获。 项目地址 预览地址 api:ap使用的是一个开源的nodejs封装的网易云音乐api,地址 技术栈 vue...

    clasnake 评论0 收藏0
  • 资源收集整理

    摘要:工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 Github版本:Front-End Resource Collection 前端相关资源汇总 学习指导 精华文章 Web前端的路该怎么走?:文章超长,但是干货超级多,值得反复精读! 听说2017你想写前端?:适合于已经度过了小白阶...

    awesome23 评论0 收藏0
  • 资源收集整理

    摘要:工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 工作原因,最近一年断断续续写了一点前端代码,收集整理了一些资料,和大家共享。 Github版本:Front-End Resource Collection 前端相关资源汇总 学习指导 精华文章 Web前端的路该怎么走?:文章超长,但是干货超级多,值得反复精读! 听说2017你想写前端?:适合于已经度过了小白阶...

    antyiwei 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<