WEB前端开发中,除了对PC端浏览器进行各浏览器兼容,移动端页面中android
端和ios
端的页面兼容也是有很多问题,特此整理一下遇到过的或者可能遇到的常见问题。
1. 解决页面使用overflow: scroll在iOS上滑动卡顿的问题
在滚动的容器中增加: -webkit-overflow-scrolling: touch
2. input输入框ios的光标问题
在ios上有时候看到光标和输入的文字错位比较明显 是因为设置了line-height
导致的解决办法: 使用padding去撑开需要的高度,不使用line-height
3. 移动端click事件300ms的延迟
移动设备上的web网页是有300ms延迟的,往往会造成按钮点击延迟甚至是点击失效解决方案:
fastclick
插件可以解决在手机上点击事件的300ms延迟- 使用
zepto
的tap事件也是为了解决在click的延迟问题 - 通过绑定
ontouchstart事件,touchstart --> touchmove --> touchend --> click
4. 在ios和andriod中,audio元素和video元素在无法自动播放
1 | $('html').one('touchstart',function(){ |
5. 如何在手机上实现弹出框弹出时,弹出框内可以上下滚动,背后的页面锁定不能滚动?
弹出模态框 html,body{ height:100%; overflow:hidden }
关闭模态框 html,body{ overflow: visble }
6. flex:固定宽度+flex:1 之后单行或多行省略不生效 在父级加 min-width:0
1 | <div class="wrap"> |
7. flex 多列布局中 将最后一列居右显示
1 | // flex 垂直方向 单独设置某一列对象方式时 可以使用 align-self:flex-end |
8. ios的input设置disabled属性后默认样式问题
1 | input:disabled, input[disabled]{ |
9. ios input自动填充后出现黄色背景问题
1 | // 解决ios浏览器中 input自动填充黄色背景问题 |
10. 鉴于clip裁切隐藏是最佳可访问隐藏
1 | .clip{ |
11. ios机型margin属性无效问题?
最底部元素的margin-bottom在safari里失效,直接padding代替margin
12. ios绑定点击事件不执行? ios手机,事件委托失效
添加样式cursor:pointer 消除背景的css -webkit-tap-highlight-color:transparent
$('body').on('click',selector,function(){})
点击无效时,只需要css设置 selector { cursor: pointer; }
即可
13. h5底部输入框被键盘遮挡问题
- 让dom元素出现在可见视图的顶部或底部
1
2
3
4
5
6
7
8
9// 需要加延迟 部分手机软键盘弹出有延迟
// scrollIntoView 使调用元素或获得焦点元素出现在视口中
// scrollIntoViewIfNeeded 将不在视口可见区域的元素滚动到视口可见区域,如果已在视口可见区域则不滚动
setTimeout(() => {
//1. ele.scrollIntoView(true)或scrollIntoView() // 滚动之后调用元素顶部与视口顶部尽可能平齐
// document.querySelector('#inputId').scrollIntoView()
//2. ele.scrollIntoViewIfNeeded() 同 ele.scrollIntoViewIfNeeded(true) 元素将在其所在滚动区的可视区域中居中对齐
document.querySelector('#inputId').scrollIntoViewIfNeeded()
}, 100)
14 .ios页面橡皮弹回效果遮挡页面选项卡?
(1) 有时body和html的height: 100%去除掉问题可能就没有了。
(2) 到达临界值的时候在阻止事件默认行为1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17var startY,endY;
//记录手指触摸的起点坐标
$('body').on('touchstart',function (e) {
startY = e.touches[0].pageY;
});
$('body').on('touchmove',function (e) {
endY = e.touches[0].pageY; //记录手指触摸的移动中的坐标
//手指下滑,页面到达顶端不能继续下滑
if(endY>startY&& $(window).scrollTop()<=0){
e.preventDefault();
}
//手指上滑,页面到达底部能继续上滑
if(endY<startY&& $(window).scrollTop()+
$(window).height()>=$('body')[0].scrollHeight){
e.preventDefault();
}
})
15. Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示
可通过加入 CSS 属性 -webkit-text-size-adjust: none; 解决
16. 屏蔽手机系统自带软键盘(用于自定义键盘)
<input type="text" autocomplete="off" unselectable="on" onpaste="return false" onfoucs="this.blur()" />
17. flex多行多列布局中,最后一行子项左对齐
1 | <!-- 弹性布局中,两端对齐,子项是多行时,最后一行 不对齐处理 想让最后一行左对齐 --> |
18. flex弹性布局中,img或者button等内容被压缩变形
1 | <style> |
19. 为每个元素之间添加border或margin
1 | <body> |