rem兼容挪动机器设备的方式示例

2020-10-15 10:38 jianzhan

序言

挪动端 rem 兼容计划方案回望总结

怎样应用 rem

rem 企业的测算参照 html 的根连接点 font-size开展测算,根连接点的字体样式转变,合理布局参照的 rem 网页页面也会相应开展放缩,此为 rem 合理布局的实质。

1. 动态性更改 html 的 font-size 值

基本上在每一个访问器都将 html 的 font-size 原始化 为 16px , 大家动态性更改的话能够临时将 16px 设定为 rem 兼容的根连接点 font-size 原始值。

那末怎样开展兼容动态性改动?

假设设计方案稿宽度 为 750px,大家界定了自身应用 1rem = 16px 的企业去合理布局,怎样兼容呢?

在 chrome 的 手机上 iphone 仿真模拟器宽度为 375px,恰好为设计方案稿的 1半,大家能够口算: 那时候的 1rem 应当等于原始化时 html 连接点 font-size 的1半,即 newFontSize = 16/2 = 8px,这样1半对1半不就兼容了吗...

从中获得公式 设计方案稿宽度/16px = 必须兼容的机器设备宽度/8px,可以看出 新的 font-size 是参照 当今的机器设备宽度与原设计方案稿的宽度,开展等比放缩的

最后获得 newFontSize = 16px * 必须兼容的机器设备宽度 / 原设计方案稿宽度

(function(doc, win) {
  var resizeEvt =
      "orientationchange" in window ? "orientationchange" : "resize",
    setRemResponse = function() {
      var vM = 750;
      var vfontSize = 16;
      var html = doc.documentElement;
      var newfontSize = (vfontSize * html.clientWidth) / vM;
      html.style.fontSize = newfontSize + "px";
    };
  doc.addEventListener("DOMContentLoaded", setRemResponse, false);
  win.addEventListener(resizeEvt, setRemResponse, false);
})(document, window);

2. 具体应用

将精确测量得出的btn 按钮的款式从 px变换 为 rem

.btn {
  width: 699px; /* 699/16 => 43.6875rem; */
  height: 90px; /* 90/16px => 5.625rem;  */
  background: rgba(90, 173, 246, 1);
  border-radius: 6px; /* 6/16=> 0.375rem; */
}

自身测算太繁琐,应用 scss 界定 涵数替代测算全过程

@function pxToRem($initialStyle) {
  @return $initialStyle/16 * 1rem;
}

那末上面的 css改变为:

.btn {
  width: pxToRem(699);
  height:pxToRem(90);
  background: rgba(90, 173, 246, 1);
  border-radius:pxToRem(6);
}

填补: vscode 的软件 cssrem 适用测算 将大家在 css,scss 中键入的 px 变换为 rem 企业,默认设置设定的 font-size 为 16px

测算方式形变,口算 rem

1. 简易剖析

剖析上1节大家最后获得 newFontSize = 16px * 必须兼容的机器设备宽度 / 原设计方案稿宽度

每次测算要除以 16 很是繁琐,大家若将 原始的 html 根连接点 font-size变成便捷测算的,总之它最后作为1个除数,变成是多少呢? 是不是 100 更加便捷呢?对了!

const oHtml = document.documentElement;
const clientWidth = oHtml.clientWidth;
var vM = 750;
var vfontSize = 100;
// 挪动机器设备
oHtml.style.fontSize = (vfontSize * clientWidth) / vM + "px";

2. 具体应用

還是上眼熟悉的那个 btn, 将px变换 为 rem, 口算得出結果。

.btn {
  width: 699px; /* 699/100 => 6.99rem; */
  height: 90px; /* 90/100 => 0.9rem;  */
  background: rgba(90, 173, 246, 1);
  border-radius: 6px; /* 6/100=> 0.06rem; */
}

迫不得已说,有了 scss 是真的便捷!

@function reduced100($initialStyle) {
  @return $initialStyle/100 * 1rem;
}

那末上面的 css涵数方式改变为:

.btn {
  width: reduced100(699);
  height:reduced100(90);
  background: rgba(90, 173, 246, 1);
  border-radius:reduced100(6);
}

如何,rem 原先便是这么简易!!!

专用工具涵数

上面的方式,2选其1便可以了,终究如今 javascript 的 实行高效率不差!

(function(doc, win) {
  var resizeEvt =
      "orientationchange" in window ? "orientationchange" : "resize",
    setRemResponse = function() {
      var vM = 750;
      var vfontSize = 16;
      var html = doc.documentElement;
      var newfontSize = (vfontSize * html.clientWidth) / vM;
      html.style.fontSize = newfontSize + "px";
    };
  doc.addEventListener("DOMContentLoaded", setRemResponse, false);
  win.addEventListener(resizeEvt, setRemResponse, false);
})(document, window);

以上便是本文的所有內容,期待对大伙儿的学习培训有一定的协助,也期待大伙儿多多适用脚本制作之家。