我的问题与以下演示有关http://jsfiddle.net/legrass/ca22L/和http://jsfiddle.net/legrass/eER66/2/。
简而言之,我需要突出显示页面上的一些元素(例如,通过红色边框),但不触及实际元素(以避免影响原始页面的布局)。为此,在 JS 中,我创建了绝对定位在元素上的“覆盖”元素,以使用顶部、左侧坐标突出显示。这些附加到正文并通过 CSS 设置样式(参见第一个 JSFiddle)。例如:
<body>
<div class='overlay'>
<span class="a" style="top: 14px; left: 321px; width: 200px; height: 140px;"> </span>
<span class="b" style="top: 52px; left: 351px; width: 140px; height: 63px;"> </span>
<span class="c" style="top: 72px; left: 400px; width: 8px; height: 16px;"></span>
<span class="c" style="top: 74px; left: 420px; width: 8px; height: 16px;"></span>
</div>
....
这很好用。但是,为了允许更灵活的 css 选择器(例如,孩子),我需要通过嵌套它们来构建上面的叠加层:
<body>
<div class='overlay'>
<span class="a" style="top: 14px; left: 321px; width: 200px; height: 140px;">
<span class="b" style="top: 52px; left: 351px; width: 140px; height: 63px;">
<span class="c" style="top: 72px; left: 400px; width: 8px; height: 16px;"></span>
<span class="c" style="top: 74px; left: 420px; width: 8px; height: 16px;"></span>
<span/>
<span/>
</div>
....
嵌套可以在任何深度。不幸的是,现在它的定位不正确,(参见第二个 JSFiddle)。
我知道这是因为每个跨度现在都是绝对定位的,但相对于其父级,而不是单个容器 div。我尝试过相对定位,但当然不起作用。
问题:有没有办法像第一个 JSfiddle 一样获得布局但保持层次结构?
更新 从下面的答案中,使用 offsetLeft 和 offsetTop 调整坐标确实有帮助。我计算向上 DOM 的总偏移量并添加 offsetLeft (offsetTop) 直到 offsetParent 存在。但是,结果仍然有几个像素偏移,似乎还有其他需要考虑的地方。任何的想法?
已解决 正如评论中提到的,还需要考虑边框宽度。