自从windows7推出以后,IE9也随之而来,但很多人还是喜欢用旧版本,并且相当一部分个人和企业都在使用IE6,不得不承认IE6是一款很成功的产品,但英雄总有暮年时,该退还得退,世界是在不断的更迭中丰富多彩的。既然有人习惯于旧事物,那么身为一名为人民服务的程序员,就得全心全意为客户。
目前CSS最新版是CSS3,而IE6支持的是CSS1.0,因此IE6不支持CSS中一些新特性。这次项目,要做下拉菜单,IE6不支持非a标签的hover属性,不得不采用HTML组件,虽然效果一般,但能实现功能。自Internet Explorer 5开始微软引入了HTML组件(Html Components)的概念,详见百度百科,HTML组件扩展名是.htc。
想要和其他浏览器一样使用hover的话,首先需要建立一个hover.htc的文件,将如下代码拷贝进去。
- <attachevent="ondocumentready"handler="parseStylesheets"/>
- <script>
- varcsshoverReg=/(^|\s)(([^a]([^]+)?)|(a([^#.][^]+)+)):(hover|active)/i,
- currentSheet,doc=window.document,hoverEvents=[],activators={
- onhover:{on:'onmouseover',off:'onmouseout'},
- onactive:{on:'onmousedown',off:'onmouseup'}
- }
- functionparseStylesheets(){
- if(!/MSIE(5|6)/.test(navigator.userAgent))return;
- window.attachEvent('onunload',unhookHoverEvents);
- varsheets=doc.styleSheets,l=sheets.length;
- for(vari=0;i<l;i++)
- parseStylesheet(sheets[i]);
- }
- functionparseStylesheet(sheet){
- if(sheet.imports){
- try{
- varimports=sheet.imports,l=imports.length;
- for(vari=0;i<l;i++)parseStylesheet(sheet.imports[i]);
- }catch(securityException){}
- }
- try{
- varrules=(currentSheet=sheet).rules,l=rules.length;
- for(varj=0;j<l;j++)parseCSSRule(rules[j]);
- }catch(securityException){}
- }
- functionparseCSSRule(rule){
- varselect=rule.selectorText,style=rule.style.cssText;
- if(!csshoverReg.test(select)||!style)return;
- varpseudo=select.replace(/[^:]+:([a-z-]+).*/i,'on$1');
- varnewSelect=select.replace(/(\.([a-z0-9_-]+):[a-z]+)|(:[a-z]+)/gi,'.$2'+pseudo);
- varclassName=(/\.([a-z0-9_-]*on(hover|active))/i).exec(newSelect)[1];
- varaffected=select.replace(/:(hover|active).*$/,'');
- varelements=getElementsBySelect(affected);
- if(elements.length==0)return;
- currentSheet.addRule(newSelect,style);
- for(vari=0;i<elements.length;i++)
- newHoverElement(elements[i],className,activators[pseudo]);
- }
- functionHoverElement(node,className,events){
- if(!node.hovers)node.hovers={};
- if(node.hovers[className])return;
- node.hovers[className]=true;
- hookHoverEvent(node,events.on,function(){node.className+=''+className;});
- hookHoverEvent(node,events.off,function(){node.className=node.className.replace(newRegExp('\\s+'+className,'g'),'');});
- }
- functionhookHoverEvent(node,type,handler){
- node.attachEvent(type,handler);
- hoverEvents[hoverEvents.length]={
- node:node,type:type,handler:handler
- };
- }
- functionunhookHoverEvents(){
- for(vare,i=0;i<hoverEvents.length;i++){
- e=hoverEvents[i];
- e.node.detachEvent(e.type,e.handler);
- }
- }
- functiongetElementsBySelect(rule){
- varparts,nodes=[doc];
- parts=rule.split('');
- for(vari=0;i<parts.length;i++){
- nodes=getSelectedNodes(parts[i],nodes);
- }returnnodes;
- }
- functiongetSelectedNodes(select,elements){
- varresult,node,nodes=[];
- varidentify=(/\#([a-z0-9_-]+)/i).exec(select);
- if(identify){
- varelement=doc.getElementById(identify[1]);
- returnelement?[element]:nodes;
- }
- varclassname=(/\.([a-z0-9_-]+)/i).exec(select);
- vartagName=select.replace(/(\.|\#|\:)[a-z0-9_-]+/i,'');
- varclassReg=classname?newRegExp('\\b'+classname[1]+'\\b'):false;
- for(vari=0;i<elements.length;i++){
- result=tagName?elements[i].all.tags(tagName):elements[i].all;
- for(varj=0;j<result.length;j++){
- node=result[j];
- if(classReg&&!classReg.test(node.className))continue;
- nodes[nodes.length]=node;
- }
- }
- returnnodes;
- }
- </script>
然后在CSS文件中添加对hover.htc文件的引用,如下:
- div{
- behavior:url(js/hover.htc);
- }
此处注意引入文件的路径,一般不成功都是由路径问题引起的。添加完这两段代码后,就可以直接在CSS中对div标签使用hover啦。如下:
- #menuli:hoverdiv{
- visibility:visible;
- }
分享到:
相关推荐
a标签不加href属性a标签:hover状态不触发buga标签可点区域不可点击bug a标签不加href属性 个人觉得都不能称之为bug,但还是拿出来说道说道,因为确实有人这么干,查找问题的时候也花费了点时间。请看demo1 图一 图...
如果不设置 href属性在IE6下面会不响应hover。双击后会选中标签的父容器而非这个一a标签(IE下都存在这一问题)。 代码如下 <a> <a> 假定我们有个fn方法,需要取到这个元素,第一个方法传入的this是空值。 所以,...
6. 模态和非模态窗口问题 3 7. firefox与IE的父元素(parentElement)的区别 3 8. document.formName.item(”itemName”) 问题 3 9. 集合类对象问题 3 10. 自定义属性问题 3 11. input.type属性问题 3 12. event...
IE浏览器不支持,在FireFox中可以看到效果。 看显示效果的时候注意,浏览器的缓冲的问题。 a:link {color:blue; text-decoration: none; font-size:12px} a:visited {color:gray; text-decoration: none; font-size:...
4.1.3 a:hover 110 4.1.4 a:active 111 4.2 下划线个性化 111 4.3 创建按钮 114 4.3.1 普通按钮式链接 114 4.3.2 3D效果按钮式链接 116 4.4 图片翻转链接 119 4.5 更换链接鼠标指针 122 4.6 小结 124 第5章 列表样式...
4.7.11 z-index的相关问题以及Flash和IE 6下的select元素 4.7.12 插入png图片 4.7.13 多版本IE并存方案——CSS的调试利器IETester 第5章 高质量的JavaScript 5.1 养成良好的编程习惯 5.1.1 团队合作——如何...
2.IE6的双倍边距BUG 例如: <style type="text/css"> body {margin:0} div { float:left; margin-left:10px; width:200px; height:200px; border:1px solid red } </style> 浮动后本来外边距10px,但IE...
FIX 下拉菜单 -> 修正 IE 下渲染缓慢及 IE8 下鼠标 hover 时没有背景色的 BUG FIX 无法保证本地方式接口的完美兼容,暂时关闭 FIX 物理路径下调用错误 FIX DIY轮换图最后一张显示后不隐藏问题 FIX 修改当输入...
FIX 下拉菜单 -> 修正 IE 下渲染缓慢及 IE8 下鼠标 hover 时没有背景色的 BUG FIX 无法保证本地方式接口的完美兼容,暂时关闭 FIX 物理路径下调用错误 FIX DIY轮换图最后一张显示后不隐藏问题 FIX 修改当输入...
FIX 下拉菜单 -> 修正 IE 下渲染缓慢及 IE8 下鼠标 hover 时没有背景色的 BUG FIX 无法保证本地方式接口的完美兼容,暂时关闭 FIX 物理路径下调用错误 FIX DIY轮换图最后一张显示后不隐藏问题 FIX 修改当输入...
FIX 下拉菜单 -> 修正 IE 下渲染缓慢及 IE8 下鼠标 hover 时没有背景色的 BUG FIX 无法保证本地方式接口的完美兼容,暂时关闭 FIX 物理路径下调用错误 FIX DIY轮换图最后一张显示后不隐藏问题 FIX 修改当输入...
它是轻量级的js库(压缩后只有21k) ,它兼容CSS3,还兼容各种浏览器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jQuery使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX...
9.30 用jQuery删除空白标签和具有非中断空格的标签 第10章 jQuery Mobile移动开发技巧 10.1 让页面自适应屏幕宽度 10.2 在移动设备页面中创建多个显示视图 10.3 创建对话框显示效果 10.4 从外部文件中加载页面内容 ...
1237 任务记录工时的时候在表zt_taskestimate中记录account属性的值 1238 提需求时所属计划列表倒序排序 1240 首页的动态查询逻辑调整 1243 修复框架默认主题pjax的错误 1244 美化邮件提醒的模板 1245 去掉搜索中...
emphasis: { // 鼠标 hover 高亮时图形和标签的样式 (当鼠标放上去时 label和itemStyle 的样式) label: { // label高亮时的配置 show: true, textStyle: { color: '#fff', // 高亮时标签颜色变为 白色 ...
noform.zip 没有文档类的MDI怎样让MDI程序不需要文档的支持(33KB)<END><br>98,ROTFONT.zip 用于在窗口中显示任意角度文字的控件(5KB)<END><br>99,TRAYICON.zip 用于在WIN95的状态栏中显示程序的运行状态(32...