苹果手机对网页上样式为position:fixed的弹窗支持不好的解决办法
在Web页面上,如果想模拟对话框效果,一般会给div元素添加position:fixed的样式来实现,然后给背景添加一个半透明的遮罩。如:
.fixedDiv {
position: fixed;
top:;
right:;
left:;
margin: 0 auto;
height: 100%;
width: 100%;
background-color: rgba(0, 0, 0, 0.6);
z-index:;
} .fixedDiv .fixedContent {
max-width: 26.5rem;
width: 85%;
background-color: #fff;
color: #333;
transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
position: absolute;
top: 50%;
left: 50%;
border-radius: 4px;
overflow: hidden;
}
HTML代码:
<div class="fixedDiv">
<div class="fixedContent"></div>
</div>
这种结构在大部分浏览器和移动设备上显示都没有问题,但是在苹果手机(safari mobile)上,当底部的键盘或者选择器(日期选择,下拉列表选择等)出现时,会将position:fixed的元素的初始位置改变,当键盘和选择器被关掉后,弹窗上原有的按钮和文本框无法被点中。
一个比较好的解决办法是尽量不用position:fixed的样式来定义对话框。但是这样一来就要求对话框的html代码在body中出现的位置不能随意。你可以使用position:absolute样式来定义对话框,但是position:relative的元素出现的位置决定了对话框在页面中的绝对位置。这显示很不灵活。
另外我也尝试过在网上去搜索一些其它的解决办法,但都不是特别有效。例如:https://dansajin.com/2012/12/07/fix-position-fixed/ 这篇文章介绍的方法就是给input元素添加focus和blur事件,在这两个事件中来切换对话框的样式,从而规避position:fixed样式所带来的问题。
还有一个办法是给body添加position:fixed样式,我试了一下好像并没有什么效果。
然后回到第一种解决方法,能不能使用position:absolute,然后通过其它样式来指定相对于哪个元素进行绝对定位呢?我查找了一下,貌似还真有这个提案,不过也仅仅只是提案,并没有被W3C广泛采纳,至少市面上绝大部分浏览器是不支持的。这里是一些相关介绍:
https://developer.mozilla.org/en-US/docs/Web/CSS/element
通过仔细观察,其实每次当对话框中的input(或者其它输入控件如select,textarea等)失去焦点后,手动上下滑动一下屏幕,然后再点击其它的控件,就没有问题。那么我们能够通过代码来模拟这一操作呢?答案是肯定的!
$("div.sqDetail").on('blur', 'input,select,textarea', function () {
setTimeout(function () {
// 当失去焦点的时候让滚动条滚动1次,
// 这个是为了兼容'position:fixed'样式在ios上的问题
window.scroll(0, $(window).scrollTop() + 1);
}, 50);
});
上面这段代码选择"div.sqDetail"元素里面的所有input,select和textarea,并添加blur事件,当失去焦点时,将页面滚动条滚动一下。随后我在iPhone上试了一下,发现有效果,再也不会为点不中弹框里的按钮和文本框而烦恼了!
苹果手机对网页上样式为position:fixed的弹窗支持不好的解决办法的更多相关文章
- IOS系统对fixed定位支持不好的解决方法
问题: IOS 中所有浏览器,当页面上的输入框获得焦点时,呼出键盘. 页面底部的导航栏(position:fixed)会被键盘顶到页面的中间. 而当输入框失去焦点时,导航栏停留在页面中间,造成页面错乱 ...
- 新手使用mac上的textedit写HTML时遇到的问题及解决办法
刚开始在mac上学习HTML,总结一下遇到的问题和解决办法 问题:使用textedit编写html,在网页上却仍然显示的是代码. 解决办法: 打开textedit后打开文本编辑 选择偏好设置 按如图所 ...
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128) 解决办法
最近在用Python处理中文字符串时,报出了如下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ...
- asp.net mvc 部署在IIS7.5上出现的[没有相关的源行]错误的解决办法
今天在IIS7.5上部署一个MVC小项目的时候出现以下错误:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET File ...
- 微信小程序上传后发布或者体验版测试无数据解决办法
在做微信小程序开发的过程中,发现小程序在本地调用接口的数据都显示,但是上传之后,发现手机体验没有数据.以下为解决办法: 1.先清除缓存试试. 2.打开微信小程序工具右上角的详情——项目设置,将“不校验 ...
- jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法(ajaxfileupload.js第四弹)
第四弹的诞生完全不在自己最初的计划之中,是有个网友看了先前关于<ajaxfileupload.js系列>的文章后提出的问题,由于自己一直是用chrome浏览器去测试demo,完全忽略IE浏 ...
- 在安卓上,微信公众号无法分享到QQ的解决办法之一
今天做一个微信公众号分享功能,参考微信sdk,代码几乎没有任何问题,但就是分享到QQ失败,以下是我QQ分享部分的代码: wx.onMenuShareQQ({ title: '快来和我一起玩转大脑', ...
- 上传文件,经过Zuul,中文文件名乱码解决办法
转载请标明出处: http://blog.csdn.net/forezp/article/details/77170470 本文出自方志朋的博客 问题描述 在项目中又一个上传文件的oss服务,直接调用 ...
- zblog上传安装主题插件不成功的原因和解决办法
最近有不少zblog用户反映在后台上传安装主题或者插件的时候出现了问题.本文就来尝试说明下这类问题的原因和解决办法. 首先来说说zblog主题或者插件的安装方法,一共有三种方式: 第一种是直接在网站后 ...
随机推荐
- Android 里的adb命令
ADB的全称为Android Debug Bridge,就是起到调试桥的作用. adb调试手机需要把usb调试打开 Android studio模拟器有的也要把模拟器usb调试打开,工具要灵活运用, ...
- wampserver一系列问题总结
总结下之前wampserver集成包安装的问题. windows sever 2008 R2 64,wampserver3.1.4_x64. 在安装的过程,有选择默认浏览器和编辑器,这些安装步骤简单, ...
- 百度APP移动端网络深度优化实践分享(一):DNS优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...
- webpack学习笔记一:安装webpack、webpack-dev-server、内存加载js和html文件、loader处理非js文件
一 .webpack学习环境准备: 1:window系统 2:安装node.js 官方网址 下载好后下一步下一步安装即可 安装步骤略过....... 3:nrm的安装 打开cmd命令控制台 输入:n ...
- Python300篇电子书免费送
此电子书集合由猪哥整理,免费发布于微信公众号:裸睡的猪. 此电子书集合将持续更新,获取最新电子书集合请关注微信公众号:裸睡的猪,回复:电子书此电子书集合仅用作个人学习,请勿用于商业获利!!! 获取方式 ...
- mysql的学习笔记(二)
1.数据类型,存储的类型. 整型 TINYINT 有符号-128到127 无符号值:0到255 1字节 SMALLINT 有符号 -32768到32767 0到65535 2字节 MEDIUMINT ...
- 从零开始学习PYTHON3讲义(十四)写一个mp3播放器
<从零开始PYTHON3>第十四讲 通常来说,Python解释执行,运行速度慢,并不适合完整的开发游戏.随着电脑速度的快速提高,这种情况有所好转,但开发游戏仍然不是Python的重点工作. ...
- SmartCode 正式开源,不只是代码生成器!
SmartCode(https://github.com/Ahoo-Wang/SmartCode) SmartCode = IDataSource -> IBuildTask -> IOu ...
- cocos creator主程入门教程(十)—— A*寻路
摘要: 五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍A*寻路算法.在RPG.SLG.模拟经营类游戏,有需要给角色寻路的需求,一般寻路我们采 ...
- iOS weak底层实现原理
今年年底做了很多决定,离开工作三年的深圳,来到了上海,发现深圳和上海在苹果这方面还是差距有点大的,上海的市场8成使用swift编程,而深圳8成的使用OC,这点还是比较让准备来上海打拼的苹果工程师有点小 ...