1

我在标题中有一个导航,标题从左到右有一个渐变。导航栏有另一个背景。导航按钮需要与该位置的标题背景相同。

<header>
    <nav>
        <ul>
            <li>button1</li>
            <li>button2</li>
            <li>button3</li>
        </ul>
    </nav>
</header>
  1. 标题有渐变。
  2. 导航有一种颜色。
  3. li需要和header背景在同一个地方。
4

3 回答 3

3

您可以使整个导航透明并在列表元素上使用实心边框。

演示

您可以将其与border-radius按钮一起使用,也可以与标题的动画背景一起使用。

基本理念

假设您有一个标题结构,如:

<header>
    <nav>
        <ul>
            <li><a href=''>Products</a></li>
            <li><a href=''>Services</a></li>
            <li><a href=''>Technologies</a></li>
            <li><a href=''>Contact</a></li>
        </ul>
    </nav>
</header>
  • 你给标题一个特定的背景(CSS渐变,图像,等等),并确保它的孩子没有一个背景。
  • nav您为和设置填充ul和边距。li0
  • 你在元素上设置了宽阔的实心边框li,你就完成了。然后您可以调整它(参见演示)。
于 2012-10-17T17:19:29.920 回答
0

我在想你也许可以使用与 li 上的标题相同的图像,但偏移它以匹配每个 li 关于标题的位置。

当然,这需要一些客户端脚本,并且不是纯 css,而且您还没有说明这是否是一个可接受的解决方案,所以我投入了 2 美分。

干杯

编辑:

这是一个小的概念证明:

HTML:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8">
        <link rel="stylesheet" type="text/css" href="style.css">
        <script src="jquery-1.8.2.min.js"></script>
        <script type="text/javascript" src="offset.js"></script>
    </head>

    <body>
        <header>
            <nav>
                <ul>
                    <li>ALLO</li>
                    <li>ALLO</li>
                    <li>ALLO</li>
                    <li>ALLO</li>
                </ul>
            </nav>
        </header>   
    </body>

</html>

CSS:

header {
    background-image: url("gradient.png");
    height: 80px;
    position: relative;
    padding-top: 20px;
}

nav {
    position: relative;
    padding-top: 10px;
    background-image: url("navbg.jpg");
    background-position: 0px 10px;
    background-repeat: repeat-x;
    height: 100px;
}

li {
    width: 100px;
    height: 40px;
    float: left;
    list-style: none;
    background-image: url("gradient.png");
    background-repeat: no-repeat;
    background-position: 0px 0px; 
    background-origin: content-box;
}

Javascript(在文件 offset.js 中):

$(document).ready(function(){
    var elems = $("li");
    $.each(elems, function(index, elem){
        var li = $(elem);
        var pos = li.position();
        var posString = -pos.left.toString() + "px " + -pos.top.toString() + "px"
        li.css("backgroundPosition", posString);

    });

});

适用于 Chrome、FF 和 IE9

希望这可以帮助

于 2012-10-17T14:18:04.077 回答
0

仅在代码中无法“穿透”到标题背景渐变。您将不得不通过以下任一方式伪造它:

a) 煞费苦心地重新创建 's 中的渐变<li>,使其与标题的背景对齐。<li>如果你走这条路,你应该有固定的宽度。

<nav>b)为纯色创建一个背景图像,但打了孔,以便您可以看到它后面的渐变。

于 2012-10-17T13:01:30.307 回答