A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 大蓝鲸小蟀锅 于 2018-6-14 14:39 编辑
移动端rem自适应方案     

假设设计妹妹给我们的设计稿尺寸为750 * 1340。结合网易、淘宝移动端首页html元素上的font-size属性,html5设计稿尺寸以及前端与设计之间协作流程一般是这样的。

代码如下

引入:页面开头处引入下面这段代码,用于动态计算font-size
  • (function(doc, win) {
  •     var docEl = doc.documentElement,
  •         isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
  •         dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,
  •         dpr = window.top === window.self ? dpr : 1, //被iframe引用时,禁止缩放
  •         dpr = 1,
  •         scale = 1 / dpr,
  •         resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
  •     docEl.dataset.dpr = dpr;
  •     var metaEl = doc.createElement('meta');
  •     metaEl.name = 'viewport';
  •     metaEl.content = 'initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale;
  •     docEl.firstElementChild.appendChild(metaEl);
  •     var recalc = function() {
  •         var width = docEl.clientWidth;
  •         if (width / dpr > 750) {
  •             width = 750 * dpr;
  •         }
  •         // 乘以100,px : rem = 100 : 1
  •         docEl.style.fontSize = 100 * (width / 750) + 'px';
  •     };
  •     recalc()
  •     if (!doc.addEventListener) return;
  •     win.addEventListener(resizeEvt, recalc, false);
  • })(document, window);

使用: 未引入前

  • body {
  •    width: 750px;
  •    height: 640px;
  • }
引入后:除以100并将px换成rem
  • body {
  •    width: 7.5rem;
  •    height: 6.4rem;
  • }
换算的依据:
  • // 乘以100,px : rem = 100 : 1
  • var recalc = function() {
  •    var width = docEl.clientWidth;
  •    if (width / dpr > 750) {
  •        width = 750 * dpr;
  •    }
  •    // 乘以100,px : rem = 100 : 1
  •    docEl.style.fontSize = 100 * (width / 750) + 'px';
  • };



您需要登录后才可以回帖 登录 | 加入黑马