【问题标题】:Background image issue in Google Chrome and SafariGoogle Chrome 和 Safari 中的背景图像问题
【发布时间】:2011-06-17 20:57:47
【问题描述】:

这是我的 CSS:

#menu {
    float: left;
    background: url(images/menu_normal.jpg) repeat-x bottom;
}

#menu li {
    display: inline;
    float: left;
    height: 33px;
    line-height: 33px;
    text-align: center;
    width: 60px;
}

#menu li a:hover {
    display: inline;
    background: url(images/menu_hover.jpg) repeat-x bottom;
    float: left;
    height: 33px;
    line-height: 33px;
    text-align: center;
    width: 60px;
}

这是我的 HTML:

<div id = "menu">
        <ul>
            <li><a href = "#">All</a></li>
            <li><a href = "#">Sports</a></li>
            <li><a href = "#">Movies</a></li>
            <li><a href = "#">Shows</a></li>
            <li><a href = "#">Sales</a></li>
            <li><a href = "#">Clubs</a></li>
            <li><a href = "#">Concerts</a></li>
            <li><a href = "#">Parties</a></li>
        </ul>
    </div>

a:hover 的背景图片不会在 Chrome 和 Safari 中显示。 我发现了一些关于 WebKit 的错误,但它是真的吗?如果是,如何修复?

这是网址: http://eximi.dreamhosters.com/feasibility/statue.html

谢谢!

【问题讨论】:

  • 您的 CSS 缺少菜单标签上的“#”是否是错字
  • @Joe,格式错误。

标签: html css drop-down-menu navigation


【解决方案1】:
#menu li {
    display: block;
    float: left;
}

#menu li a {
    display: block;
    background: transparent; /* IE6 will love this! */
    height: 33px;
    line-height: 33px;
    text-align: center;
    width: 60px;
}

#menu li a:hover {
    background: transparent url(images/menu_hover.jpg) repeat-x bottom; /* oh, oh, a fix here, transparent added */
}

我会这样做。

但如果没有一个真实的例子,我很难判断这一点。和迈克尔一样,如果不起作用,请告诉我。

另外,jsFiddle 或指向实际站点的链接会很好。

好吧,我举个例子……

http://jsfiddle.net/dpCwp/

如您所见,div#bugged 中有您的代码版本不起作用,而我的 - div#fixed。是的,它们不使用图像,但正如您所见,#bugged 无论如何都不能使用颜色。

以防万一,一个带有背景图片的工作版本 - http://jsfiddle.net/dpCwp/3/

嗯,刚刚在 6/7/8/9 和最新版本的 上进行了测试——就像一个魅力(加载远程图像时的延迟除外.. )

只是为了让事情更清楚......这绝不是与或其他任何相关的错误,这是对的不当使用!

已更新,以反映您的实际 CSS

你的 CSS


#menu {
    float: left;
    background: url(images/menu_normal.jpg) repeat-x bottom;
}

#menu li {
    display: inline;
    /*background: url("../images/menu_normal.png") no-repeat scroll 0 0 transparent;*/
    float: left;
    height: 33px;
    line-height: 33px;
    text-align: center;
    width: 60px;
}

#menu a:hover {
    display: inline;
    background: url(images/menu_hover.jpg) repeat-x bottom;
    float: left;
    height: 33px;
    line-height: 33px;
    text-align: center;
    width: 60px;
}

#menu a:active {
    display: inline;
    background: url(images/menu_active.jpg) repeat-x bottom;
    float: left;
    height: 33px;
    line-height: 33px;
    text-align: center;
    width: 60px;
}

必须替换为:


#menu {
    float: left;
    background: url(images/menu_normal.jpg) repeat-x bottom;
}

#menu li {
    display: block;
    float: left;
    /* lots of useless stuff have been removed from this rule and moved to next rule (#menu li a) */
}

#menu li a {
    /* you haven't added this rule in your CSS, it's essential! */
    display: block;
    background: transparent; /* IE6 will love this! */
    height: 33px;
    line-height: 33px;
    text-align: center;
    width: 60px;
    /* see properties added from #menu li, to here... */
}

#menu li a:hover {
    background: transparent url(images/menu_hover.jpg) repeat-x bottom;
    /* useless stuff removed again */
}

#menu li a:active {
    background: transparent url(images/menu_active.jpg) repeat-x bottom;
    /* and we don't need those tags here again... */
}

  1. 我删除的 CSS 属性是必不可少的,我添加的也是。规则也一样!
  2. 我已经从:hover:active 伪类中删除了所有属性,因为它们是从#menu li a 继承的,而您的CSS 中根本没有这些属性。

更新 2

所以我刚刚更改了 #menu 与 Chrome 相关的规则(!您无法正常工作的浏览器)在这些地方:

#menu { float: left; }
#menu ul { overflow: auto; margin: 0; padding: 0; }
#menu li { display: block; float: left; background: url(images/menu_normal.jpg) repeat-x bottom; }
#menu li a { display: block; background: transparent; height: 33px; line-height: 33px; text-align: center; width: 60px; }
#menu li a:hover { background: transparent url(images/menu_hover.jpg) repeat-x bottom; }
#menu li a:active { background: transparent url(images/menu_active.jpg) repeat-x bottom; }

而且它完美地工作!所以,我要再说一遍,那不是错误,那是无效的 CSS。

【讨论】:

  • 是的,它奏效了。太感谢了!但是kei建议的解决方案也有效。你能解释一下为什么你的更好吗?
  • 由于某种原因,W3C CSS 验证器在我的初始 CSS 中没有发现任何错误...
  • 没有比这更好的了。那是你自己的喜好!但是,对不起,我很生气,看到有人认为这是 WebKit 中的一个错误,它只是无效/不正确的 CSS。这意味着,有些人会使用 hack,而不是学习编写更好、正确、符合标准的代码。从长远来看,更多的黑客攻击 == 更多的问题!所以,是的,这就是为什么我在这方面付出了这么多努力。
  • @vlevsha,它没有发现错误,因为没有。 CSS Validator 只查找不正确/无效的属性,它不能告诉你是否正确使用了这些属性,和/或查看这些规则关系是否被搞砸了。
  • 哦,我可以添加一件事来说明为什么这更好...... :hover 对除 &lt;a/&gt; 以外的元素的伪类在 IE6 中不起作用。但是由于 IE6 可以被认为是死的 (ie6countdown.com) 并且只有 WebKit 对你的原始代码有问题,所以better 优先。
【解决方案2】:

#menu li a:hover改为#menu li:hover a

【讨论】:

    【解决方案3】:

    经过一番搜索,它似乎是一个 webkit 错误。也许尝试下页提出的方法? http://www.simonday.com/web-design-blog/2010/10/20/css-ahover-not-working-or-crashing-webkit-chrome-safari/

    只需将您的代码更改为:

    #menu li a:hover, #menu li:hover, a {
        ...
    }
    

    【讨论】:

      【解决方案4】:

      试试这个:

      #menu ul li a:hover {
      (style info here)
      }
      

      如果这不能解决问题,请告诉我!

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2011-06-09
      • 2017-03-10
      • 2016-07-24
      • 2011-07-07
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多