span标签写法问题导致ie8 hover失效

hover在css里比较常见,多用于菜单或一些按钮上的鼠标事件,用法也比较简单,不难掌握。

不过在浏览器兼容性测试中,发现ie浏览器对hover还是很挑剔的,html写法会影响hover是否有效。

我们先比较看看下面两组html代码的写法:

代码一:

<ul>
       <li><a href=”http://www.webkaka.com/ping.aspx” class=”ping-menu”>ping<span/></a></li>
       <li><a href=”http://www.webkaka.com/tracert.aspx” class=”tracert-menu”>tracert<span/></a></li>
       <li><a href=”http://www.webkaka.com/dns/” class=”dns-menu”>dns<span/></a></li>
       <li><a href=”http://www.webkaka.com/webspeed/” class=”webspeed-menu”>webspeed<span/></a></li>
</ul>

代码二:

<ul>
       <li><a href=”http://www.webkaka.com/ping.aspx” class=”ping-menu”>ping<span></span></a></li>
       <li><a href=”http://www.webkaka.com/tracert.aspx” class=”tracert-menu”>tracert<span></span></a></li>
       <li><a href=”http://www.webkaka.com/dns/” class=”dns-menu”>dns<span></span></a></li>
       <li><a href=”http://www.webkaka.com/webspeed/” class=”webspeed-menu”>webspeed<span></span></a></li>
</ul>

细心些你会发现,<span>标签的差异,但是在这次浏览器兼容性测试中发现,第一种代码的写法,即<span/>,在IE8里不能正确执行hover鼠标事件,而第二种代码的写法,<span></span>在IE8里能正确执行hover鼠标事件。不过,其他浏览器两种写法均可。

这次勘查用了很多时间,谁会想到IE8还有这么挑剔的!

hover知识你懂多少?

CSS :hover 伪类

定义和用法
:hover 伪类在鼠标移到元素上时向此元素添加特殊的样式。

说明
这个伪类应用处于“悬停状态”的元素。悬停定义为用户指示了一个元素但没有将其激活。对此最常见的例子是将鼠标指针移到 HTML 文档中一个超链接的边界范围内。理论上,其他元素也可以处于悬停状态,不过 CSS 没有定义究竟是哪些元素。

激活的、已访问的、未访问的或者当有鼠标悬停在其上的链接,它们会在支持 CSS 的浏览器中以不同的方式显示出来:

a:link {color: #FF0000}     /* 未访问的链接 */
a:visited {color: #00FF00}  /* 已访问的链接 */
a:hover {color: #FF00FF}    /* 当有鼠标悬停在链接上 */
a:active {color: #0000FF}   /* 被选择的链接 */

注释:为了产生预期的效果,在 CSS 定义中,a:hover 必须位于 a:link 和 a:visited 之后!!

注释:为了产生预期的效果,在 CSS 定义中,a:active 必须位于 a:hover 之后!!

注释:Pseudo-class(伪类)的名称对大小写不敏感。

注释:伪类可与 CSS 类配合使用:

a.red:visited {color: #FF0000;}
<a class=”red” href=”css_syntax.asp”>CSS Syntax</a>

如果上面这个例子中的链接已访问过,那么它会显示为红色。

实例
规定链接的颜色:

a:link {color: #FF0000}     /* 未访问的链接 */
a:visited {color: #00FF00}  /* 已访问的链接 */
a:hover {color: #FF00FF}    /* 当有鼠标悬停在链接上 */
a:active {color: #0000FF}   /* 被选择的链接 */

浏览器支持
所有主流浏览器都支持 :hover 伪类。