最近在维护一个使用VML画曲线的网站,在不同的IE下浏览效果不一样,特别是在IE8下,出现莫名其妙的样式显示问题:

1.曲线不可见!在IE9或IE7下,曲线正常绘制,但是在IE8下,不见坐标轴和曲线。

2.曲线位置偏移!在IE9或IE7下,曲线位置正常,但是在IE8下,曲线出现中断、偏移的情况。

3.曲线重叠!即在某一个水平线上,多条曲线(或其它VML对象)扎堆绘制或显示在一起。

本来对VML并不熟悉,以前的修改也是小打小闹,在网上找了下,也发现VML在IE8下的确是有不兼容的现象[1]。本机安装的IE9,以上三个问题都不存在。不过客户机器上的IE版本不一,比较头疼的还有许多用户使用的XP和Windows 2003的操作系统,无法升级到IE9。没办法只得想法解决。在虚拟机里安装了Windows 2003+IE8,并使用IETester+DebugBar一起调试分析。

首先,对于曲线不可见以及偏移的问题,是由于VML中的Group对象并没有指定其top,且在<style>声明中并没有指定其position属性。当设置

<style>
v\:*{behavior:url(#default#VML);position:absolute;}
</style>

其“position”为“absolute”,VML坐标和曲线已经显示出来,不过需要指定Group对象的top为0px才可以正确显示!

其次,对于曲线位置偏移与曲线重叠的问题,经过DebugBar的分析,是由于VML对象(Line、Rect等)的Top值不准确而产生的。此处比较怪异,在IE8和IE9下,通过“查看->源代码”得到的源代码是完全一致的!但是经过IETester查看“整理后的源代码”,则部分不一致!即在对象的位置上,top、height上不一样!在IE8上显示的曲线扎堆显示在坐标区域的上半部分,其TOP值与IE9下值不一样。IE8下,其值一直显示为

“TOP:1342177.27px”

而IE9下的TOP值则明显大于此值。后来经过查询[2]才知道,原来IE8下对大于它的值都更改为此值,即不能大于1342177.27px

此处问题原因找到了,因为在画曲线的过程中,为了便于控制和展示,将传递过来的数据进行了一定比例的放大,当要绘制的点相关属性大于1342177.27px 后,IE8强制设定为1342177.27px ,从而造成了显示重叠和偏移。因此只需要将放大比例缩小到一定程度或将数据按一定比例缩小就可以了。我使用了对其相关属性值的判断,如果大于1342177.27px ,则所有相关数据都缩小10倍。

问题解决!

总结:

解决这个问题,花费了整整三天的时间。此前项目组其他成员使用的时候也碰到这个问题,一时也没有找到解决办法,将这个缺陷留存起了。只是现在IE8的相对装机量太多(另外一个主要原因是我们还使用了SVG,它在IE6和IE7下呈现也不仅如意!IE真操蛋!),问题过于频繁,不得不解决。不过,对于微软的这种升级带来的问题,有的时候解决起来,真是太费力费神了。以前也有过Silverlight不兼容的问题,找了半天才发现原来是.NET Framework 4.5的问题。

解决问题的过程也是一个煎熬+收获的过程。煎熬是在IE8与IE9下查看源代码都一致但IE整理后的源代码不一致的时候,因为怎么解析html和执行javascript是IE内核的工作,我无法让IE8对大于1342177.27px 的值“别乱动手脚”,但是在问题的解决过程中,查找和解决问题的方法也是一种收获。何种情况下会想到在Google的搜索框里输入“1342177.27”呢!

此外,对于参考[1]中的三个建议,也不见得全部都不行,比如第1点、第2点,第3点则未验证!

参考文献

[1]wellioms.IE8中应用VML.

[2]司徒正美.浏览器对width与height的最大值限制.

转载于:https://www.cnblogs.com/RitchieChen/archive/2013/01/10/2854218.html

IE8下的VML显示问题解决方案相关推荐

  1. 在 IE8 下 EXT的显示问题

    在ie8下,点击左边的树形导航栏,在右面板中,弹出相对应的内容,这些内容都写在iframe中,但是在ie8下,需要随便在页面上点击一下鼠标,才能显示内容,换成Firefox和ie7,都能正常的显示,求 ...

  2. img图片下多余空白的BUG解决方案

    在进行页面的DIV+CSS排版时,遇到IE6(当然有时Firefox下也会偶遇)浏览器中的图片元素img下出现多余空白的问题绝对是常见的对于该问题的解决方法也是"见机行事",根据原 ...

  3. ie6、ie7、ie8下支持js 使用vml style.addRule('v\\:line,v\\:stroken',behavior:url(#default#VML);)

    ie6.ie7.ie8下支持js 使用vml 2010-11-17 10:52:40|  分类: 计算机和编程 |  标签:ie6.ie7.ie8下支持js  使用vml   |举报|字号 订阅 之前 ...

  4. Win10系统下软件UI显示不完整解决方案

    Win10系统下软件UI显示不完整解决方案 参考文章: (1)Win10系统下软件UI显示不完整解决方案 (2)https://www.cnblogs.com/wxjnew/p/5079726.htm ...

  5. 解决IE8下父容器背景图片不显示的问题

    我们发现在IE8下不能显示背景图片的原因是因为子容器使用了float浮动而没有真正闭合,这也是div无法自适应高度的一个原因.如果父div没有设float而其子div却设了float的话,父div无法 ...

  6. 在ie8下ext显示的问题

    在ie8下,点击左边的树形导航栏,在右面板中,弹出相对应的内容,这些内容都写在iframe中,但是在ie8下,需要随便在页面上点击一下鼠标,才能显示内容,换成Firefox和ie7,都能正常的显示,求 ...

  7. IE8下MSPAINT保存的PNG显示不正常

    一个页面,用的css的background-url显示图片,图片最开始是png格式,用chrome和ie9显示正常,ie8的颜色老是不对,如果把png保存为24位色bmp就没问题,但是用mspaint ...

  8. VML绘制的图形在IE8下不见了

    最近发现使用VML绘制的图形在IE8下不见了,需要将IE8的Document Mode改为IE7 Standard才可以,或者你需要在页面添加这个信息: <metahttp-equiv=&quo ...

  9. ie8下jquery改变PNG的opacity出现黑边,ie6下png透明解决办法

    目前互联网对于网页效果要求越来越高,不可避免的用到PNG图片,PNG分为几种格 式,PNG8 PNG24 PNG32,其中最常用的,也是显示效果和大小比较适中的则是PNG24,支持半透明,透明,颜色也 ...

最新文章

  1. 实验二 164 张增进
  2. Android艺术——性能优化问题
  3. QT的QSqlTableModel类的使用
  4. 主机挂载存储_备战CKA每日一题——第3天 | 对接CSI存储知识
  5. maven 聚合工程 用spring boot 搭建 spring cloud 微服务 模块式开发项目
  6. 如何在opengl用代码绘制英文_如何用AIPS直接绘制服装款式图(线稿)
  7. 「CSDN 2020年度博客之星」总榜单在此揭晓
  8. tableview cell自适应撑高
  9. 非常详细的机器学习知识点汇总(一)
  10. JMeter数据库操作详解
  11. 【期权机理与python实践】
  12. 真正拖垮你的,是沉没成本
  13. c#语言猜数字游戏,C#实现简易猜数字游戏
  14. java short相加_为什么两个short类型相加会自动提升为int?
  15. 小米6与xp系统不能连接服务器,小米6如何连接XP电脑
  16. nasm做一个简单的操作系统写字本(3)
  17. 计算机操做系统(十二):进程同步和互斥
  18. 亿级流量实验平台设计与实践
  19. 数字IC面试总结(大厂面试经验分享)
  20. 攻防世界-- web高手进阶区-- writeup汇总

热门文章

  1. 阿里云如何将服务器添加至跳板机,如何将服务器添加至jumpsever
  2. IDEA的Docker插件实战(Dockerfile篇)
  3. Go 知识点(11) — goroutine 泄露、设置子协程退出条件
  4. LeetCode19. Remove Nth Node From End of List 删除链表中的倒数第n个位置的元素
  5. 那还剩下多少学习激情?
  6. JS 添加网页桌面快捷方式的代码
  7. JAVA如何实现发送短信
  8. python 虚拟环境 tensorflow GPU
  9. 信息熵及其相关概念--数学
  10. LeetCode简单题之去掉最低工资和最高工资后的工资平均值