重叠的绝对和/或相对定位的div元素

3
    <div id="headContainer">

        <div id="blackBar">
            <div class="content">
                <img src="../Images/logo.png" class="logo" alt="logo" />
                <div id="clientSettings">
                    <div id="settingsContainer">
                        <ul>
                            <li><asp:LinkButton ID="endSession" OnClick="endSession_Click" Text="Exit" runat="server" /></li>
                            <li>not available</li>
                        </ul>
                    </div>
                </div>
                <div id="clientProfile"></div>
            </div>
        </div>

        <script type="text/javascript">
            $(document).ready(function () {
                $('#clientSettings').click(function () {
                    $('#settingsContainer').toggle();
                });
            });
        </script>

        <div id="grayBar">

        </div>

    </div>

好的,正如您从上面所猜到的那样,我正在尝试使用jQuery,一旦单击了#clientSettings,就显示#settingsContainer。 我可以使用.toggle()方法实现这一点。 但是,#settingsContainer需要重叠#grayBar

请参见下面的CSS:

headContainer:

#headContainer 
{
    top                 : 0;
    left                : 0;
    width               : 100%;
    height              : 100px;
    position            : fixed; <- or relative doesn't matter.
    z-index             : 1;
}

#headContainer div#grayBar
{
    top                 : 0;
    left                : 0;
    position            : relative; <- or fixed doesn't matter.
    width               : 100%;
    height              : 50px;
    background-color    : #f1f1f1;
    z-index             : 1;
}

客户端设置 + 设置容器:

#headContainer div#blackBar div#clientSettings
{
    float               : left;
    position            : relative;
    width               : 25px;
    height              : 50px;
    background-image    : url('../Images/Icons/endSession.png');
    background-repeat   : no-repeat;
    background-position : center center;
}

#headContainer div#blackBar div#clientSettings:hover 
{
    cursor              : pointer;
    background-color    : #636363;  
}

#headContainer div#blackBar div#clientSettings #settingsContainer
{  
    position            : relative; <- tried using absolute instead.
    top                 : 50px;
    left                : 0;
    padding             : 50px;
    background-color    : Green;
    z-index             : 99999; <- doesn't really matter.
}

我正在尝试找到一种方法,使#settingsContainer重叠其父元素和其他所有内容,同时保持它作为#clientSettings的子元素。
谢谢。

1
+1:我希望所有用户都能像这样在提问时付出同样的努力 :) - James Johnson
1个回答

1
这是因为在#clientSettings中使用了float:left,浮动元素会脱离浏览器的绘制流,因此它们开始表现得类似于position:absolute元素。您可以删除float:left或开始使用z-index(在#settingsContainer#clientSettings中都要使用)。这里有一个带有您代码的工作演示

我能把这两个元素都包裹在另一个div中,并在该div上应用“clearfix”吗?你认为这也是一个合适的解决方案吗? - user1027620
在“clearfix”下你是指什么? 能否在jsfiddle上展示一个例子? - Pavel Podlipensky
这只是我早些时候发现的一种清除浮动元素的方法,可以将所有东西对齐。http://jsfiddle.net/8Enzp/ - user1027620
我不能去掉float:left,否则会破坏设计,因为主方向是从右到左。我尝试添加了.clearfix类,但也无法解决这个问题。 - user1027620
从#grayBar中删除position:relative和top/left就解决了问题。我仍然会接受你的答案,因为它解释了一个解决方案,而且你花时间回答了我。谢谢! - user1027620

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接