首頁 > web前端 > js教程 > 行動端適配之rem.js

行動端適配之rem.js

不言
發布: 2018-04-10 11:26:01
原創
3192 人瀏覽過

下面這篇文章在這裡分享給大家的內容是關於行動端適配之rem.js,具有一定的額參考價值,有需要的朋友可以參考一下

行動裝置網頁適配是一個麻煩事, 常見做法有媒體查詢, js控制等.
媒體查詢個人感覺比較冗餘, 可少量使用, 偏愛於js來控制.

下面是我自己總結的rem. js:

(function(doc, win) {

  // html元素字体
  // 这里基础字体设置为10在uc, WX上没效果,  不知道为什么
  // 设置为10时, dpr=1的手机, 宽度360, 计算出来html的字体大小为5px, 可能是字体太小了
  // 尽量设置大一些, 这样避免12px字体大小的限制
  var _rootFontSize = window._rootFontSize || 25;  // 默认不支持缩放
  var _remMetaScalable = typeof window._remMetaScalable === 'undefined' 
    ? false 
    : !!window._remMetaScalable;  var docEl = doc.documentElement,
    isIOS = navigator.userAgent.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),    // 只针对IOS设备
    dpr = isIOS ? Math.min(win.devicePixelRatio, 3) : 1,    // 计算缩放比
    scale = 1 / dpr,    // 检测支持的"缩放"事件
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';
  docEl.dataset.dpr = dpr;  // 被iframe引用时,禁止缩放
  dpr = window.top === window.self ? dpr : 1;  var metaEl = doc.createElement('meta');
  metaEl.name = 'viewport';  var metaElContent = 'width=device-width, ';  // 支持缩放
  if (_remMetaScalable) {
    metaElContent += 'initial-scale=' + scale;
  } else {
    metaElContent += (      'initial-scale=' + scale 
      + ',maximum-scale=' + scale 
      + ', minimum-scale=' + scale 
      + ', user-scalable=no');
  }
  metaEl.content = metaElContent;
  docEl.firstElementChild.appendChild(metaEl);  // 缩放/旋转设备检测函数
  var recalc = function() {
    var width = docEl.clientWidth;    // 750为设计用的宽度, 比如它以iphone6标准(宽750)
    // 此时, 按照设计稿的尺寸写就可以了
    // 如: 设计稿为100px, 那么就写4rem(100 / 25), 25是自己设置的
    // 也可以设置成100, 这样就写100px就写1rem
    docEl.style.fontSize = _rootFontSize * (width / 750) + 'px';
  };
  recalc();  if (!doc.addEventListener) return;
  win.addEventListener(resizeEvt, recalc, false);
})(document, window);
登入後複製

使用範例:

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport"
    content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"><title>rem</title><style type="text/css">
  .c1 {    border: 2px solid black;    font-size: 32px;  }

  .c2 {    border: 2px solid black;    font-size: 1.28rem;  }

  .c3 {    border: 1px solid black;    font-size: 1.28rem;  }</style><script type="text/javascript" src="rem.js"></script></head><body>
  <pre class="c1">
  .c1 {
    border: 2px solid black;
    font-size: 32px;
  }  
登入後複製
  .c2 {
    border: 2px solid black;
    font-size: 1.28rem;
  }  
登入後複製
  .c3 {
    border: 1px solid black;
    font-size: 1.28rem;
  }    
  
登入後複製

實際效果:
行動端適配之rem.js

可以看出:

在DPR為1時, 其實什麼都可以的, 也就是我們正常在pc頁面上的寫法.
在DPR為2時:

  1. 不使用rem.js, 實際顯示效果就會是我們寫的2倍.  
    # 這也就是為什麼我們寫的1px的邊框在iPhone手機上常常看起來比較粗的原因.

  2. #使用rem.js, 效果才是我們預期的.

: 谷歌瀏覽器如何新增自訂模擬裝置
行動端適配之rem.js


#總結:  
使用這裡的rem. js後, 可以不用媒體查詢,  
方便全域控制, 而且還可以解決iPhone下」1px邊框的問題」.
如果再結合postcss-pxtorem, sublime cssrem等插件的協助,  
就可以像pc上一樣以px作為單位來書寫, 非常方便.

歡迎補充指正!

#相關推薦:

行動端的慣性滑動&回彈Vue導覽列如何實作

js判斷是PC端還是行動端


以上是行動端適配之rem.js的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板