Skip to content
On this page

移动端适配

HTML5 viewport

在做移动端开发时,为了使移动端的页面在不同的手机上同样的大小来显示,我们可以将页面的宽度固定,然后获取设备的宽度,可以得到我们之前设定的宽度与设备宽度的比例,再使用HTML5新增的viewport来对页面进行缩放,并固定不允许用户再重新缩放。

使用meta标签时,可以添加viewport(可视区窗口)属性:

html
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,minimum-scale=1.0,user-scalable=0" />1

content中可填以下属性:

属性名备注
width设置可视区的宽度,为一个正整数,使用字符串”width-device”表示设备宽度
initial-scale设置页面的初始缩放值
minimum-scale允许用户的最小缩放值
maximum-scale允许用户的最大缩放值
height设置可视区的高度,这个属性对我们并不重要,很少使用
user-scalable是否允许用户进行缩放,值为”no”或”yes”, no 代表不允许,yes代表允许
target-densitydpi值可以为一个数值或 high-dpi 、 medium-dpi、 low-dpi、 device-dpi 这几个字符串中的一个

注意

target-densitydpi 属性为安卓特有,并且安卓已经决定要废弃这个属性了,所以这个属性我们要避免进行使用 。

meta标签扩展:

html
<!-- width=device-width //可视区宽等于设备宽 user-scalable=no禁止用户缩放,ios10无效  min/max 最小缩放比例和最大缩放比例-->
<meta name="viewport" content="user-scalable=no,width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">

<!-- 强制x5内核竖屏显示(QQ/微信/QQ浏览器内置的内核就是x5内核) content="landscape"强制横屏 -->
<meta name="x5-orientation" content="portrait">

<!-- x5内核浏览器全屏显示 -->
<meta name="x5-fullscreen" content="true">

<!-- UC浏览器竖屏显示 -->
<meta name="screen-orientation" content="portrait">

<!-- UC浏览器全屏显示 -->
<meta name="full-screen" content="yes">

<!-- 禁止识别电话号码和邮箱 -->
<meta name="format-detection" content="telephone=no,email=no">

百分比适配

百分比适配是通过给元素设置百分比的宽度进行适配,由于高度是固定的在不同分辨率的设备上显示也会有所差异

html
<style>
body{margin: 0;}
div{width: 25%;height: 100px;float: left;}
.div1{background: red;}
.div2{background: green;}
.div3{background: goldenrod;}
.div4{background: blue;}
</style>
<body>
  <div class="div1"></div>
  <div class="div2"></div>
  <div class="div3"></div>
  <div class="div4"></div>
</body>

viewport适配(推荐)

通过js创建meta标签并动态计算缩放比例,使得每个设备的显示宽度统一

html
<script>
(function(){
// alert(window.devicePixelRatio);//弹出设备的像素比
// window.screen.availWidth 返回当前屏幕宽度(空白空间)
// window.screen.availHeight 返回当前屏幕高度(空白空间)
// window.screen.width 返回当前屏幕宽度(分辨率值)
// window.screen.height 返回当前屏幕高度(分辨率值)
// window.document.body.offsetHeight; 返回当前网页高度
// window.document.body.offsetWidth; 返回当前网页宽度
  var w=window.screen.width;//获取device-width
  var targetW=320;  //把所有设备的宽度设置为320
  var scale=w/targetW;  //计算缩放比例
  var meta=document.createElement('meta');
  meta.name='viewport';
  meta.content='user-scalable=no, initial-scale='+scale+',minimum-scale='+scale+',maximum-scale='+scale;
  document.head.appendChild(meta);
})()
</script>

rem适配(推荐)

通过给根节点设置fontsize,来确定rem的值

html
<script>
(function(){
  //rem适配
  var html=document.documentElement;//获取html
  var hw=html.getBoundingClientRect().width;//获取html的宽
  console.log(hw);
  html.style.fontSize=hw/20+'px';
  // 给html设置fantasize为html宽度/20,说明1rem=1/20页面的宽度,可以根据设计稿确定,好算就行
})()
</script>