目前主流设计稿为iphone6或iphone8尺寸:750*1334
。目前主流的适配移动端页面方法:用rem
做单位,通过css3
媒体查询来改变html
中的font-size
值,或是根据dpr
的值修改viewport
中的scale
值。rem
是相对于 html
元素的 font-size
的一个单位。
1. 步骤
- 加重置样式
reset.css/normalize.css
确保字体设置及基础样式在各终端有相同的值。 - 通过
rem
的方式适配移动设备。
2. 思路
⑴ viewport
+rem
+ @media
viewport
是用户网页的可视区域,viewport
这个meta
标签(常用于定义页面的说明、关键字、最后修改日期和其他元数据,这些元数据将服务于浏览器来如何布局以及重载页面,搜索引擎以及其他网络服务),meta
标签在这里固定如下:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
然后通过@media
查询根据设备屏幕尺寸改变html
中的font-size
值来达到适配移动设备屏幕。需要适应页面大小的任何元素都使用 rem
为单位来定义。同时规定iphone6上使用 1rem = 20px
来换算。小于 375px 的设备上不做缩小处理,对大于375px 宽度的设备进行等比缩放。
html {
font-size: 20px;
}
@media only screen and(min-width: 400px) {
html {
font-size: 21.33333333px !important;
}
}
@media only screen and(min-width: 414px) {
html {
font-size: 22.08px !important;
}
}
@media only screen and(min-width: 480px) {
html {
font-size: 25.6px !important;
}
}
⑵ viewport
+rem
+js
+dpr
viewport
这个meta
标签根据dpr
值变化:
<meta name="viewport" content="initial-scale=X, maximum-scale=X, minimum-scale=X, user-scalable=no">
至于X
是什么,这个由dpr
决定。
通过上面的viewport
的scale
缩放比来达到适配移动设备屏幕。这种思路多需要JS
的配合,根据dpr
的值不断修改viewport
中的scale
值。
注:window.devicePixelRatio
表示当前显示设备的物理像素分辨率与设备独立像素的比,大于1。
并且通过这个方法还可以解决一像素边框的问题:
<html>
<head>
<title>1px question</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" id="WebViewport" content="initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
<style>
html {
font-size: 1px;
}
* {
padding: 0;
margin: 0;
}
.bds_b {
border-bottom: 1px solid #ccc;
}
.a, .b {
margin-top: 1rem;
padding: 1rem;
font-size: 1.4rem;
}
.a {
width: 30rem;
}
.b {
background: #f5f5f5;
width: 20rem;
}
</style>
<script>
var viewport = document.querySelector("meta[name=viewport]");
var scale = window.devicePixelRatio;
viewport.setAttribute('content', 'width=device-width, initial-scale=(1/scale), maximum-scale=(1/scale), minimum-scale=(1/scale), user-scalable=no');
var docEl = document.documentElement;
var fontsize = 10 * (docEl.clientWidth / 320) + 'px';
docEl.style.fontsize = fontsize;
</script>
</head>
<body>
<div class="bds_b a">下面的底边宽度是虚拟1像素的</div>
<div class="b">上面的边框宽度是虚拟1像素的</div>
</body>
</html>
转自:
http://baijiahao.baidu.com/s?id=1596834080269193528&wfr=spider&for=pc