【发布时间】:2009-11-17 04:52:22
【问题描述】:
已编辑:第一个版本是带有错误假设的错误示例!新版本见下文!
设置:
我有 2 个绝对定位的 div:
<div class="menuSubBack"> </div>
<div class="menuSub">
<ul>
<li>test1</li>
<li>test2</li>
</ul>
</div>
具有以下样式:
<style type="text/css">
.menuSub
{
position: absolute;
top: 0px;
left: 0px;
width: 100px;
overflow: auto;
color: #FFFFFF;
font-size: 8pt;
z-index: 99 !important;
}
.menuSub ul
{
list-style: none;
padding: 0px;
margin: 0px;
}
.menuSub ul li
{
text-align: center;
line-height: 25px;
height: 25px;
font-size: 12px;
}
.menuSubBack
{
position: absolute;
top: 0px;
left: 0px;
width: 100px;
overflow: hidden;
z-index: 1 !important;
background: #00FFFF;
}
</style>
问题:
“menuSub” div 具有自动生成的 li 标签。 “menuSubBack”稍后会获取 javascript 生成的 svg 内容,这些内容需要获得正确绘制的高度。你可能已经猜到我需要这两个高度相同的 div。我尝试使用 jQuery 来实现这一点,但 .height()、.innerHeight() 和 .outerHeight() 都返回 0,即使对于“menuSub”div 中的 ul 也是如此。有什么方法可以得到正确的高度吗? (除了计算 li 元素并总结固定高度)
编辑:之前看到的例子不是正确的问题,所以下面是一个完整大小的复制/粘贴示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<style type="text/css">
.menuSub
{
position: absolute;
top: 0px;
left: 0px;
width: 100px;
overflow: auto;
color: #FFFFFF;
font-size: 8pt;
z-index: 99 !important;
}
.menuSub ul
{
list-style: none;
padding: 0px;
margin: 0px;
}
.menuSub ul li
{
text-align: center;
line-height: 25px;
height: 25px;
font-size: 12px;
}
.menuSubBack
{
position: absolute;
top: 0px;
left: 0px;
width: 100px;
overflow: hidden;
z-index: 1 !important;
background: #00FFFF;
}
.menuHover
{
position: absolute;
top: 20px;
left: 20px;
width: 100px;
z-index: 10;
display: none;
overflow: visible;
}
</style>
<script type="text/javascript">
$(document).ready(
function()
{
$("#targetDiv").height($("#sourceDiv").height());
$("#hoverDiv").fadeIn("fast");
}
);
</script>
</head>
<body>
<div id="hoverDiv" class="menuHover">
<div id="targetDiv" class="menuSubBack"> </div>
<div id="sourceDiv" class="menuSub">
<ul>
<li>test1</li>
<li>test2</li>
</ul>
</div>
</div>
</body>
</html>
所以真正的问题似乎是,targetDiv 和 sourceDiv 驻留在 hoverDiv 内,加载页面时不可见,因此无法正确计算。
【问题讨论】:
-
百万美元的问题......到目前为止,没有人提供简单的答案。
-
使用提供的 HTML 和 Firefox 3.5 对我来说效果很好。您使用的是哪个浏览器,以及如何生成
- 标签?这是在服务器端还是客户端完成的?您确定高度检测代码是在您完成生成列表之后运行的,而不是在执行期间运行的吗?
-
menuSubBack 的作用是什么?为什么它必须是绝对定位的?
-
@rochal:正如我指出的,它包含一个自动生成的 svg。它旨在作为 menuSub 的背景(如名称所示)。 @samir:所有代码都是在服务器端生成的(当然除了 svg)。我使用 jQuery $(document).ready() 函数,所以我很确定在启动高度计算时一切都设置好了。你说得对,我有点困惑,简单的例子工作正常。我试图弄清楚为什么它不在完整的代码中。我现在正在扩展示例以更好地达到目标设置。
标签: jquery html css browser cross-browser