下面這篇文章在這裡分享給大家的內容是關於行動端適配之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);
使用範例:
.c2 { border: 2px solid black; font-size: 1.28rem; }
.c3 { border: 1px solid black; font-size: 1.28rem; }
實際效果:
可以看出:
在DPR為1時, 其實什麼都可以的, 也就是我們正常在pc頁面上的寫法.
在DPR為2時:
不使用rem.js, 實際顯示效果就會是我們寫的2倍.
# 這也就是為什麼我們寫的1px的邊框在iPhone手機上常常看起來比較粗的原因.
#使用rem.js, 效果才是我們預期的.
附: 谷歌瀏覽器如何新增自訂模擬裝置
#總結:
使用這裡的rem. js後, 可以不用媒體查詢,
方便全域控制, 而且還可以解決iPhone下」1px邊框的問題」.
如果再結合postcss-pxtorem, sublime cssrem等插件的協助,
就可以像pc上一樣以px作為單位來書寫, 非常方便.
歡迎補充指正!
#相關推薦:
以上是行動端適配之rem.js的詳細內容。更多資訊請關注PHP中文網其他相關文章!