前两天一个朋友在群里说,他发现了一个firefox的bug,我很惊奇,在一个以程序为主的群里发现了前端bug,太神奇了。先把代码发出来大家看一下
<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.0 Transitional//EN">
<html>
<head>
<title> Unexpected margin </title>
<style>
.zoom a:link,a:active{margin-left: 2em;background-color: #fe0;}
.content {border-width: 2px;border-style: solid;margin: 30px;padding: 10px;}
</style></head><body>
<a name="hover"><div class="content">Text test.</div><span class="content">Text test.</span></a>
</body>
</html>
重点在这个地方,a的中间有一个div,是什么bug呢,在ff中,你点击content的那个div,会发现整个页面下移约2em的距离。而在ie下面什么事都没发生。这是为什么呢?
其实原因很简单,大家在ie8和ff分别用开发者工具和firebug来看就会发现在ie8下面a位于div下面,span下面也有一小半,但ff下面会发现a包含着div和span.
这就是ie和ff的不同,ie中.a的级别是in-line,div是block,这时候div会在a的上层出现,a被div挡到了,所有的hover和active无法感应到。而在ff中,a被完全使用了,div成了他的内层元素,那么点击在div上面时其实是点在a上面。所以这里候a.active中的margin-left和背景色就开始发挥作用了,div是块级,a为内联,a左移,div只好让位,块级占一行无法偏所以顺位就下移了。
然后再讲一点,那个朋友认为.zoom a:link,a:active是给zoom下的a定样式,这是错误的,这里是给.zomm下的a定了link,然后再定了一个全局a的active,正确的写法应该是
.zoom a:link,.zoom a:active{}