【问题标题】:CSS - How can I push the submenus to the left?CSS - 如何将子菜单推到左侧?
【发布时间】:2012-07-14 04:06:14
【问题描述】:

我创建了一个带有水平子菜单的水平菜单。虽然我希望所有子菜单都被推到左边,就像第一个子菜单一样。我怎样才能做到这一点?我对 CSS 非常(非常)陌生。

我有这个 HTML 代码:

<div id="menu">
        <ul>
            <li><a href="#nogo">Link 1</a>
                <ul>
                    <li><a href="#nogo">Link 1-1</a></li>
                    <li><a href="#nogo">Link 1-2</a></li>
                    <li><a href="#nogo">Link 1-3</a></li>
                </ul>
            </li>
            <li><a href="#nogo">Link 2</a>
                <ul>
                    <li><a href="#nogo">Link 2-1</a></li>
                    <li><a href="#nogo">Link 2-2</a></li>
                    <li><a href="#nogo">Link 2-3</a></li>
                </ul>
            </li>
            <li><a href="#nogo">Link 3</a>
                <ul>
                    <li><a href="#nogo">Link 3-1</a></li>
                    <li><a href="#nogo">Link 3-2</a></li>
                    <li><a href="#nogo">Link 3-3</a></li>
                </ul>
            </li>
        </ul>
    </div>

我有这个 CSS 代码:

    #menu{
padding:0;
margin:0;
overflow:hidden;
height:60px;
}
#menu ul{
padding:0;
margin:0;
}
#menu li{
position: relative;
float: left;
list-style: none;
margin: 0;
padding:0;
}

#menu li a{
width:100px;
height: 30px;
display: block;
text-decoration:none;
text-align: center;
line-height: 30px;
background-color: black;
color: white;
}

#menu li a:hover{
background-color: red;
}

#menu ul ul{
position: absolute;
top: 30px;
visibility: hidden;
width: 600px;
}

#menu ul li:hover ul{
visibility:visible;
display: inline;
}

【问题讨论】:

    标签: html css submenu


    【解决方案1】:

    #menu li 中删除position: relative 并将其添加到#menu ul。还要将left: 0添加到#menu ul ul

    #menu ul{
        padding:0;
        margin:0;
        position: relative;   /* add this */
    }
    
    #menu li{
        /* position: relative;   //remove this */
        float: left;
        list-style: none;
        margin: 0;
        padding:0;
    }
    
    #menu ul ul{
        position: absolute;
        left: 0;              /* add this */
        top: 30px;
        visibility: hidden;
        width: 600px;
    }
    

    工作示例:http://jsfiddle.net/WJN4G/

    【讨论】:

    • 没问题 - 很高兴我能帮上忙 :)
    【解决方案2】:

    将定位从#menu li移动到#menu ul并将left:0;添加到#menu ul ul

    left:0; 导致元素 (#menu ul ul) 与其第一个父元素对齐,该元素的位置不是static(这是默认值)。这就是为什么您需要将元素上的position:relative 向上移动到#menu ul,因此所有子ul 都与父ul 的左边缘对齐。

    #menu ul{
    padding:0;
    margin:0;
    position: relative; /* <- moved */
    }
    #menu li{
    position: relative; /* <- deleted */
    float: left;
    list-style: none;
    margin: 0;
    padding:0;
    }
    
    #menu ul ul{
    position: absolute;
        left:0;         /* <- added */
    top: 30px;
    visibility: hidden;
    width: 600px;
    }
    

    这是你修改后的fiddle

    【讨论】:

    • 不知道你在说什么?
    • 别担心,这只是一些轻松的幽默 :: Jinx - 当两个人同时说同样的话时,一个人可以对另一个人施加惩罚. Wikipedia - Jinx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2021-01-26
    相关资源
    最近更新 更多