开发过程中将demo中的内容拆分进各子模块,发现之前好好的 hover 效果失效了,我排查的结果是因为在模块中没有定义doctype,页面默认使用 quirks mode,会导致非链接<a>标签的 hover 伪类在 IE7/8 和 firefox 均失去效果。

我们通常认为的非 IE6 以下浏览器都支持链接以外元素的 hover 伪类,其实还需要依赖 doctype,比如这样的代码就在 IE7/8 和 firefox 失去效果:

<html>
    <head>
        <style>
        .hover-test:hover{color:#f00;}
    </style>
    </head>
    <body>
        <a class="hover-test" href="#">hover字体变红</a>
        <p class="hover-test">hover字体变红,Quirks mode下失效</p>
    </body>
</html>

MSDN找到相关说法:
Internet Explorer 7 and later, in standards-compliant mode (strict
!DOCTYPE), can apply the :hover pseudo-class to any element, not merely
links.

而 Firefox 与 IE 也有区别,Firefox 下用标签名作为选择器可以使 hover 伪类恢复效用:

<html>
    <head>
        <style>
        p.hover-test:hover{color:#f00;}
        </style>
    </head>
    <body>
        <a class="hover-test" href="#">hover字体变红</a>
        <p class="hover-test">hover字体变红</p>
    </body>
</html>

相关推荐:
html5 doctype与图片多余空白
doctype对盒子模型的影响

阅读全文
 
, , ,

使用 html5 的 doctype 代替很长很长的 xhtml doctype 似乎成了时尚和趋势,只需写寥寥几个字符:
<!DOCTYPE html>
简单易用,而且兼容性又不错,不过毕竟IE7和IE6还是不认识它,就会出问题…

阅读全文
 
, , , , ,

文档类型的出现就是为了规范现有的浏览器表现,在不使用文档类型的情况下,IE会用原始的模式去渲染整个HTML文档,盒子模型在这种模式下会有很大的变化。

以下的例子展示了文档类型引起的宽度兼容性问题……

阅读全文
 
, , ,

命名空间声明

1.在XHTML文档根元素中必须使用xmlns属性声明文档的命名空间。那么什么是名字空间?

xmlns是 XHTML NameSpace 缩写,中文翻译为命名空间。命名空间是收集元素类型的一个详细的DTD,它允许通过一个URL地址来识别命名空间。

通俗的解释是:名字空间就是给文档做一个标记,告诉别人,这个文档是属于谁的。只不过这个”谁”用了一个网址来代替……

阅读全文
 
, , ,

在你每一个页面的顶端,你需要文档声明。是的,必须。

  如果不指定文档类型,你的HTML不是合法的HTML,并且大部分浏览器会用“怪癖模式(quirks mode)”来处理页面,这意味着浏览器认为你自己也不知道究竟做什么,并且按浏览器自己的方式来处理你的代码。你可以是一个HTML大师,在地球上打遍天下无敌手,或者你的HTML可以无瑕疵,CSS可以很完美,但如果没有文档声明,或者错误的文档声明,你的网页与一个短视的,独眼的长臂猿婴儿十分艰难地堆砌起来的没两样。

阅读全文
 
, , ,