解决VML遭遇IE8和XHTML DOCTYPE时不能运行的问题
2009-05-31 09:42
393 查看
以下代码在IE运行正常
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns:v="urn:schemas-microsoft-com:vml">
<head><title>VML</title>
<style> v/:* { behavior: url(#default#VML); } </style>
</head>
<body>
<v:rect id=myrect filled="false" stroked="false" rotation="45"
style="position:relative;width:165px;height:55px;border:none;rotation:45;">
<v:imagedata src="http://www.csdn.net/Images/logo_csdn.gif"/>
</v:rect>
</body>
</html>
如果将DOCTYPE换成XHTML的(如下)则不能运行:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head><title>VML</title>
<style> v/:* { behavior: url(#default#VML); } </style>
</head>
<body>
<v:rect id=myrect filled="false" stroked="false" rotation="45"
style="position:relative;width:165px;height:55px;border:none;rotation:45;">
<v:imagedata src="http://www.csdn.net/Images/logo_csdn.gif"/>
</v:rect>
</body>
</html>
经多方查证,得知故障原因为XHTML环境下v/:*
在样式表语法中是非法的,因而被IE8忽略而导致无法渲染VML(说明:IE7下的XHTML仍然能够识别v/:*
),而如下代码则可以正确渲染VML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head><title>VML</title>
<?import namespace="v" implementation="#default#VML" ?>
<style> v/:rect,v/:rect,v/:imagedata { display:inline-block } </style>
</head>
<body>
<v:rect id=myrect filled="false" stroked="false" rotation="45"
style="position:relative;width:165px;height:55px;border:none;rotation:45;">
<v:imagedata src="http://www.csdn.net/Images/logo_csdn.gif"/>
</v:rect>
</body>
</html>
秘诀就是:
<?import namespace="v" implementation="#default#VML" ?>
<style> v/:rect,v/:rect,v/:imagedata { display:inline-block } </style>
(1)通过import来引入命名空间
(2)将所有用到的vml元素分开写入样式{ display:inline-block }
参考网址:
https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=333905
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns:v="urn:schemas-microsoft-com:vml">
<head><title>VML</title>
<style> v/:* { behavior: url(#default#VML); } </style>
</head>
<body>
<v:rect id=myrect filled="false" stroked="false" rotation="45"
style="position:relative;width:165px;height:55px;border:none;rotation:45;">
<v:imagedata src="http://www.csdn.net/Images/logo_csdn.gif"/>
</v:rect>
</body>
</html>
如果将DOCTYPE换成XHTML的(如下)则不能运行:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head><title>VML</title>
<style> v/:* { behavior: url(#default#VML); } </style>
</head>
<body>
<v:rect id=myrect filled="false" stroked="false" rotation="45"
style="position:relative;width:165px;height:55px;border:none;rotation:45;">
<v:imagedata src="http://www.csdn.net/Images/logo_csdn.gif"/>
</v:rect>
</body>
</html>
经多方查证,得知故障原因为XHTML环境下v/:*
在样式表语法中是非法的,因而被IE8忽略而导致无法渲染VML(说明:IE7下的XHTML仍然能够识别v/:*
),而如下代码则可以正确渲染VML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head><title>VML</title>
<?import namespace="v" implementation="#default#VML" ?>
<style> v/:rect,v/:rect,v/:imagedata { display:inline-block } </style>
</head>
<body>
<v:rect id=myrect filled="false" stroked="false" rotation="45"
style="position:relative;width:165px;height:55px;border:none;rotation:45;">
<v:imagedata src="http://www.csdn.net/Images/logo_csdn.gif"/>
</v:rect>
</body>
</html>
秘诀就是:
<?import namespace="v" implementation="#default#VML" ?>
<style> v/:rect,v/:rect,v/:imagedata { display:inline-block } </style>
(1)通过import来引入命名空间
(2)将所有用到的vml元素分开写入样式{ display:inline-block }
参考网址:
https://connect.microsoft.com/IE/feedback/ViewFeedback.aspx?FeedbackID=333905
相关文章推荐
- 解决VML遭遇IE8和XHTML DOCTYPE时不能运行的问题(转)
- 解决VML遭遇IE8和XHTML DOCTYPE时不能运行的问题
- 解决Android 2.2自带Camera不能在模拟器中运行的问题
- 解决codeblock不能运行的问题
- sublime text3安装SublimeREPL--解决不能运行input()的问题
- 解决Tomcat不能在64位Windows上作为服务运行的问题
- 解决安装完IE8后,VS2005不能调试问题.........
- 解决ajax返回innerHTML中javascript不能运行问题
- 解决安装完IE8后,VS2005断点不能调试问题
- 解决Windows7下vs2008 Active control test container 不能运行的问题
- ADF11g-037:解决IE8兼容模式下运行时弹窗问题
- CGYWIN 编译的可执行程序在WINDOWS平台中运行时,解决system函数不能使用的问题
- 解决gem install jekyll 不能运行的问题
- 解决可运行JAR不能再windows上运行问题
- 解决ie8下F12不能用的问题
- 解决Fedora 自己编译的内核不能运行Virtualbox的问题。
- kettle carte 打包运行job出现不能读取子转换的问题解决。
- vs 只能调试不能运行问题的解决
- 解决小米手机不能运行Android Studio程序的问题
- 解决QT开发的exe软件不能运行问题