CSS下拉菜单,子项超出父级宽度

时间:2014-02-19 19:33:35

标签: css drop-down-menu

我正在尝试使用HTML5和CSS3构建集中对齐下拉菜单。如果必须的话,我可以使用jQuery来协助。这必须在IE8 +中工作。目前,我的菜单是居中对齐的,下拉列表有效,但下拉项目的宽度(div)与上面li的宽度相同。

<div class="menu">
    <ul class="level0">
        <li class="level0">
            <a href=" http://domain.com/">
                <span>home</span>
            </a>
            <div class="sub">
                <div class="sub-column">
                    <a href="http://domain.com/customer-service">
                        <span>Customer Service</span>
                    </a>
                </div>
                <div class="sub-column">
                    <a href="http://domain.com/privacy-policy">
                        <span>Privacy Policy</span>
                    </a>
                </div>
            </div>
        </li>
        <li class="level0">
            <a href=" http://domain.com/about">
                <span>About Us</span>
            </a>
            <div class="sub">
                <div class="sub-column">
                    <div>
                        <p>Blah blah blah, some random text goes here.</p>
                    </div>
                </div>
            </div>
        </li>
    </ul>
</div>

CSS(试图压缩它以便于查看)。

.menu {
    clear:both; display:block; max-width:100%; margin:0 auto; padding:0; 
    border:1px solid #ddd; border-bottom:7px solid #323131; text-align:center;
}
.menu ul {
    display:block; max-width:100%; height:3.2em; margin:0 auto;
    padding:0; list-style-type:none; text-align:center;
}
.menu ul li {display:inline-block; margin:0; padding:0; height:3.2em; 
    line-height:3.2em; position:relative;
}
.menu ul li > div {display:none; visibility:hidden; position:absolute; 
    background:#f60; z-index:999; transition:display 0.25s ease;
}
.menu ul li:hover > div {display:inline-block; visibility:visible; 
    max-width:100%;
}
.menu ul li a {display:block; margin:0; padding:0 2em; font-size:90%; 
    font-weight:700; text-transform:uppercase; transition:background-color 0.25s ease;
}
.menu ul li a:hover {background-color:#e4e4e4; color:#323131;}

.menu ul li.switcher {display:none;}

如何获取第一行div(.menu ul li > div)的宽度以采用祖父元素(.menu)的宽度?或至少使用max-width拉伸以适应内容?

感谢任何帮助。感谢。

〜编辑〜

这是小提琴:http://jsfiddle.net/Xp6yG/

3 个答案:

答案 0 :(得分:1)

我想我理解你的问题,请尝试以下方法:

<强> fiddle demo

CSS:

.sub {left:0px;}

答案 1 :(得分:1)

除了使用James建议制作.menu position: relative之外,我认为您还需要删除position: relative上的.menu ul li

答案 2 :(得分:0)

感谢一些有用的建议,这就像我得到的那样接近工作:http://jsfiddle.net/Xp6yG/3/

我将.menu ul li:hover > div上的显示更改为display:table;,并将whitespace:nowrap;right:50%;添加到.menu ul li > div元素。

下拉列表出现在我想要的位置并伸展以适合包含元素。非常感谢!