rem方法
(function (win,doc){
if(document.readystate="complete"){
handerRemFun();
}else{
document.addEventListener('DOMContentLoaded',handerRemFun,false);
}
win.addEventListener('resize',function(){
console.log("resize")
handerRemFun()
},false);
function handerRemFun(){
let isAndroid = navigator.userAgent.indexOf('Android') > -1 || navigator.userAgent.indexOf('Linux') > -1;
let isWeiXin=(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger')? true :false;
if(isAndroid && isWeiXin){
checkRemAndroidFun()
}else{
setFontSizeFun();
}
}
function checkRemAndroidFun(){
let fontSize=setFontSizeFun();
var elem = document.createElement('div');
elem.setAttribute('id','demoRem');
elem.style.cssText = 'width:1rem; height:0rem';
document.body.appendChild(elem);
let one_w=document.getElementById('demoRem').offsetWidth;
console.log("one_w",one_w,'fontSize',fontSize)
if(fontSize!=one_w){
console.log("安卓机,微信浏览器 重置字体大小")
if (typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function") {
handleFontSize();
} else {
if (document.addEventListener) {
document.addEventListener("WeixinJSBridgeReady", handleFontSize, false);
} else if (document.attachEvent) {
document.attachEvent("WeixinJSBridgeReady", handleFontSize);
document.attachEvent("onWeixinJSBridgeReady", handleFontSize);
}
}
}else{
console.log("安卓机,微信浏览器 不用重置大小")
setFontSizeFun();
}
document.getElementById('demoRem').remove();
}
function handleFontSize() {
WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : '2' },function(){
console.log("invoke")
setFontSizeFun()
});
WeixinJSBridge.on('menu:setfont', function() {
WeixinJSBridge.invoke('setFontSizeCallback', { 'fontSize' : '2' });
console.log("menu:setfont")
setFontSizeFun()
});
}
function setFontSizeFun(){
var html=doc.documentElement;
var w_c= html.clientWidth;
var fontSize=0;
if(w_c>750){
html.style.fontSize=100+'px';
}else{
html.style.fontSize=100*(w_c/750)+'px';
}
return fontSize;
}
})(window,document)
移动端单位适配有多种方案,以下是主要的适配方法:
1、rem 适配方案:如上
2、Flexble 方案(淘宝方案)
引入 lib-flexible
3、 PostCSS 插件方案
module.exports = {
plugins: [
require('postcss-pxtorem')({
rootValue: 37.5,
propList: ['*'],
exclude: /node_modules/i,
selectorBlackList: ['.norem']
})
]
}
.container {
width: 375px;
padding: 15px;
font-size: 16px;
}
.ignore-rem {
width: 100px;
border: 1px solid #000;
}
4、媒体查询方案
单文件媒体查询
@media (max-width: 374px) {
.container {
padding: 10px;
font-size: 14px;
}
}
@media (min-width: 375px) and (max-width: 414px) {
.container {
padding: 15px;
font-size: 16px;
}
}
@media (min-width: 415px) and (max-width: 768px) {
.container {
padding: 20px;
font-size: 18px;
}
}
@media (min-width: 769px) {
.container {
padding: 30px;
font-size: 20px;
}
}
多文件媒体查询
<link rel="stylesheet" href="base.css">
<link rel="stylesheet" href="tablet.css" media="(min-width: 768px)">
<link rel="stylesheet" href="desktop.css" media="(min-width: 1024px)">