web页面的自适应开发,要求就是跨平台,跨浏览器,一般mobile+pc,前几天写了几个pc端全屏页面,用的是百分比,在手机上看了下效果 相去甚远。这么看来mobile+pc 的自适应 有些时候就是个伪命题。
那对于移动端的自适应就 一般的宣传页面全屏滑动那种,用百分比,若复杂了就肯定不行,仔细看了下某淘的处理用的rem为单位,就学习在这个方法吧首先对于设计图,width 一般是640的。
rem:css3新增了一个相对单位rem(root em,根em),这样rem 就应该设定在html{font-size:1rem;},
某淘对此的设定是根据手机宽度设定的,
必不可少的这句:bc1ab745c054e9146b86a598017f15ed由js 控制的 。
首先是在苹果上不一样,苹果6就是
这样设置可以用 window.devicepixelratio 设备像素比
window.clientwitdh*window.devicepixelratio/10 ,这样就得出了font-size大小,
而andorid上有大部分就是、
bc1ab745c054e9146b86a598017f15ed
font-size就是 window.clientwitdh/10;
淘宝里使用的代码:
!function(j, i) {
function h() {
var d = e.getboundingclientrect().width;
d / b > 540 && (d = 540 * b);
var e = d / 10;
e.style.fontsize = e + "px",
z.rem = j.rem = e;
}
var g, f = j.document,
e = f.documentelement,
d = f.queryselector('meta[name="viewport"]'),
c = f.queryselector('meta[name="flexible"]'),
b = 0,
a = 0,
z = i.flexible || (i.flexible = {});
if (d) {
console.warn("将根据已有的meta标签来设置缩放比例");
var y = d.getattribute("content").match(/initial\-scale=([\d\.]+)/);
y && (a = parsefloat(y[1]), b = parseint(1 / a))
} else {
if (c) {
var x = c.getattribute("content");
if (x) {
var w = x.match(/initial\-dpr=([\d\.]+)/),
v = x.match(/maximum\-dpr=([\d\.]+)/);
w && (b = parsefloat(w[1]), a = parsefloat((1 / b).tofixed(2))),
v && (b = parsefloat(v[1]), a = parsefloat((1 / b).tofixed(2)))
}
}
}
if (!b && !a) {
var u = (j.navigator.appversion.match(/android/gi), j.navigator.appversion.match(/iphone/gi)),
t = j.devicepixelratio;
b = u ? t >= 3 && (!b || b >= 3) ? 3 : t >= 2 && (!b || b >= 2) ? 2 : 1 : 1,
a = 1 / b
}
if (e.setattribute("data-dpr", b), !d) {
if (d = f.createelement("meta"), d.setattribute("name", "viewport"), d.setattribute("content", "initial-scale=" + a + ", maximum-scale=" + a + ", minimum-scale=" + a + ", user-scalable=no"), e.firstelementchild) {
e.firstelementchild.appendchild(d)
} else {
var s = f.createelement("p");
s.appendchild(d),
f.write(s.innerhtml)
}
}
j.addeventlistener("resize",
function() {
cleartimeout(g),
g = settimeout(h, 300)
},
!1),
j.addeventlistener("pageshow",
function(b) {
b.persisted && (cleartimeout(g), g = settimeout(h, 300))
},
!1),
"complete" === f.readystate ? f.body.style.fontsize = 12 * b + "px": f.addeventlistener("domcontentloaded",
function() {
f.body.style.fontsize = 12 * b + "px"
},
!1),
h(),
z.dpr = j.dpr = b,
z.refreshrem = h,
z.rem2px = function(d) {
var c = parsefloat(d) * this.rem;
return "string" == typeof d && d.match(/rem$/) && (c += "px"),
c
},
z.px2rem = function(d) {
var c = parsefloat(d) / this.rem;
return "string" == typeof d && d.match(/px$/) && (c += "rem"),
c
}
} (window, window.lib || (window.lib = {}));
以上就是移动端web页面自适应:rem的运用的详细内容。