美文网首页
rem原理详解

rem原理详解

作者: 小松Fred | 来源:发表于2018-01-21 21:38 被阅读0次

rem原理是根据html的根字号来设置,rem是一个相对单位,就死相对这个根字号的,

不同的设备上动态的设置rem来适应不同的设备

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

这段代码的意思是,让viewport的宽度等于物理设备上的真实分辨率,不允许用户缩放;

可布局宽度=物理像素/dpr/initial-scale

设计中用的公式:

var ratio = window.devicePixelRatio;

var meta = document.getElementById("viewport");

meta.setAttribute("content",`width=device-width,initial-scale=${1/ratio},user-scalable=no`);

document.documentElement.style.fontSize=document.documentElement.clientWidth/750 *100+‘px’;

动态的根字号大小=设备的物理宽度/设计稿宽度*100(方便计算)

什么是Viewport

手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网页的不同部分。

width:控制 viewport 的大小,可以指定的一个值,如果 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素)。

height:和 width 相对应,指定高度。

initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。

maximum-scale:允许用户缩放到的最大比例。

minimum-scale:允许用户缩放到的最小比例。

user-scalable:用户是否可以手动缩放。

dpi和屏幕尺寸(英寸)以及分辨率有关系,dpi是每英寸有多少个点么 401 = sqrt(1080 * 1080 + 1920 * 1920) / 5.5,在开发中你不用关心它。‘写代码的时候只要关注dpr就可以了,网页的视口的大小是设备分辨率/dpr ,比如iphone 6p是1080p的,但是dpr是2.46,所以实际页面大小是440 * 780 这个分辨率对于苹果设备开发绝对是一个灾难,因为大部分1080p的设备的dpr都是3

viewport的作用即无视设备的真实分辨率,直接通过dpi,在物理尺寸和浏览器之间重设分辨率,这个分辨率和设备的分辨率无关。比如,你拿个3.5寸-320 * 480的iphone3 gs、3.5寸-640 * 960的iphone4或者9.7寸-1024*768的ipad2,虽然设备的分辨率不同,物理尺寸也不同,但你可以通过设置viewport让它们在浏览器里有相同的分辨率。比如说,你的网站是800px宽,你可以通过设置viewport的width=800,来让你的网站在这三个不同的设备上都刚好满屏显示你的网站。

例如iphone6的dpr是2,就是代码的1px实际上会占设备的2物理分辨率,所以chrome上iphone6显示的事375,单实际是750,

1)如果不显示地设置viewport,那么width的默认为980。如果页面的所有元素宽度都小于980,此时width为980,如果页面最宽的位置超过980,那么width等于最大宽度。总之,默认能将整个页面从左到右显示出来。如果设置了viewport,比如,只单纯地设置了user-scalable=no,例如,那么ios下width还是按980显示(即默认就会通过dpi缩放),但android和winphone下却不会再缩放了,浏览器分辨率和真实设置分辨率一致。

2)对于ios设备,设置width可以生效,但对于android,设置width并不会生效。ios设备,缩放的比率即dpi是通过你设置的width和设置真实分辨率自动计算的,而android下你设置width无效,你能设置的是一个特殊的字段target-densitydpi,关于target-densitydpi可以参考一下这篇文章:http://hi.baidu.com/j_fo/blog/item/748361279ebccd18908f9d7d.html。也就是说,有三个变量:浏览器width、设备真实width、dpi。 我们简单地用个公式来表达它们之间的关系吧(并非真实关系,简单说明用) 设备真实width * dpi = 浏览器width,这里的三个变量,设备真实width是个我们不能操作的已知值,另外两个变量我们可以设置一个来影响另一个,在ios中,我们能改的是浏览器width,dpi自动生成,而在android中,我们能改的是dpi,浏览器width自动生成。对于android,无论我们如何设置width,也不会对浏览器width产生影响。

相关文章

  • rem原理详解

    rem原理是根据html的根字号来设置,rem是一个相对单位,就死相对这个根字号的, 不同的设备上动态的设置rem...

  • web移动端REM适配

    一、REM适配原理 rem是相对单位,rem是相对于HTML标签的字号计算结果,1rem = 1HTML字号大小。...

  • 移动端适配-px转成rem

    原理 rem单位是相对于根节点的字体大小的,所以通过设置根节点的字体大小可以动态的改变rem的大小rem方案的原理...

  • rem详解

    rem的定义:相对长度单位。相对于根元素(即html元素)[font-size]计算值的倍数 一、rem的诞生 为...

  • 移动端兼容

    rem与px的转换 flexible.js 布局详解 rem自适应布局的回顾总结 flexible.js如何实现r...

  • LiveData

    LiveDataBus实现原理#用法详解#LiveData扩展 LiveDataBus实现原理#用法详解#Live...

  • HTTPS 原理详解

    HTTPS 原理详解白话httpsHttps流程和原理

  • vue移动端布局单位适配(postcss)

    一、需要解决的问题 二、rem单位与适配原理 px、em、rem区别介绍[https://www.runoob.c...

  • Mysql性能调优

    SQL执行原理详解 连接器详解 分析器详解 优化器详解 执行器详解 Innodb的Buffer Pool机制详解 ...

  • REM布局原理

    1 em、rem、meta标签的基本概念 em 是一个布局的长度单位,当前对象内文本的字体大小的相对单位,也就是说...

网友评论

      本文标题:rem原理详解

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