【发布时间】:2011-03-15 20:20:04
【问题描述】:
我正在使用一个旧的 CSS 技巧来为某些内容获取半透明背景,而不会使内容看起来是半透明的。这是 HMTL:
<div id="frame">
<div id="opacityFrame">
</div>
<div id="contentFrame">
<div>
<!-- Main Site Content Here -->
</div>
</div>
</div>
下面是对应的 CSS:
#frame
{
width: 90%;
margin: auto;
position: relative;
z-index: 0;
}
#opacityFrame
{
background: #00ff00;
opacity: .15;
top: 0;
left: 0;
position: absolute;
width: 100%;
height: 100%;
z-index: 1;
}
#contentFrame
{
top: 0;
left: 0;
position: absolute;
height: 100%;
width: 100%;
z-index: 1;
}
我的问题是因为#frame 是位置:相对的,它的高度不会随其内容动态扩展。 #opacityFrame 和 #contentFrame 都设置为 100% 的高度和宽度,它们会适当地扩展以填充 #frame,这很棒。问题是我需要#frame 的高度随着#contentFrame 的孩子DIV 的内容而增长,因为DIV 的高度会随着放置在其中的内容而动态调整。
我最终不得不创建一个 jQuery 函数:
function resizeFrame()
{
$('#frame').height($('#contentFrame > div').height());
}
注意:#contentFrame 中有一个孩子 DIV 的原因是因为某些奇怪的原因,#contentFrame 的高度总是为零。我假设它与 position 是 absolute 有关。
此代码效果很好,可以准确地将#frame 的高度调整为#contentFrame 的孩子DIV 的高度。但是,我做了很多 ajax 来更改 DIV 中的内容。一种解决方案是使用每个 ajax 事件调用resizeFrame(),但这似乎很乏味。是否有一个事件或我可以绑定的东西可以执行这个函数而无需我明确地调用它?我尝试了以下事件,但它们似乎不起作用;也许我做错了。
$('#subFrame > div').resize()$('#subFrame > div').change()
当子 DIV 的内容被修改时,这些似乎都没有触发。也许我会以错误的方式解决这个问题?我不想使用透明图片作为背景。
【问题讨论】:
-
'frame' 也是标签的名称,因此我建议不要将该术语用作类以避免在 CSS 文件中混淆。
-
Frame 不是一个类,它只是一个 ID,通过
#显而易见。 -
作者是显而易见的,但对于必须在 6 个月内更新网站的人来说却不一定显而易见。一般来说,不使用标签名作为类名和 ID 名只是一个很好的经验法则。
标签: javascript jquery html css asp.net-mvc