CSS下拉<ul> <li>菜单每个级别的不同大小</li> </ul>

时间:2013-07-04 11:26:06

标签: html css

您好我无法弄清楚如何更改CSS菜单子项的大小(父项具有图像背景,子项应具有背景颜色)。 我试过像:

ul > li > a:hover {
    display:inline-block;
    background:#000;
    float:left;
    width:120px;
    height:25px;
}

但它与其他元素混合在一起。能帮我解决一下吗?

HTML:

   <div id="menu">
   <ul>
    <li><a id="menu1" href="#">Parent1</a></li>

    <li><a href="#">Parent2</a>
        <ul>
            <li><a href="#">Child1</a></li>
            <li><a href="#">Child2</a></li>
            <li><a href="#">Child3</a></li>
        </ul>
    </li>
    <li><a href="#">Parent3</a></li>
    <li><a href="#">Parent4</a></li>
    <li><a href="#">Parent5</a></li>
   </ul>
   </div>

CSS:

#menu {
    position:absolute;
    top:133px;
    left:0px;
    width:900px;
    height:50px;
}
ul {
    font-family: Arial, Verdana;
    font-size: 14px;
    margin: 0;
    padding: 0;
    list-style: none;
}
ul li {
    display: block;
    float: left;
}
li ul {
    display: none;
}
ul li a {
    display: block;
    text-decoration: none;
    color: #ffffff;
    /*padding: 5px 15px 5px 15px;*/
    background-image: url(../images/menu1.png);
    white-space: nowrap;
    width:178px;
    height:50px;
}
ul li a:hover { 
    background: #BBBBBB;
}
li:hover ul {
    display: block;
    position: absolute;
    left:0px;
}
li:hover li {
    float: left;
    font-size: 11px;
}
li:hover a { 
    background: #3b3b3b; 
}
li:hover li a:hover {
    background: #CCC;
}

非常感谢您的帮助!

5 个答案:

答案 0 :(得分:2)

要为子子菜单添加背景颜色:

ul li ul li {
    // rules
}

您还可以向列表项添加类,以使其更易于管理。例如,您可以在子菜单的ul中添加一个类:

<li><a href="#">Parent2</a>
        <ul class="sub-menu">
            <li><a href="#">Child1</a></li>
            <li><a href="#">Child2</a></li>
            <li><a href="#">Child3</a></li>
        </ul>
    </li>

然后你可以将css简化为:

.sub-menu li {
    display:inline-block;
    background:#000;
    float:left;
    width:120px;
    height:25px;
}

答案 1 :(得分:2)

希望以下更改对您有用。这是fiddle link。以下是你的css chagnes

#menu {
    /*position:absolute;
    top:0;
    left:0px;*/
    width:900px;
    height:22px;
    background-color:#000;
}
ul {
    font-family: Arial, Verdana;
    font-size: 14px;
    line-height:22px;
    margin: 0;
    padding: 0;
    list-style: none;
    text-align:center;
}
ul li {
    display: block;
    float: left;
    position:relative;
}
ul li a {
    display: block;
    text-decoration: none;
    color: #ffffff;
    /*padding: 5px 15px 5px 15px;*/
    background-image: url(../images/menu1.png);
    white-space: nowrap;
    width:178px;
    line-height:22px;
}
ul li:hover a { 
    background: #BBBBBB;
}
ul li ul {
    display: none;
    widht:200px;
    position:absolute;
    left:0;
    top:22px;
}
ul li ul li {
    float: none;
    font-size: 11px;
}
ul li ul li a {
  background: #3b3b3b;
    background-image:none!important;
}
ul li ul li a:hover {
    background: #CCC;
}
ul li:hover ul {
    display: block;
    position: absolute;
    left:0px;
}

答案 2 :(得分:0)

保持相同的宽度是很好的,这样你就可以避免这种奇怪的动作。

试试这个

ul li ul li a:hover {
    display:block;
    background:#000;
    float:left;
    width:178px;
    height:25px;
}

<强> DEMO

答案 3 :(得分:0)

我不知道你希望结果看起来如何,但你也可以在css中使用+选择器:

ul > li > a:hover+ {
        display:inline-block;
        background:#000;
        float:left;
        width:120px;
        height:25px;
    }

在a:hover之后看到的+选择器意味着将选择a:hover-tag之后的下一个元素,在这种情况下它将是ul

如果你想让ul成为一个列表而不是像这样的扁平列表,你也可以用+ ul指定元素:

ul > li > a:hover+ul {
        display:inline-block;
        background:#000;
        float:left;
        width:120px;
        height:25px;
    }

像这样,你知道你只会影响悬停的元素旁边的元素

答案 4 :(得分:0)

解决方案

ul > li:hover > li > a {
    display:inline-block;
    background:#000;
    float:left;
    width:120px;
    height:25px;

}

可以按要求

ul > li:hover  li   a {  }