在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://discourse.wicg.io/t/position-an-element-relatively-to-another-element-from-anywhere-in-the-dom/968

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的弹窗支持不好的解决办法的更多相关文章

  1. IOS系统对fixed定位支持不好的解决方法

    问题: IOS 中所有浏览器,当页面上的输入框获得焦点时,呼出键盘. 页面底部的导航栏(position:fixed)会被键盘顶到页面的中间. 而当输入框失去焦点时,导航栏停留在页面中间,造成页面错乱 ...

  2. 新手使用mac上的textedit写HTML时遇到的问题及解决办法

    刚开始在mac上学习HTML,总结一下遇到的问题和解决办法 问题:使用textedit编写html,在网页上却仍然显示的是代码. 解决办法: 打开textedit后打开文本编辑 选择偏好设置 按如图所 ...

  3. 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: ...

  4. asp.net mvc 部署在IIS7.5上出现的[没有相关的源行]错误的解决办法

    今天在IIS7.5上部署一个MVC小项目的时候出现以下错误:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET File ...

  5. 微信小程序上传后发布或者体验版测试无数据解决办法

    在做微信小程序开发的过程中,发现小程序在本地调用接口的数据都显示,但是上传之后,发现手机体验没有数据.以下为解决办法: 1.先清除缓存试试. 2.打开微信小程序工具右上角的详情——项目设置,将“不校验 ...

  6. jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法(ajaxfileupload.js第四弹)

    第四弹的诞生完全不在自己最初的计划之中,是有个网友看了先前关于<ajaxfileupload.js系列>的文章后提出的问题,由于自己一直是用chrome浏览器去测试demo,完全忽略IE浏 ...

  7. 在安卓上,微信公众号无法分享到QQ的解决办法之一

    今天做一个微信公众号分享功能,参考微信sdk,代码几乎没有任何问题,但就是分享到QQ失败,以下是我QQ分享部分的代码: wx.onMenuShareQQ({ title: '快来和我一起玩转大脑', ...

  8. 上传文件,经过Zuul,中文文件名乱码解决办法

    转载请标明出处: http://blog.csdn.net/forezp/article/details/77170470 本文出自方志朋的博客 问题描述 在项目中又一个上传文件的oss服务,直接调用 ...

  9. zblog上传安装主题插件不成功的原因和解决办法

    最近有不少zblog用户反映在后台上传安装主题或者插件的时候出现了问题.本文就来尝试说明下这类问题的原因和解决办法. 首先来说说zblog主题或者插件的安装方法,一共有三种方式: 第一种是直接在网站后 ...

随机推荐

  1. Android 里的adb命令

    ADB的全称为Android Debug Bridge,就是起到调试桥的作用. adb调试手机需要把usb调试打开 Android studio模拟器有的也要把模拟器usb调试打开,工具要灵活运用, ...

  2. wampserver一系列问题总结

    总结下之前wampserver集成包安装的问题. windows sever 2008 R2 64,wampserver3.1.4_x64. 在安装的过程,有选择默认浏览器和编辑器,这些安装步骤简单, ...

  3. 百度APP移动端网络深度优化实践分享(一):DNS优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<一>DNS优化>,感谢原作者的无私分享. 一.前言 网络优化是客户端几大技术方 ...

  4. webpack学习笔记一:安装webpack、webpack-dev-server、内存加载js和html文件、loader处理非js文件

    一 .webpack学习环境准备: 1:window系统 2:安装node.js  官方网址 下载好后下一步下一步安装即可 安装步骤略过....... 3:nrm的安装 打开cmd命令控制台 输入:n ...

  5. Python300篇电子书免费送

    此电子书集合由猪哥整理,免费发布于微信公众号:裸睡的猪. 此电子书集合将持续更新,获取最新电子书集合请关注微信公众号:裸睡的猪,回复:电子书此电子书集合仅用作个人学习,请勿用于商业获利!!! 获取方式 ...

  6. mysql的学习笔记(二)

    1.数据类型,存储的类型. 整型 TINYINT 有符号-128到127 无符号值:0到255 1字节 SMALLINT 有符号 -32768到32767 0到65535 2字节 MEDIUMINT ...

  7. 从零开始学习PYTHON3讲义(十四)写一个mp3播放器

    <从零开始PYTHON3>第十四讲 通常来说,Python解释执行,运行速度慢,并不适合完整的开发游戏.随着电脑速度的快速提高,这种情况有所好转,但开发游戏仍然不是Python的重点工作. ...

  8. SmartCode 正式开源,不只是代码生成器!

    SmartCode(https://github.com/Ahoo-Wang/SmartCode) SmartCode = IDataSource -> IBuildTask -> IOu ...

  9. cocos creator主程入门教程(十)—— A*寻路

    摘要: 五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍A*寻路算法.在RPG.SLG.模拟经营类游戏,有需要给角色寻路的需求,一般寻路我们采 ...

  10. iOS weak底层实现原理

    今年年底做了很多决定,离开工作三年的深圳,来到了上海,发现深圳和上海在苹果这方面还是差距有点大的,上海的市场8成使用swift编程,而深圳8成的使用OC,这点还是比较让准备来上海打拼的苹果工程师有点小 ...