注意是网页,而不是 App
常见国内移动端浏览器
手机浏览器内核基本都是 webkit
,只不过国内的重新封装了一层,所以谷歌浏览器自带的 Inspect Device
检测不出国内浏览器。
- 微信内置、qq浏览器:
X5内核
,由腾讯开发的。
- 一加自带浏览器: X5内核 037322GPU-M,目前我的是这个版本,问题好多,
vue
已经用babel
转了,但还是不支持,不知道为什么 - QQ浏览器: X5内核 038615GPU-UU,目前我的是这个版本
- UC浏览器: U4内核,由 UC 自主开发
由于移动端浏览器的五花八门,经常会遇到莫名其妙的 bug , 我们需要好用的调试工具,看下文。
调试工具
- BrowerSync: 可以同时在PC、平板、手机等设备下进项调试,需要电脑和手机在同一
wifi
下 Weinre
: 功能与 Chrome DevTools 相似,需要在页面中插入一段 JS 脚本来实时调试页面 DOM 结构、样式、JS 等,另外它使用的是代理的方式,所以兼容性很好,无论是新老设备系统通吃。如果你的手机安装了 Chrome 浏览器,那么可以通过 USB 用 Chrome DevTools 调试,但是国内的手机用的浏览器在 Chrome DevTools 上无法识别,所以可以用过Weinre
调试。详细可参考 这儿,利用此工具可以调试这些:- dom 元素
- network 监听
- source 打断点
- console 查看日志
fiddle
等代理工具,通过usb
连接。我没成功…
响应式问题
现代浏览器我们直接使用了 vw
,创建了一个 px
转 vw
的函数,然后在 scss
中使用对应的像素值。
1 | @function px2vw($number) { |
使用:
1 | .box { |
以下情况需要酌情使用 @media
:
- 如果需要适配
ipad
,因为这个屏幕比手机大很多,所以最好用@media
修改下页面布局。不用@media
直接让等比缩放也勉强可以接受。 - 用
css
写了特殊样式,比如说写一个 三个横杠的菜单图标,我们要为每个横杠设置高度,这个值一般比较小,直接上面的px2vw
函数最后可能生成的是带小数的px
,在手机端你会发现三个横杠不一样高。这时候我们需要用@media
设置整数的高度
1px border 问题
利用伪类 和 transform
的 scale
scss mixin:
1 | @mixin border1px ($color){ |
js :
1 | var dpr = Math.floor(window.devicePixelRatio || 1); |
上面的例子是四个方向都有 border
,若只有一个方向的,比如 border-top
,js 部分不变, scss 部分为 :
1 | @mixin border1px-top ($color){ |
最小字体限制
移动端浏览器没有 pc 浏览器最小字体 12px
的限制,可以直接指定小于 12px
的字体
图片问题
图片模糊问题:
有些手机屏幕是高清屏,比如说
iphone
系列,现在它的主流dpr
是 2 和 3 ,所以如果我们要用图片的话需要使用 2倍图 和 3倍图,不然高清屏下图片会模糊。当然用
svg
也是可以的,svg
号称不会失真 , 但我在用iphoneX
下有个小图标竟然有些模糊,原因不明…很纳闷大图问题:
设计mm截的图有些
svg
有些大。对于这些svg
, 设计mm就帮我改成了jpg
或png
, 图片变小了一些,但还有部分大小还是有些大。然后我用了 压缩图片工具,这个工具压缩后的图片不会修改图片的分辨率,所以不会影响图片的清晰度。它的原理是减少了原本图片里使用的颜色数量,肉眼是看不出来区别的。
Svg
大小问题:svg
文件中不要设置固定px的width
与height
(如果设置了,svg
就不会根据img
标签设置的宽高变化了),可以设值为 100% 。用viewBox
来描述svg
的宽高比就行了。然后在引用
svg
的img
标签上设置宽高,或者只设置其中的一个。本来设计mm给我的svg
有固定的宽高,我手动改成了 100% ,其他手机浏览器下可以自动缩放适应,但在IOS
下这些改过的没有缩放,最后通过添加下面样式解决:1
2
3
4// 父容器
.parent {display: flex;}
// svg
.icon {flex-shrink: 0;}
个别机型问题
UC
、QQ
、360
、Chrome
… 浏览器首屏工具栏问题:
若需要做首屏占满屏幕:
我用
vh
来实现占满屏幕,底部的工具栏会盖住一部分内容,但如果滚动到最底部,工具栏却不会盖住内容,应该是浏览器对vh
的支持不太友好。针对首屏被盖住内容的部分,按下面处理:1
2
3
4
5
6let browser = navigator.userAgent;
if (browser.indexOf('MQQBrowser') !== -1 || browser.indexOf('UCBrowser') !== -1 || browser.indexOf('Chrome') !== -1) {
// 不知道工具栏具体的高度,所以是大概的给需要改变位置的元素加了 50px
let downSignEle = document.querySelector('.down-sign');
downSignEle.style.bottom = parseInt(getComputedStyle(downSignEle)['bottom']) + 50 + 'px';
}用
js
计算屏幕可见高度,建议这种方式,各种浏览器下都会统一1
2
3let screenH = document.documentElement.clientHeight;
let firstPageEle = document.querySelector('.first-page');
firstPageEle.style.height = screenH + 'px';
IOS
系统下滚动不流畅,添加下面的样式:1
2
3height: 100%;
overflow: scroll;
-webkit-overflow-scrolling: touch;IOS
点击去除灰色选中效果,添加样式:1
-webkit-tap-highlight-color: rgba(0,0,0,0);
UC
下text-align:center
无效
使用的UIkit
的banner
中text-align:center
生效,但自己写的却不生效,对比样式发现没啥区别,没找到原因,最后用了下面的方案实现center
效果,有哪位大佬知道请留言。1
2display: flex;
justify-content: center;