我正在开发一个网页,其中的元素基本上具有以下结构。有一个父容器,它和它的子容器可能各自包含“行”(在示例图像中用红色表示)或进一步嵌套的子容器(由带有黑色边框的黄色框表示)。每个子容器本身可以包含嵌套到任意深度的线或其他子容器。显然,子容器内的线条比父母的线条窄。
与每一行相关联,还有两个额外的信息位,它们应分别在线上显示在左侧和右侧,但在整个容器装置之外。这些由图片中的紫色和蓝色框表示。问题在于定位这些。它们应垂直排列与它们相关联的线,但是彼此水平对齐,与最外层容器的侧面保持恒定距离,无论相关线在子容器中嵌套多远。
以下是应该的内容:
如果可能的话,我正在寻找一个纯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>
我得到的是:
但是蓝色和紫色的盒子不应该像它们那样水平对齐。
我可以使用JavaScript(这里是JsFiddle)来解决问题,但是由于内部容器会定期调整大小等等,所以不得不经常调用它们(并且它们往往会被扭曲)很烦人用缩放)。如果有一种纯粹的CSS方法可以做到这一点,那就太棒了。
谢谢!
答案 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;
}