jQuery .css background-position-x 在悬停时更改在 IE 中不起作用

Posted

技术标签:

【中文标题】jQuery .css background-position-x 在悬停时更改在 IE 中不起作用【英文标题】:jQuery .css background-position-x change on hover not working in IE 【发布时间】:2012-03-07 09:38:04 【问题描述】:

所以,我有一个顶部带有标签的网站,并且标签会在悬停时更改为“弹出”。为了实现这一点,我为选项卡使用了 CSS 精灵,并使用 jQuery 将悬停时的背景位置更改为精灵上适当的 y 位置。

html

    <div id="tabs">
    <div id="tabs_bg" class="pngfix"></div>
    <a id="tabs_home" href="<?php echo $base; ?>/" style="width:67px;height:23px;top:17px;"></a>
    <a id="tabs_mission" href="<?php echo $base; ?>/mission/" style="width:73px;height:23px;top:17px;left:150px;"></a>
    <a id="tabs_style" href="<?php echo $base; ?>/style/" style="width:60px;height:23px;top:17px;left:226px;"></a>
    <a id="tabs_personality" href="<?php echo $base; ?>/personality/" style="width:108px;height:26px;top:14px;left:286px;"></a>
    <a id="tabs_projects" href="<?php echo $base; ?>/projects/" style="width:70px;height:26px;top:14px;left:396px;"></a>
    <a id="tabs_blog" href="/blog/" style="width:60px;height:36px;top:4px;left:466px;"></a>
    <a id="tabs_contact" href="<?php echo $base; ?>/contact/" style="width:73px;height:26px;top:14px;left:526px;"></a>
</div>

jQuery:

<script>
<!--MISSION TAB HOVER FUNCTION-->
$("#tabs_mission").hover(
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px -46px");
  ,
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px 0px");
    
);

<!--HOME TAB HOVER FUNCTION-->
$("#tabs_home").hover(
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px -92px");
  ,
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px 0px");
    
);

<!--PERSONALITY TAB HOVER FUNCTION-->
$("#tabs_personality").hover(
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px -138px");
  ,
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px 0px");
    
);

<!--PROJECTS TAB HOVER FUNCTION-->
$("#tabs_projects").hover(
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px -184px");
  ,
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px 0px");
    
);

<!--BLOG TAB HOVER FUNCTION-->
$("#tabs_blog").hover(
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px -230px");
  ,
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px 0px");
    
);

<!--CONTACT TAB HOVER FUNCTION-->
$("#tabs_contact").hover(
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px -276px");
  ,
  function () 
    $('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png");
    $('#tabs').css("background-position", "0px 0px");
    
);
</script>

这一切都可以在除 IE 之外的所有浏览器中完美运行。我已经在所有版本的 IE 中对其进行了测试,但它都无法正常工作。当您将鼠标悬停在 IE 中的任何选项卡上时,选项卡就会消失,就好像背景图像已被删除一样。

这是我正在实施的网站 - http://www.thatsbrave.co.uk

谢谢

【问题讨论】:

我刚刚在 IE9 中尝试过,它的工作方式似乎与 Firefox 完全一样——它们会弹出,但什么也没有消失? (顺便说一句,设计不错) 【参考方案1】:

您的 div 上有一个内联背景 css 样式 (background:0px 0px;),其 id 为“tabs”,它覆盖了以下类的背景样式:

.book_inner_home #tabs

    display : block;
    background : url(../img/tabs/home_tabs.png) no-repeat;

我在通过 IE 开发者工具检查 css 时可以看到这种情况。

【讨论】:

感谢 Zen 指出这一点。这让我重新审视了 jQuery,结果发现我的语法有点错误。 - 区别只是“);在每行的末尾需要是)”);代码在其他浏览器上运行的事实具有误导性!【参考方案2】:

这就是问题所在。真正简单的一个,其中一个你从一行代码中错过了一个字符并且它搞砸了。

这是修复(我应用到每一行代码)

$('#tabs').css("background", "url(../../../core/img/tabs/style_tabs.png)");

只是缺少一个右括号,在使用 .css 选择器设置背景图像的每一行末尾的 "); 之前。基本上,定义图像 url 的右括号丢失了。该代码在其他浏览器中运行良好,因此我认为它没有任何问题,尽管在意识到括号之前我确实尝试了各种其他事情!

【讨论】:

以上是关于jQuery .css background-position-x 在悬停时更改在 IE 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

第四十二节 blackground属性

jquery 检查元素是不是有某个css属性

JQuery:JQuery 中的CSS()方法

jQuery学习—jQuery操作CSS和表格

jquery.ui.theme.css 和 jquery-ui.css 有啥区别?

jquery:厌倦了 css().css().css()