如何相对于一个父项水平定位元素,相对于另一个父素垂直定位元素?

时间:2014-12-16 02:05:57

标签: html css positioning absolute relative

我正在开发一个网页,其中的元素基本上具有以下结构。有一个父容器,它和它的子容器可能各自包含“行”(在示例图像中用红色表示)或进一步嵌套的子容器(由带有黑色边框的黄色框表示)。每个子容器本身可以包含嵌套到任意深度的线或其他子容器。显然,子容器内的线条比父母的线条窄。

与每一行相关联,还有两个额外的信息位,它们应分别在线上显示在左侧和右侧,但在整个容器装置之外。这些由图片中的紫色和蓝色框表示。问题在于定位这些。它们应垂直排列与它们相关联的线,但是彼此水平对齐,与最外层容器的侧面保持恒定距离,无论相关线在子容器中嵌套多远。

以下是应该的内容:

good display

如果可能的话,我正在寻找一个纯CSS解决方案。然而,问题是使用绝对定位,我可以使用最外面的父亲作为绝对位置相对于,并且获得水平位置右边,或者线条作为绝对位置相对于的,并获得垂直位置是的,但不是两个

例如,使用以下内容:

#parent {
    margin-right: 50px;
    margin-left: 50px;
}
.subcontainer, .container {
    padding: 20px 20px 20px 50px;
    min-height: 20px;
    background-color: yellow;
    border: 2px solid black;
    margin-bottom: 10px;
}
.box {
    min-height: 20px;
    background-color: red;
    margin-bottom: 10px;
    position: relative;
}
.righty {
    position: absolute;
    min-height: 14px;
    min-width: 30px;
    right: -64px;
    background-color: blue;
}
.lefty {
    position: absolute;
    min-height: 14px;
    min-width: 30px;
    left: -94px;
    background-color: purple;
}
<div id="parent" class="container">
    <div class="box">
        <div class="lefty"></div>
        <div class="righty"></div>
    </div>
    <div class="box">
        <div class="lefty"></div>
        <div class="righty"></div>
    </div>
    <div class="box"></div>
    <div class="subcontainer">
        <div class="box">
            <div class="lefty"></div>
            <div class="righty"></div>
        </div>
        <div class="subcontainer">
            <div class="box">
                <div class="lefty"></div>
                <div class="righty"></div>
            </div>
            <div class="box">
                <div class="lefty"></div>
                <div class="righty"></div>
            </div>
        </div>
    </div>
    <div class="subcontainer">
        <div class="box">
            <div class="lefty"></div>
            <div class="righty"></div>
        </div>
    </div>
</div>

我得到的是:

bad image

但是蓝色和紫色的盒子不应该像它们那样水平对齐。

我可以使用JavaScript(这里是JsFiddle)来解决问题,但是由于内部容器会定期调整大小等等,所以不得不经常调用它们(并且它们往往会被扭曲)很烦人用缩放)。如果有一种纯粹的CSS方法可以做到这一点,那就太棒了。

谢谢!

1 个答案:

答案 0 :(得分:1)

好的,我基本上在这里做的是,我从position: relative移除.box并将其添加到#parent,所以现在.righty.lefty绝对相对定位到 #parent ,而非 .box {{1} } .container

.subcontainer
#parent {
    margin-right: 50px;
    margin-left: 50px;
  position: relative;
}

.subcontainer, .container {
    padding: 20px 20px 20px 50px;
    min-height: 20px;
    background-color: yellow;
    border: 2px solid black;
    margin-bottom: 10px;
}
.box {
    min-height: 20px;
    background-color: red;
    margin-bottom: 10px;
    _position: relative;
}
.righty {
    position: absolute;
    min-height: 14px;
    min-width: 30px;
    left: 101%;
    background-color: blue;
}
.lefty {
    position: absolute;
    min-height: 14px;
    min-width: 30px;
    right: 101%;
    background-color: purple;
}