为什么移动端要适配: 由于移动设备的尺寸不一,所以移动端的页面要能够适应不同尺寸的设备,即页面的自适应,让页面在视觉上保持一致。

rem:rem 是css3的一种相对单位,参考是根元素HMTL的font-size的值,即html的font-size:10px;那么 1rem = 10px;

先看下面的rem书写示例

<!DOCTYPE html>
<html lang="en" style='font-size: 10px;'>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
#box {
width: 10rem;
height: 10rem;
background: red;
}
</style>
</head>
<body>
<div id="box"></div>
</body>
</html>

元素box的大小是多少px呢?根据公式算,1rem = html 的 font-size 的值,那么 10rem = 10 * (html font-size的值) = 10 * 10 = 100px;所以box大小是100px * 100px;

知道了rem 怎么用了,那到底移动端是怎么适配的呢?我们知道用了rem作为单位,元素的大小就会根据根元素font-size的值进行计算,如果我们监听窗口的大小去动态的设置根元素的font-size,不就能适应不同尺寸的设备了嘛,来看看下面的一段js
  (function (doc, win, undefined) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in win ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (clientWidth === undefined) return;
docEl.style.fontSize = 10 * (clientWidth / 750) + 'px'; // 设置 根元素html的font-size
};
if (doc.addEventListener === undefined) return;
win.addEventListener(resizeEvt, recalc, false);// 监听窗口改变
doc.addEventListener('DOMContentLoaded', recalc, false) // 初始HTML加载和解析完成时
})(document, window);

这段代码什么意思呢?就是页面初始化的时候和窗口改变的时候,根据当时窗口的大小动态设置根元素html的font-size值,再配合使用相对单位rem,来达到自适应的效果。

最为核心的是这句代码
 docEl.style.fontSize = 10 * (clientWidth / 750) + 'px'; // 设置 根元素html的font-size
// docEl => 是 元素html
// clientWidth => 是当前窗口的宽度
// 750 => 是 设计稿的宽度

假如我们的开发环境的窗口和设计稿一样也是750,那个当前根元素的font-size值就是10px;此时,我们量得一个元素的宽设计稿是750px,那么我们就要写成 75rem;这样通过换算 (75rem * 10px) 就会得到正确的 750px;简单点就是 我们量的设计稿元素的宽 除以 根元素的font-size值,就是我们要写成的rem的值,仔细想想是不是这样的

基于我们上面的假设,如果此时窗口变成了375px,根元素font-size 就变成了 5px,我们响应设置的 75rem 实际上会渲染成 75rem* 5px = 375px;页面也会保持同时缩放,印证了我们动态设置的没有问题,保证了页面的一致性

H5移动端适配方案-rem的更多相关文章

  1. 手淘H5移动端适配方案flexible源码分析

    移动端适配一直是一个值得探讨的问题,在业余时间我找了一些页面,查看了一些厂商对于移动端H5页面的适配方案,看到了几个典型的例子,今天就来记录一下我看到的第一个典型的例子,也是我们公司目前普通H5项目正 ...

  2. 移动端适配方案-rem(基础篇)

    常见移动web适配方案一般有3种方法,如下图: ①:定高,宽度百分比(一般用来做一些适配性不高的页面,比如主要以一些文字和图片为主的网页或移动端的头部和底部) ②:flex (更多的用于复杂页面的布局 ...

  3. h5 移动端适配方案思考

    基础概念 CSS像素(CSS pixels) 这个是浏览器使用的抽象单位,用来精确度量网页上的内容.平时经常写的width:100px;height:100px;都是与设备无关的. 设备独立像素(de ...

  4. 整理h5移动端适配方案

    <使用Flexible实现手淘H5页面的终端适配>:https://github.com/amfe/article/issues/17 <再聊移动端页面的适配>:https:/ ...

  5. rem移动端适配方案

    一. rem vs em 单位 定义 特点 rem font size of the root element 以根元素字体大小为基准 em font size of the element 以父元素 ...

  6. H5 APP 页面移动端适配方案

    H5 APP 页面移动端适配方案 https://segmentfault.com/a/1190000011586301 https://juejin.im/post/5cbdee71f265da03 ...

  7. 基于Vue/React项目的移动端适配方案

    本文的目标是通过下文介绍的适配方案,使用vue或react开发移动端及H5的时候,不需要再关心移动设备的大小,只需要按照固定设计稿的px值布局,提升开发效率. 下文给出了本人分别使用create-re ...

  8. 超详细讲解H5移动端适配

    前言 移动互联网发展至今,各种移动设备应运而生,但它们的物理分辨率可以说是五花八门,一般情况UI会为我们提供375尺寸的设计稿,所以为了让H5页面能够在这些不同的设备上尽量表现的一致,前端工程师就不得 ...

  9. 移动端适配单位rem

    0 写在前面 本周惊喜地发现,其他各个老师的软工班(罗杰老师班和欧阳老师班)的软工项目的alpha版本都已经发布了!(然而我们软工项目还没开始写代码…逃…) 十分好奇的我第一时间下载了一些他们的产品进 ...

随机推荐

  1. HTTP状态码:3XX

    3XX状态码 含义:表明浏览器需要执行某些特殊的处理以正确的处理请求,大部分都需要进行重定向.这类状态码代表需要客户端采取进一步的操作才能完成请求.通常,这些状态码用来重定向,后续的请求地址(重定向目 ...

  2. netty系列之:轻轻松松搭个支持中文的服务器

    目录 简介 netty的HTTP支持 netty中使用HTTP的原理 100 (Continue) Status 为netty搭建HTTP服务器 总结 简介 之前讲了那么多关于netty的文章,都是讲 ...

  3. Python - 面向对象编程 - @property

    前言 前面讲到实例属性的时候,我们可以通过 实例对象.实例属性 来访问对应的实例属性 但这种做法是不建议的,因为它破坏了类的封装原则 正常情况下,实例属性应该是隐藏的,只允许通过类提供的方法来间接实现 ...

  4. 巧用模糊实现视觉的 3D 效果

    本文较短,将介绍巧用模糊实现视觉 3D 效果的技巧. 我们都知道,在正常的视觉效果中,离我们越近的通常我们会看的越清晰,而离我们较远则相对没那么清晰~ 我们可以利用清晰与模糊两种状态来构建视差效果.像 ...

  5. vue 引用 tcplayer 做直播( 俩个例子,都可以用。替换直播地址即可,后端推流,前端观看。 )

    例子一比例子二更加容易被理解.另外 m3u8 也支持 webrtc 开头的直播地址. 补充JS 得下载到本地,自行引入: https://imgcache.qq.com/open/qcloud/liv ...

  6. WebService学习总结(五)--CXF的拦截器

    拦截器是Cxf的基础,Cxf中很多的功能都是由内置的拦截器来实现的,拦截器在Cxf中由Interceptor表示.拦截器的作用类似axis2中handle.Cxf的拦截器包括入拦截器和出拦截器,所有的 ...

  7. WEB漏洞——RCE

    RCE(remote command/code execute)远程命令/代码执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统. RCE漏洞 应用程序有时需要调用一 ...

  8. GDAL的基本操作

    上一节简单介绍了GDAL,这一节将介绍一些GDAL的基本操作,如影像读写.波段提取.波段合成等.代码均用python编写. 1.遥感影像的读写 众所周知,遥感影像是以栅格形式存储的,GDAL中使用da ...

  9. Hamcrest 断言框架

    Hamcrest是一个为了测试为目的,能组合成灵活表达式的匹配器类库.用于编断言的框架,使用这个框架编写断言,提高可读性及开发测试的效率,提供了大量"匹配器"方法,每个匹配器用于执 ...

  10. BFD协议简介

    1. 背景 双向转发检测BFD(Bidirectional Forwarding Detection)是一种全网统一的检测机制,用于快速检测.监控网络中链路或者IP路由的转发连通状况. 为了保护关键应 ...