美文网首页前端🐶
移动端rem 适配方案

移动端rem 适配方案

作者: D_R_M | 来源:发表于2019-01-20 22:06 被阅读12次

知识点:

rem是什么?

rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过一个计算的规则是依赖根元素(rem)一个是依赖父元素计算(em)。


个人理解rem布局可分为俩种情况无设计稿有设计稿

无设计稿

1、首先需要在<head>标签中加入

<meta name="viewport" content="width=device-width,initial-scale=1.0,maixmum-scale=1.0,minimum-scale=1.0,user-scalable=no">

对于viewport的详细解释可以参考这篇文章:https://www.cnblogs.com/2050/p/3877280.html

2、在<script>标签中加入

window.onresize = function(){
  document.documentElement.style.fontSize = document.documentElement.offsetWidth / 20 +'px';
}
/*
document.documentElement.style.fontSize 是得到<html>标签并为它设置font-size样式字体大小,因为REM计算的规则是依赖根元素也就是<html>元素的字体大小
document.documentElement.offsetWidth  是获取整个视口的宽度
*/

document.documentElement.offsetWidth / 20 这里的20不是固定的,这里 / 20 是把屏幕均分为20份,当然也可使用16、18... , 但是这里有一个问题就是Chorme浏览器字体最小只能为12px,所以这里的最后结果最好别小于12。

3、尝试让一个div不管在什么屏幕下都占据一半,这里使用20均分所以这里div宽度只需要定位10rem就可以在任何屏幕下都占据一半。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无设计稿rem</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maixmum-scale=1.0,user-scalable=no">
    <style>
        *{
            margin:0;
            padding:0;
        }
        html,body{
            width:100%;
            height:100%;
        }
    </style>
</head>
<body>
<div style="width:10rem;height:100%;background:#f22;">div</div>
<script>
    window.onresize = getRem;
    function getRem(){
        document.documentElement.style.fontSize = document.documentElement.offsetWidth / 20+'px';
    }
    getRem();
</script>
</body>
</html>
image.png image.png image.png image.png

有计稿

以 iPhone5 和 iPhone7 举例他们的屏幕分辨率是320px*568px375px*667px
视觉设计师给的平面稿一般是 640px750px 宽度的设计稿
为什么设计稿会屏幕比例的俩倍呢?
这里引出一个知识点:

dpr是什么?

window.devicePixelRatio是设备上物理像素和设备独立像素(device-independent pixels (dips))的比例。
公式表示就是:window.devicePixelRatio = 物理像素 / dips
物理像素,比较好理解,一个物理像素是显示器(手机屏幕)上最小的物理显示单元,在操作系统的调度下,每一个设备像素都有自己的颜色值和亮度值。
dips,(dip或dp或device independent pixels)指的是设备独立像素(也叫密度无关像素),可以认为是计算机坐标系统中得一个点,这个点代表一个可以由程序使用的
详细解释:https://www.cnblogs.com/mtl-key/p/7126634.html

简单的讲其实就是dpr决定了css 1px 等于多少屏幕物理像素。

拿 iPhone6 和 普通PC机 举例:
iPhone6的dpr等于2,也就是说如果你为一个div设置100px(这里100px是css像素)宽度,在iPhone6 屏幕上面div其实占据了200px物理像素(因为iPhone 6 下 dpr=2)。而在普通pc屏幕下这个div占据的刚好是100px(因为pc屏幕下dpr=1)

可以在Chorme移动端DEBUG下开启显示dpr,也可以在console中打印window.devicePixelRatio查看

image.png image.png

设计稿给的是 640px 的如下(自己做的凑合用了吧233):


sc.jpg

实现rem布局:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>有设计稿rem</title>
    <meta name="viewport" content="width=device-width,initial-scale=1.0,maixmum-scale=1.0,user-scalable=no">
    <style>
        *{
            margin:0;
            padding:0;
        }
        html,body{
            width:100%;
            height:100%;
        }
    </style>
</head>
<body>
<div style="position:absolute;left:.94rem;top:1.63rem;width:1rem;height:1rem;background:#f00;"></div>
<div style="position:absolute;right:.94rem;top:1.63rem;width:1rem;height:1rem;background:#f00;"></div>
<div style="position:absolute;left:2.7rem;top:3.38rem;width:1rem;height:1rem;background:#00f;"></div>
<script>
    window.onresize = getRem;
    function getRem(){
        document.documentElement.style.fontSize = document.documentElement.offsetWidth / 6.4+'px';
    }
    getRem();
</script>
</body>
</html>

在任何设备下这三个div都会和设计稿一样的布局展现。

 document.documentElement.offsetWidth / 6.4

这里 / 6.4是为了方便计算,当然 / 80,/ 50...都行 , 前面提到过

有一个问题就是Chorme浏览器字体最小只能为12px,所以这里的最后结果最好别小于12。

所以这里让设计搞宽度 / 100 之后

document.documentElement.offsetWidth / ( 640 / 100)
<div style="position:absolute;left:.94rem;top:1.63rem;width:1rem;height:1rem;background:#f00;"></div>
<div style="position:absolute;right:.94rem;top:1.63rem;width:1rem;height:1rem;background:#f00;"></div>
<div style="position:absolute;left:2.7rem;top:3.38rem;width:1rem;height:1rem;background:#00f;"></div>

div的单位只要跟随 / 100 就行了,因为 / 100 很好计算所以无需思考直接就能得出想要的rem大小。

相关文章

  • 解决vue移动端适配问题

    1,先看看网上关于移动端适配讲解 再聊移动端页面适配,rem和vw适配方案! 基础点:rem相对根节点 字体的大小...

  • 解决vue移动端适配问题

    1,先看看网上关于移动端适配讲解 再聊移动端页面适配,rem和vw适配方案! 基础点:rem相对根节点字体的大小。...

  • React 配置 rem (移动端适配)

    移动端适配方案介绍 在移动端中,为了设配不同的设备,通常使用rem来做适配。 rem是通过根元素进行适配的,网页中...

  • 移动端适配方案

    @description 该方法是用于移动端适配功能, 结合淘宝的适配方案flexible + rem 实现适配,...

  • 记一次前端技术分享(移动端相关概念讲解)

    移动端开发中的相关概念讲解 1、移动端自适配方案 移动端如何根据不同手机尺寸进行页面的适配 rem 自适应和 vw...

  • 移动端页面适配

    移动端页面适配 rem 与 vw 再看看15年手淘方案:Flexible + rem Flexible 从流行到今...

  • 移动端适配

    移动端适配 1.适配宽高等问题REM方案:改变页面根部的font-size js方案:通过缩放viewport,达...

  • 移动端适配及pc端跳转代码

    移动端rem适配 pc端跳转

  • 移动端rem适配

    三:多屏适配布局问题 出处:【原创】移动端高清、多屏适配方案 再谈移动端适配和点5像素的由来 使用相对单位:rem...

  • 移动web开发与适配

    学习目标 了解移动web简单调试方法 了解移动web常见适配方案 掌握移动端布局技巧 全面掌握rem适配方法 移动...

网友评论

    本文标题:移动端rem 适配方案

    本文链接:https://www.haomeiwen.com/subject/rkrydqtx.html