王志勇 发表于 2019年02月26日 09:30

展开后:

但在IOS模拟器下,显示的样式如下:

于是前天晚上开始决定,一定要把select用HTML实现,用了不少于3个小时,终于完成,如下2图的效果。

展开后:

在各种浏览器下,下拉菜单都显示正常(如上图)。只有IE6下,下拉菜单会错位,如下图:
导致这个原因的产生,是很复杂的,为了解决这个错位的小问题,昨天和今天,用了不少于5个小时,终于解决了。工作中,有时就是为了一个看似很简单的小问题,一定要和这个小问题死拼到底,非要解决不可。
为什么会产生这个问题呢?因为模拟<select>,就必须用绝对定位position:absolute,使其悬浮起来,才能达到仿select效果。正好此处的位置,之前有个<center>标签将它包含住了,其错位的位置,IE正好是将<center>的居中位置,作为position:absolute的横向坐标的起点,我做了一个测试页,效果如下图:

上图中,翠绿色的层,就是在IE中错位的效果。下图是火狐、Chrome等浏览器下正常显示的效果:

说明火狐、Chrome等浏览器,position:absolute不受当前位置有<center>居中定义的影响。
为了解决这个问题,当中花费的5个小时以上,尝试了各种办法,主要是把这个交互层,切分为上、中、下3块。其中,中就是这个下拉菜单,但还是有各种问题,主要的问题在于由于被切分成上、中、下3块,使整个交互层的阴影效果难以设定,每个块都要需要单独设定阴影效果,还有个问题是在手机浏览器下,块之间有条水平线,在电脑下则没有这个问题。反复切分重构8-10次,都以失败告终,于是,放弃了这个方案。
昨晚睡觉前,突然想起<table>元素,能将<center>元素、或者很多样式表定义隔离。今天早晨做了尝试,果然见效,而且也不需要将交互层切分。这样,在IE下也不错位了。但还有个问题,position:absolute在火狐、Chrome等浏览器下的宽度会失效。于是给它定义宽度,定义完成之后,在IE下宽度又不一致。
最后,再想办法,上面的宽度定义保留,最后加一句,用JavaScript获取非position:absolute的宽度,将这个宽度传递给这个position:absolute的位置,方法如:
abc1.style.width=document.getElementById('abc2').clientWidth-2;
由于abc1.style.width=document.getElementById('abc2').clientWidth;语句的实测效果,在各种浏览器下,总是会多出2像素,所以最后减2。
为什么这个小问题会花费超过5个小时的时间?因为在上述的第5幅截图,下拉菜单有个“×收起”的按钮。昨天花了很多时间,本来是调试为在非下拉菜单的任意位置点击,下拉菜单会消失。调试中,这个功能有时会和右上角的语言下拉菜单冲突,暂时未解决,最后决定暂时用这个“×收起”的按钮。
本文只记录了心酸的繁重劳动的冰山一角。本文只涉及到前端的调整,后端的巨量开发,各种逻辑编排、数据库设计,很多没有像这样用文字表达出来。
自由勇 2019-02-27 08:05
是的,谢谢!
置顶的文章:
股骨头坏死的中早期修复方法
Windows流畅度300%以上体感的操作
超低价享受i7-7700的体验
家用电脑理性优化升级天梯图之2026
服务器版Linux系统的选择之2026
秒会+实战PHP程序设计培训(2)
如何快速自制CPU天梯图?
我不明白你明不明白我明白(明白不)
最好的音乐播放硬件
如何打造全静音台式电脑之2026
近期的主题:
“明白不”的心理机制(2)
博客/网页有没有必要做访问量统计?
数码评测(78):如何打造全静音台式电脑之2026
AI编程和人工编程的差别
世界上最好的二级域名
数码评测(77):最好的音乐播放硬件
博客新调整计划
人生讨论(28):滑翔伞运动
真玄学心得(26):最新消息
DIY(35-4):6路×2 USB全自动电脑切换器
特级干货(1-2):发质/脱发与内分泌研究
“更新提示”的好处/提醒用语
PHP和Java、CGI、Python的区别
前几天差点进入生活黑洞
为什么不要定义Web 3.0?
歌名含义最好的一首中文歌
实验测试结果
这一次的程序设计速度和防攻思路
关于是否撤文章的问题
程序的及时作用
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2025年-2026年03月(10)
2024年(13)
2023年 +