viewport 视口(可视区窗口)设置详解
当我们试图在iPhone中输出屏幕宽度的时候,会发现屏幕宽度是980,居然和pc屏幕宽度差不多大
苹果主导的这些手机厂商,为了使用户获得完整的WEB体验,很多设备都会欺骗浏览器返回一个数值较大的视口,告诉浏览器,别以为我身子小,但是我想以980px宽度显示这个页面(分辨率和视口没有关系(开发中根据视口来算的))
视口对于我们实现响应式是很不方便的。980太大了,不符合我们心中的期待,我们心中认为手机屏幕尺寸应该在320到400之间
默认不设置viewport一般可视区宽度在移动端是980,所有的手机响应式网站,都要加上meta viewport视口约束标记
解决这个问题只要约束视口即可:
<meta content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0,user-scalable=no" name="viewport" id="viewport" />
一个id和name为 viewport的meta元标记,就表示现在要约束视口了
那么具体约束的规则写在content中,每个约束规则用逗号隔开:
width=device-width 命令视口的宽度,变为设备的宽(以1024*768屏幕为标准 iPhone等手机通常为320到380之间),(number||device-width)
initial-scale=1.0 命令视口默认的缩放等级为1(可以设置为任何数字,以倍数计算,IOS10没效果)
minimum-scale=1.0 命令视口最小缩放等级为1(可以设置为任何数字,以倍数计算,IOS10没效果)
maximum-scale=1.0 命令视口最大缩放等级为1(可以设置为任何数字,以倍数计算,IOS10没效果)
user-scalable=no 不允许用户缩放页面(yes||no)(可以设置为任何数字,以倍数计算,IOS10没效果)
其他的一些设置
强制横屏或者竖屏设置(X5内核的浏览器才支持)
可以设置为protrait(竖屏)和andscape(横屏)
<meta name="x5-orientation" content="portrait" />
设置全屏(X5内核有效)
<meta name="x5-fullscreen" content="true" />
UC浏览器强制竖屏或者横屏显示
可以设置为protrait(竖屏)和andscape(横屏)
<meta name="screen-orientation" content="portrait">
UC全屏显示
<meta name="full-screen" content="yes">
其他浏览器下如果要屏蔽横屏显示的功能,可以使用陀螺仪的方法来做,具体查看:移动端页面的陀螺仪操作这篇文章
<meta name="format-detection" content="telephone=no, email=no" />
禁止移动端电话号码和邮箱的识别
<meta name="format-detection" content="telephone=no, email=no" />
上面的设置是全局设置,如果说页面中有 一个地方需要识别电话号码和邮箱那么可以使用下面这样设置
<a href="tel:18888888888">请拨打电话18888888888</a>
<a href="mailto:motao@motao.com">请发送邮件</a>
移动端页面开发常见的一些问题(开发之前需要先重置以下样式)
清除input,a,button等标签的点击阴影
在移动端input,a,button这三个标签点击的时候都会默认有阴影,那么怎么去掉或者替换其他的阴影样式呢,可以使用下面这个属性进行设置(下面是去除阴影)
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
<style>
a,
input,
button{
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
</style>
<body>
<a href="http://miaov.com">妙味课堂-我是莫涛</a>
<input type="button" value="按钮">
</body>
清除按钮的圆角
在移动端input和button这两个标签都会默认有圆角,可以使用下面两个样式去除
input,
button {
-webkit-appearance: none;
border-radius: 0;
}
<style>
a,
input,
button{
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
}
input,
button {
-webkit-appearance: none;
border-radius: 0;
}
</style>
<body>
<a href="http://miaov.com">妙味课堂-我是莫涛</a>
<input type="button" value="按钮">
</body>
选中文字设置(设置为不选中)
安卓不兼容这个属性,可以使用事件来兼容
-webkit-user-select: none;
禁止文字缩放
-webkit-text-size-adjust: 100%;
默认字体设置
因为移动端,每个手机默认的字体都不一样,所以需要重置一下,至于重置什么样的字体自己来定
font-family: Helvetica;
Font Boosting
在一段文字我们没有给他设置高度的时候,在webkit内核下,文字的大小被浏览器放大了,解决办法:设置高度或者设置最大高度max-hieght
固定定位在移动端的问题
移动端IOS回弹的问题
IOS下overflow的问题
就是是说body下某个元素超过页面宽度后,即使body设置了overflow为hideen,在IOS下也没有用,解决办法就是将body下的所有子元素包裹在一个div上
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,user-scalable=no">
<title>Document</title>
<style type="text/css">
html {
height: 100%;
overflow: hidden;
}
body {
height: 100%;
margin: 0;
overflow: hidden;
position: relative;
}
.wrap {
height: 100%;
overflow: auto;
}
header {
position: absolute;
width: 200%;
height: 40px;
background: rgba(0, 0, 0, .5);
color: #fff;
text-align: center;
}
section {
padding-top: 40px;
}
</style>
</head>
<body>
<div class="wrap">
<header>我是一个头部</header>
<section>
页面内容<br/>
</section>
</div>
</body>
</html>