上一次经过将yui3-panel-hidden样式增长display:none属性,解决了非IE浏览器下的显示问题,见YUI3中panel基于Visibility属性引起的一个bug javascript
原本觉得解决了,结果过了周末再测试时,IE下又不对了,Panel显示后里面的内容全都看起来漂浮在页面上,Panel的背景消失了,看起来就象是panel的内容所有叠加在页面的底上,上周测试没出问题,估计是IE下js和css缓存的缘故。css
测试来测试去,我对这个现象很迷惑,由于只是给yui3-panel-hidden样式增长了display:none属性而已,而Panel显示后,此panel的包装div事实上是移除了该样式,应该不起做用才对,可是添加了这个属性就显示不对,移除了就显示正常,很难理解。不使用此属性其余浏览器下又全都不正常(测试包括firefox,chrome和360,明明是使用IE核心的360竟然也不跟IE表现一致)html
想来想去,只能是经过判断是否IE浏览器应用不一样的CSS样式了,一开始想使用css hack,可是考虑这东西还要区分IE的各个版本,从6一直到11,实在够繁的,其余浏览器还要各自处理,就想能不能在脚本里判断是不是IE,而后修改该样式的属性值,可是搜了下,貌似JS里还不能动态从新定义CSS Class,只能采用变通方法了java
最后实现是这样的:判断若是非IE浏览器,就给全部有此问题的对象添加个nonie样式,而后给nonie样式应用display:none属性chrome
在脚本的最后地方添加了这样的代码:浏览器
if (!(navigator.userAgent.indexOf("MSIE") > 0)) { Y.all('.yui3-panel-hidden').addClass('nonie'); }
这就是若是不是IE浏览器,在全部的.yui3-panel-hidden对象上再添加个nonie样式缓存
而后在css里:测试
.yui3-panel-hidden.nonie { display: none; }
就是带有nonie的yui3-panel-hidden对象才使用display:noneui
这样IE和非IE浏览器都能正常显示panel了firefox