页面自适应与rem

在写前端页面的时候经常会用到rem,也在网上看了别人对rem的介绍,详细的情况就不在此描述,只说一下我对rem的看法和用法。

在我看来,rem 是一种相对的尺度,相对于根元素设置的font-size,比如:

html {
    font-size: 16px;
}

那么,在别的地方使用rem的时候 1rem 就会等于 16px。
这算是对rem最基础的应用,但是这种使用方式和直接使用px没有任何区别,只是单位不一样,需要进行换算。
既然rem 是一种相对尺度,最常用于页面自适应,我们就不能简单粗暴的直接对根元素设置字号来决定1rem的大小。
众周所知,android手机屏幕大小不一,各种尺寸的都有,这样的情况给我们的前端开发带来了很大的麻烦,我们不可能针对每一种手机尺寸去写一套代码来进行适应。设计师也不可能针对每一种手机尺寸做一套设计标注。
假设设计师做的图以750px为宽度。我们怎么能在一套设计图和一套代码里去适应所有的手机屏幕呢?这时候rem就非常有用了。
不知道别人公司是怎么用的,在我们公司针对rem做了一个转换公式。

根字号 = x * ( pageWith / 750 );

这里有几个值需要解释一下:

  • x 这是一个自由的值,是你希望1rem能代表多少设计图上的px,可以随意设置
  • pageWith 页面实际尺寸 px
  • 750 这个是设计图的宽度
  • 根字号 就是这个公式的计算结果,也是你将要使用的1rem所代表的px值。

这里还有一个地方要解释一下,什么是设计图上的px? 比如设计图宽度为750px,你希望1rem = 100px 那整个设计图的宽度就可以写做7.5rem,但这个100px只是针对于设计图,因为实际上手机的尺寸是不确定的。

啊~~~ 越说越乱了,还是先解释公式吧:

公式的意思是把真实的屏幕分成设计图宽度的份数,乘以你希望1rem能代表多少设计图上的Px,最终得到一个值,把这个值当做根元素的字号,你的页面中就可以完全使用rem,完全按照设计图上的尺寸做界面,从而达到在不同手机屏幕下的自适应。

不知道有没有表达清楚我想表达的意思。还是上代码吧,

var remUnit = 0;
function setRemUnit () {
    var doc = document.documentElement;
    var width = doc.clientWidth;
    remUnit = 100 * (width / 750);
    doc.style.fontSize = remUnit + ‘px‘;
}

window.addEventListener(‘resize‘, setRemUnit);
setRemUnit();

这段代码意思是以设计图宽度750px为基准,以期望1rem=100px为前提,计算出一个值,设置到根元素上。
使用时可以这样用:
比如设计图上有一个div 宽度为300px,div内有一个头像 宽度120px,头像右侧是用户名,32号字,我们可以这样写:

.avatar-block {
    width: 3rem;
    ....
    .avatar {
        width: 1.2rem;
        height: 1.2rem;
        border-radius: 50%;
        ...
    }
    .username {
        font-size: 0.32rem;
        ...
    }
}

因为屏幕是不固定的,所以在不同屏幕下,通过计算得到的根元素字号也是跟着屏幕大小变化而变化的,所以才能做到一套设计图一套代码 就能适应所有屏幕。

原文地址:https://blog.51cto.com/wuzishu/2421492

时间: 2024-08-28 10:55:35

页面自适应与rem的相关文章

手机端页面自适应: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;

手机端页面自适应解决方案—rem布局

只需在页面引入这段原生js代码就可以了 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 (function (doc, win) {        var docEl = doc.documentElement,            resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',            recalc = function () {     

手机端页面自适应解决方案-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

rem手机端页面自适应完美解决方案(最新)

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> ! function(e) { function t(a) { if(i[a]) return i[a].exports; var n = i[a] = { exports: {},

20160622 html5移动页面自适应屏幕宽度

html5移动页面自适应屏幕宽度 1.使用meta标签,在头部加入下面代码 <meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/> 2.用百分比,‘百’指的是父元素,这只适合布局简单的页面,复杂的页面实现很困难. 3.用CSS相对单位rem. 4.媒体查询@m

70.JS---利用原生js做手机端网页自适应解决方案rem布局

利用原生js做手机端网页自适应解决方案rem布局 刚开始我用的是下面这段代码,然后js通过外部链接引入,最后每次用手机刷新网页的时候都会出现缩略图 function getRem(pwidth, prem) { var html = document.getElementsByTagName("html")[0]; var oWidth = document.body.clientWidth || document.documentElement.clientWidth; html.s

微信公众平台开发 - 页面自适应

通过以下标签实现页面自适应: <meta name="viewport" content=" height = [pixel_value | device-height] , width = [pixel_value | device-width ] , initial-scale = float_value , minimum-scale = float_value , maximum-scale = float_value , user-scalable = [ye

JavaScript提高:003:easy UI实现tab页面自适应问题

前面说到使用easyUI在asp.net中实现了tab控件效果.http://blog.csdn.net/yysyangyangyangshan/article/details/38307477不过有一个问题,div的宽度太宽了,而且不随页面变化而改变.网上搜索了下,发现很多人也碰到过,而且也有解决的办法.下面看看吧.实现tab的部分代码如下:引用的easyui文件参考上文. <div id="tabTop" class="easyui-tabs"> &

JavaScript---手机端--页面自适应

在公司新学了一种页面自适应的方式: //等比缩放 !(function(doc, win) { var timer, docEle = doc.documentElement,//获取body evt = "onorientationchange" in window ? "orientationchange" : "resize",//获取手机旋转事件 setFontSize = function() { var width = docEle.