Html 如何使div达到页面(而不是屏幕)高度的100%?

Html 如何使div达到页面(而不是屏幕)高度的100%?,html,css,Html,Css,我正在尝试使用CSS在我的页面上创建一个“灰显”效果,同时在应用程序运行时,加载框显示在前台。我创建了一个100%高/宽、半透明的黑色div,通过javascript打开/关闭可见性。我认为这很简单;但是,当页面内容扩展到屏幕滚动的点时,滚动到页面底部会显示未变灰的部分。换句话说,div高度的100%似乎应用于浏览器视口大小,而不是实际页面大小。如何使div扩展以覆盖整个页面的内容?在切换JQuery.css的可见性之前,我尝试过使用JQuery.css('height','100%'),但这并

我正在尝试使用CSS在我的页面上创建一个“灰显”效果,同时在应用程序运行时,加载框显示在前台。我创建了一个100%高/宽、半透明的黑色div,通过javascript打开/关闭可见性。我认为这很简单;但是,当页面内容扩展到屏幕滚动的点时,滚动到页面底部会显示未变灰的部分。换句话说,div高度的100%似乎应用于浏览器视口大小,而不是实际页面大小。如何使div扩展以覆盖整个页面的内容?在切换JQuery.css的可见性之前,我尝试过使用JQuery.css('height','100%'),但这并没有改变任何事情

这是相关部门的CSS:

div.screenMask
{
    position: absolute;
    left: 0px;
    top: 0px;
    width: 100%;
    height: 100%;
    z-index: 1000;
    background-color: #000000;
    opacity: 0.7;
    filter: alpha(opacity=70);
    visibility: hidden;
}

谢谢。

如果您将
位置:绝对
更改为
位置:固定
它将在除IE6之外的所有浏览器中工作。这会将div固定到视口中,因此滚动时它不会移出视图

您可以在jQuery中使用
$(document).height()
,使其在IE6中也能工作。例如

$('.screenMask').height($(document).height());
这显然也可以解决所有其他浏览器的问题,但如果可以避免的话,我宁愿不使用JavaScript。实际上,你也需要对宽度做同样的事情,以防出现任何水平滚动

也有,但它们倾向于对CSS施加一些其他限制,或者使用JavaScript,因此它们可能不值得麻烦


另外,我假设您只有其中一个掩码,因此我建议使用ID而不是类。

如果您使用jQuery设置弹出窗口前的高度,我猜可以添加更多javascript:)

您可以将div的高度设置为document.body的scrollHeight,这样它应该覆盖整个正文。你确实需要增加一些额外的技巧,以确保它一直覆盖着身体,以防下面的东西决定生长

div.screenMask
{
    position: absolute;
    left: 0px;
    top: 0px;
    right: 0px;
    bottom: 0px;
    z-index: 1000;
    background-color: #000000;
    opacity: 0.7;
    filter: alpha(opacity=70);
    visibility: hidden;
}

通过设置所有
顶部
底部
左侧
右侧
,高度和宽度将自动计算。如果
screenMask
元素的直接子元素,并且标准盒子模型有效(即怪癖模式未被触发),这将覆盖整个页面。

我意识到我回答这个问题已经很久了,但我在被这个问题短暂绊倒后来到这里,目前的答案都不正确

以下是正确答案:

body {
    position: relative;
}
就这样!现在,您的元素将相对于
而不是视口进行定位

我不想为position:fixed费心,因为它的浏览器支持仍然参差不齐。iOS 5之前的Safari根本不支持它

请注意,
元素将覆盖
的边框框(框+填充+边框),但不会覆盖其边距。通过在
上设置负位置(例如
顶部:-20px
)或删除
的边距进行补偿

我还建议将
设置为
高度:100%
,以确保不会在较短的页面上出现部分遮罩的视口

从先前的回答中得出两个有效点。正如Ben Blank所说,您可能会丢失
宽度
高度
声明,而是将所有四个角都定位。mercator是正确的,对于这样一个重要的单个元素,应该使用ID而不是类

这将留下以下建议的完整CSS:

body {
    position: relative;
    margin: 0;
}

#screenMask {
    position: absolute;
    left: 0; right: 0;
    top: 0; bottom: 0;
    z-index: 1000;
    background-color: #000;
    opacity: 0.7;
    filter: alpha(opacity=70);
    visibility: hidden;
}
和HTML:

<body>
    <div id="screenMask"></div>
</body>


我希望这能帮助别人

如果您希望弹出具有覆盖效果,则可以使用以下步骤

<style>
.overlay{
 background:#000;
 opacity:0.5;
 position:fixed;
 z-index:1;
 width:100%;
 height:100%;
}
.popup{
 width:500px;
 margin:auto;
 position:fixed;
 z-index:2;
 height:300px;
}
</style>
<div class="overlay"></div>
<div class="popup">
      Hello everyone
</div>

.覆盖{
背景:#000;
不透明度:0.5;
位置:固定;
z指数:1;
宽度:100%;
身高:100%;
}
.弹出窗口{
宽度:500px;
保证金:自动;
位置:固定;
z指数:2;
高度:300px;
}
大家好

当显示半透明的灰色div时,是否可以禁用滚动条?你真的希望用户能够向下滚动查看他们无法处理的内容吗?如果基础页面高于一个视口高度,你不需要使用
position:fixed
来防止div.screenMask滚动吗?这在IE6中根本不起作用。在其他浏览器中,它需要位置:身体上的相对位置才能工作,即使这样,它也只能在垂直滚动上工作,而不能在水平滚动上工作。如果使用Javascript显示掩码,还有什么比Javascript更能解决高度问题呢?谢谢,将绝对值更改为固定值就是所需的全部!关于身份证也有道理。@Lee:太好了@保罗:这几乎不是什么问题,我必须同意。但是,虽然JS支持不是问题所在,但最终会将风格与行为混为一谈,并且可能(稍微)影响性能。李也回答了你的问题。在这种情况下,JavaScript解决方案实际上是不必要的。啊,还记得以前的好日子吗,100%实际上意味着100%?+1,但是我要指出的是,当将滚动容器的位置更改为相对位置时,即使这是一种值得怀疑的方法,也可能会产生不可预见的后果。幸运的是,今天,我的滚动容器已经相对定位了!使用
位置的诀窍:绝对
相结合,有时是一个真正的救命稻草,而且总是很容易忘记。相对于
身体
的定位几乎可以解决这个问题,但将body的高度设置为100%并不是一个有用的解决方案:虽然它修复了不填充视口的页面,但它会打断较大的页面,即body将只具有视口的高度。另外,将
minheight:100%
设置为body似乎根本没用(Firefox)。