我的页面左侧有一个导航栏,我希望它可以拉伸到页面高度的 100%。不仅是视口的高度,还包括在您滚动之前隐藏的区域。我不想使用 javascript 来实现这一点。
可以用 HTML/CSS 完成吗?
这是我在使用 div 作为动态背景的容器时最终想到的解决方案。
z-index
非背景用途。left
或right
用于全高列。top
或bottom
为全宽行。编辑 1:下面的 CSS 已被编辑,因为它在 FF 和 Chrome 中没有正确显示。移动position:relative
到 HTML 上并将正文设置为height:100%
而不是min-height:100%
.
编辑 2:向 CSS 添加了额外的注释。在上面添加了更多说明。
CSS:
html{
min-height:100%;/* make sure it is at least as tall as the viewport */
position:relative;
}
body{
height:100%; /* force the BODY element to match the height of the HTML element */
}
#cloud-container{
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
overflow:hidden;
z-index:-1; /* Remove this line if it's not going to be a background! */
}
的HTML:
<!doctype html>
<html>
<body>
<div id="cloud-container"></div>
</body>
</html>
为什么?
html{min-height:100%;position:relative;}
如果没有这个,云容器 DIV 将从 HTML 的布局上下文中删除。position: relative
确保绘制时 DIV 保留在 HTML 框内,以便bottom:0
引用 HTML 框的底部。您也可以height:100%
在云容器上使用,因为它现在指的是 HTML 标记的高度,而不是视口。
使用 HTML5,最简单的方法就是简单地执行height: 100vh
. 其中“vh”代表浏览器窗口的视口高度。响应调整浏览器和移动设备的大小。
我有一个类似的问题,解决方案是这样做:
#cloud-container{
position:absolute;
top:0;
bottom:0;
}
我想要一个以页面为中心的 div,高度为页面高度的 100%,所以我的总体解决方案是:
#cloud-container{
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
width: XXXpx; /*otherwise div defaults to page width*/
margin: 0 auto; /*horizontally centers div*/
}
您可能需要使父元素(或简称为“body”)具有position: relative;
您可以使用Faux Columns作弊, 或者您可以使用一些CSS 技巧
使用绝对位置。请注意,这不是我们通常习惯于使用绝对位置的方式,它需要手动布局或使用浮动对话框。当您调整窗口或内容的大小时,这将自动拉伸。我相信这需要标准模式,但可以在 IE6 及更高版本中使用。
只需将 id 为 'thecontent' 的 div 替换为您的内容(此处指定的高度仅用于说明,您不必在实际内容上指定高度。
<div style="position: relative; width: 100%;">
<div style="position: absolute; left: 0px; right: 33%; bottom: 0px; top: 0px; background-color: blue; width: 33%;" id="navbar">nav bar</div>
<div style="position: relative; left: 33%; width: 66%; background-color: yellow;" id="content">
<div style="height: 10000px;" id="thecontent"></div>
</div>
</div>
其工作方式是外部 div 充当导航栏的参考点。外部 div 被 'content' div 的内容拉长。导航栏使用绝对定位将自身伸展到其父级的高度。对于水平对齐,我们使内容 div 自身偏移导航栏的相同宽度。
使用 CSS3 flex box 模型,这变得更容易了,但这在 IE 中尚不可用,并且有一些它自己的怪癖。
使用表格很简单:
<html>
<head>
<title>100% Height test</title>
</head>
<body>
<table style="float: left; height: 100%; width: 200px; border: 1px solid red">
<tbody>
<tr>
<td>Nav area</td>
</tr>
</tbody>
</table>
<div style="border: 1px solid green;">Content blabla... text
<br /> text
<br /> text
<br /> text
<br />
</div>
</body>
</html>
当 DIV 被引入时,人们非常害怕桌子,以至于可怜的 DIV 成为了比喻性的锤子。
我遇到了和你一样的问题。我想做一个DIV
背景,为什么,因为它很容易通过javascript操作div。无论如何,我在 css 中为那个 div 做了三件事。
CSS:
{
position:absolute;
display:block;
height:100%;
width:100%;
top:0px;
left:0px;
z-index:-1;
}
我想在提示模态弹出窗口之前覆盖整个网页。我尝试了许多使用 CSS 和 Javascript 的方法,但在我找到以下解决方案之前,它们都没有帮助。它对我有用,我希望它对你也有帮助。
<!DOCTYPE html>
<html>
<head>
<style>
html, body {
margin: 0px 0px;
height 100%;
}
div.full-page {
position: fixed;
top: 0;
bottom: 0;
width: 100%;
height: 100%;
background-color: #000;
opacity:0.8;
overflow-y: hidden;
overflow-x: hidden;
}
div.full-page div.avoid-content-highlight {
position: relative;
width: 100%;
height: 100%;
}
div.modal-popup {
position: fixed;
top: 20%;
bottom: 20%;
left: 30%;
right: 30%;
background-color: #FFF;
border: 1px solid #000;
}
</style>
<script>
// Polling for the sake of my intern tests
var interval = setInterval(function() {
if(document.readyState === 'complete') {
clearInterval(interval);
isReady();
}
}, 1000);
function isReady() {
document.getElementById('btn1').disabled = false;
document.getElementById('btn2').disabled = false;
// disable scrolling
document.getElementsByTagName('body')[0].style.overflow = 'hidden';
}
function promptModalPopup() {
document.getElementById("div1").style.visibility = 'visible';
document.getElementById("div2").style.visibility = 'visible';
// disable scrolling
document.getElementsByTagName('body')[0].style.overflow = 'hidden';
}
function closeModalPopup() {
document.getElementById("div2").style.visibility = 'hidden';
document.getElementById("div1").style.visibility = 'hidden';
// enable scrolling
document.getElementsByTagName('body')[0].style.overflow = 'scroll';
}
</script>
</head>
<body id="body">
<div id="div1" class="full-page">
<div class="avoid-content-highlight">
</div>
</div>
<button id="btn1" onclick="promptModalPopup()" disabled>Prompt Modal Popup</button>
<div id="demo">
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
<h2>Original content</h2>
</div>
<div id="div2" class="modal-popup">
I am on top of all other containers
<button id="btn2" onclick="closeModalPopup()" disabled>Close</button>
<div>
</body>
</html>
祝你好运 ;-)
如果您的目标是更现代的浏览器,生活可能会非常简单。尝试:
.elem{
height: 100vh;
}
如果您在页面的 50% 处需要它,请将 100 替换为 50。
* {
margin: 0;
}
html, body {
height: 90%;
}
.content {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto ;
}
document.body.onload = function () {
var textcontrol = document.getElementById("page");
textcontrol.style.height = (window.innerHeight) + 'px';
}
<html>
<head><title></title></head>
<body>
<div id="page" style="background:green;">
</div>
</body>
</html>
很简单,只需将其包装在一个表格 div 中...
的HTML:
<div class="fake-table">
<div class="left-side">
some text
</div>
<div class="right-side">
My Navigation or something
</div>
</div>
CSS:
<style>
.fake-table{display:table;width:100%;height:100%;}
.left-size{width:30%;height:100%;}
.left-size{width:70%;height:100%;}
</style>
我成功了
min-height: 100vh
对于菜单和内容 div。