我想在一个恰好有多列的表行(tr标签)上叠加div(或任何可以工作的元素)。
我尝试了一些似乎不起作用的方法。我在下面发布了我当前的代码。
我确实得到了一个叠加层,但不是直接在行上。我尝试将叠加层顶部设置为$ divBottom.css('top'),但这始终是'auto'。
那么,我是在正确的轨道上,还是有更好的方法呢?你可以看到使用jQuery很好。
如果我在正确的轨道上,我该如何正确放置div? offsetTop是否是包含元素,表格中的偏移量,我需要做一些数学运算?我会遇到其他任何陷阱吗?
$(document).ready(function() {
$('#lnkDoIt').click(function() {
var $divBottom = $('#rowBottom');
var $divOverlay = $('#divOverlay');
var bottomTop = $divBottom.attr('offsetTop');
var bottomLeft = $divBottom.attr('offsetLeft');
var bottomWidth = $divBottom.css('width');
var bottomHeight = $divBottom.css('height');
$divOverlay.css('top', bottomTop);
$divOverlay.css('left', bottomLeft);
$divOverlay.css('width', bottomWidth);
$divOverlay.css('height', bottomHeight);
$('#info').text('Top: ' + bottomTop + ' Left: ' + bottomLeft);
});
});
#rowBottom { outline:red solid 2px }
#divBottom { margin:1em; font-size:xx-large; position:relative; }
#divOverlay { background-color:Silver; text-align:center; position:absolute; z-index:10000; opacity:0.5; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<head>
<title>Overlay Tests</title>
</head>
<body>
<p align="center"><a id="lnkDoIt" href="#">Do it!</a></p>
<table width="100%" border="0" cellpadding="10" cellspacing="3" style="position:relative">
<tr>
<td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></td>
</tr>
<tr id="rowBottom">
<td><div id="divBottom"><p align="center">This is the bottom text</p></div></td>
</tr>
<tr>
<td><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p></td>
</tr>
</table>
<div id="divOverlay" style=""><p>This is the overlay div.</p><p id="info"></p></div>
</body>
</html>
答案 0 :(得分:34)
您需要使叠加div具有绝对位置。同时对行的顶部和左侧位置使用position()jQuery方法 - 这里是缺少的部分:
var rowPos = $divBottom.position(); bottomTop = rowPos.top; bottomLeft = rowPos.left; // $divOverlay.css({ position: 'absolute', top: bottomTop, left: bottomLeft, width: bottomWidth, height: bottomHeight });
答案 1 :(得分:14)
请:
div style="position:absolute"
td style="position:relative;display:block"
你不需要jquery。
答案 2 :(得分:0)
此外,请确保外部元素(在本例中为表)overflow属性未设置为隐藏。溢出时隐藏设置,不会显示叠加!
答案 3 :(得分:0)
使对象的高度和宽度变得简单。对我来说困难的部分是绝对定位的顶部和左侧坐标。
这是我唯一可靠的脚本:
function posY(ctl)
{
var pos = ctl.offsetHeight;
while(ctl != null){
pos += ctl.offsetTop;
ctl = ctl.offsetParent;
}
return pos;
}
function posX(ctl)
{
var pos = 0;
while(ctl != null){
pos += ctl.offsetLeft;
ctl = ctl.offsetParent;
}
return pos;
}
答案 4 :(得分:0)
这应该做:
var bottomTop = $divBottom.offset().top;
var bottomLeft = $divBottom.offset().left;
答案 5 :(得分:0)
<!--only this the structure you need to make it visible-->
<!-- this is a wrapper -->
<div style="position: relative;">
<div style="position: absolute;"> i'm on the top</div> <!-- here the things you want on top -->
<!-- everything code you want to write -->
<table></table>
</div>