奇怪的CSS行为(sprite nav w / rollover)

时间:2009-08-07 20:33:47

标签: html css html5 navigation css-sprites

这是有问题的导航图片:

http://img.skitch.com/20090807-t8e6d9ymrtpdifqy88xpu6x36.png

我想要做的是非常基本的,我过去已经做了很多次,我只是无法理解为什么它现在不能正常工作。基本上使用上面的图像作为导航背景并相应地调整宽度和背景位置。这是我的CSS:

#navigation { width: 960px; height: 28px; clear: both; background: url('../images/nav-bg.png') repeat-x; }

        #navigation ul { margin: 0 0 0 20px; padding: 0; }
            #navigation ul li { float: left; list-style: none; }
            #navigation ul li a { display: block; height: 28px; background: url('../images/nav-tabs.png') no-repeat; text-indent: -9999px;}

                #nav-home { width: 62px; }
                    #nav-home.active, #nav-home:hover { background-position: 0 -28px; }

                #nav-cp { width: 130px; background-position: -62px 0; }
                    #nav-cp.active, #nav-cp:hover { background-position: -62px -28px; }

                #nav-web { width: 106px; background-position: -192px 0; }
                    #nav-web.active, #nav-web:hover { background-position: -192px -28px; }

                #nav-clix { width: 106px; background-position: -298px 0; }
                    #nav-clix.active, #nav-clix:hover { background-position: -298px -28px; }

                #nav-dna { width: 90px; background-position: -405px 0; }
                    #nav-dna.active, #nav-dna:hover { background-position: -405px -28px; }

以下是页面上的代码,其中包含通用的HTML5 doctype,<!DOCTYPE html>,用于将来的校对:

<div id="navigation">

    <ul id="nav-tabs">
        <li><a href="#" id="nav-home">Home</a></li>
        <li><a href="#" id="nav-cp">Client Portal</a></li>
        <li><a href="#" id="nav-web">Weboptima</a></li>
        <li><a href="#" id="nav-clix">Clixfactor</a></li>
        <li><a href="#" id="nav-dna">Lead DNA</a></li>
    </ul>

</div>

我遇到的奇怪的事情是:第一个标签,Home,完美地运作。除非我指定!important,否则其余四个选项卡不遵循初始background-position属性,但翻转工作正常。以下是这两种情况的图像:

http://img.skitch.com/20090807-fybag852bbbi6ut751w167y1hp.png

http://img.skitch.com/20090807-rmn9b2tu54q4agyta2idfra5x5.png

只是想要了解这个(希望)简单的问题。提前谢谢!

2 个答案:

答案 0 :(得分:1)

指定背景图像的样式比标签的样式更具体,因此需要优先考虑。

不使用复合样式background,而是将background-position默认设置为0% 0%,而是指定单独的组件:

background-image: url('../images/nav-tabs.png'); background-repeat: no-repeat;

您可以阅读有关特异性的here

答案 1 :(得分:0)

我不知道究竟是什么问题,但听起来像CSS规则的相对优先级问题。

对于那种问题,Firebug非常好 - 它将告诉您任何给定元素究竟是哪些CSS规则为它触发。这应该可以帮助您了解问题所在。

(如果你已经了解Firebug,请原谅我,但是很多网络开发人员都不知道。)