CSS如何设置div高度100%减去nPx [重复]
Posted
技术标签:
【中文标题】CSS如何设置div高度100%减去nPx [重复]【英文标题】:CSS How to set div height 100% minus nPx [duplicate] 【发布时间】:2010-11-14 15:13:21 【问题描述】:我有一个包装 div,它包含 2 个彼此相邻的 div。在这个容器上方,我有一个包含我的标题的 div。包装器 div 必须是 100% 减去标题的高度。标题约为 60 像素。这是固定的。所以我的问题是:如何将包装器 div 的高度设置为 100% 减去 60 像素?
<div id="header"></div>
<div id="wrapper">
<div id="left"></div>
<div id="right"></div>
</div>
【问题讨论】:
【参考方案1】:在 CSS3 中你可以使用
height: calc(100% - 60px);
【讨论】:
确保“-”号前后有空格。 Firefox 需要在“-”号前有空格。【参考方案2】:这是一个可以工作的 css,在 Firefox / IE7 / Safari / Chrome / Opera 下测试。
* margin:0px;padding:0px;overflow:hidden
div position:absolute
div#header top:0px;left:0px;right:0px;height:60px
div#wrapper top:60px;left:0px;right:0px;bottom:0px;
div#left top:0px;bottom:0px;left:0px;width:50%;overflow-y:auto
div#right top:0px;bottom:0px;right:0px;width:50%;overflow-y:auto
"overflow-y" 不是 w3c 认可的,但每个主流浏览器都支持它。如果内容太高,您的两个 div #left 和 #right 将显示一个垂直滚动条。
要在 IE7 下工作,您必须通过添加 DOCTYPE 来触发标准兼容模式:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title></title>
<style type="text/css">
*margin:0px;padding:0px;overflow:hidden
divposition:absolute
div#headertop:0px;left:0px;right:0px;height:60px
div#wrappertop:60px;left:0px;right:0px;bottom:0px;
div#lefttop:0px;bottom:0px;left:0px;width:50%;overflow-y:auto
div#righttop:0px;bottom:0px;right:0px;width:50%;overflow-y:auto
</style>
</head>
<body>
<div id="header"></div>
<div id="wrapper">
<div id="left"><div style="height:1000px">high content</div></div>
<div id="right"></div>
</div>
</body>
【讨论】:
它在 FF 中工作,但我不知道它在 IE7 下工作。我只看到'标题'代码:Header Left 右 您是否触发了标准兼容模式?我将在回复中添加一个示例页面。 另外,如果您需要将这些 div 放置在页面中间或其他任何位置,只需将它们包装在容器 div 中并在容器上设置position: relative
。然后将容器放置在页面上您喜欢的任何位置。
如果我想要 2 个高度分别为 40% 和 60% 的 div,那么在 #left 内的内部 div 呢?
对于 0 值参数指定 px 是否有特定原因?【参考方案3】:
如果需要支持 IE6,请使用 javascript 管理包装器 div 的大小(在读取窗口大小后以像素为单位设置元素的位置)。如果您不想使用 JavaScript,则无法执行此操作。有一些变通方法,但预计需要一两个星期才能使其适用于每种情况和每种浏览器。
对于其他现代浏览器,使用这个 css:
position: absolute;
top: 60px;
bottom: 0px;
【讨论】:
该站点仅兼容 IE 7。当我使用 height: 100% 和 top: 60px 时;我仍然使用滚动条。我可以向下滚动 60 像素。 不指定高度,使用top和bottom,让浏览器计算高度。 但我希望我的页面的最大高度为 100% 减去 60px;如果内容大于那个,我想通过使用溢出来在 div 中添加滚动条:scroll; 对于滚动条,在 wrapper 中添加一个 div 来完全填充它并使其溢出:scroll; 请注意,由于 IE7 中的错误,这可能仍然会失败。如果你不能让它工作,请使用 JavaScript。我知道,你不喜欢它,但要权衡一周与奇怪错误作斗争的工作。【参考方案4】:太棒了...现在我已经停止使用 % he he he... 除了如下所示的主容器:
<div id="divContainer">
<div id="divHeader">
</div>
<div id="divContentArea">
<div id="divContentLeft">
</div>
<div id="divContentRight">
</div>
</div>
<div id="divFooter">
</div>
</div>
这里是css:
#divContainer
width: 100%;
height: 100%;
#divHeader
position: absolute;
left: 0px;
top: 0px;
right: 0px;
height: 28px;
#divContentArea
position: absolute;
left: 0px;
top: 30px;
right: 0px;
bottom: 30px;
#divContentLeft
position: absolute;
top: 0px;
left: 0px;
width: 250px;
bottom: 0px;
#divContentRight
position: absolute;
top: 0px;
left: 254px;
right: 0px;
bottom: 0px;
#divFooter
position: absolute;
height: 28px;
left: 0px;
bottom: 0px;
right: 0px;
我在所有已知的浏览器中对此进行了测试,并且工作正常。使用这种方式有什么缺点吗?
【讨论】:
【参考方案5】:div
height: 100%;
height: -webkit-calc(100% - 60px);
height: -moz-calc(100% - 60px);
height: calc(100% - 60px);
确保少用时
height: ~calc(100% - 60px);
否则less是无法正确编译的
【讨论】:
【参考方案6】:你可以做类似 height: calc(100% - nPx); 例如 height: calc(100% - 70px);
【讨论】:
【参考方案7】:这并不能完全回答所提出的问题,但它确实会产生您想要实现的相同视觉效果。
<style>
body
border:0;
padding:0;
margin:0;
padding-top:60px;
#header
position:absolute;
top:0;
height:60px;
width:100%;
#wrapper
height:100%;
width:100%;
</style>
【讨论】:
【参考方案8】:在此示例中,您可以识别不同的区域:
<html>
<style>
#divContainer
width: 100%;
height: 100%;
#divHeader
position: absolute;
left: 0px;
top: 0px;
right: 0px;
height: 28px;
background-color:blue;
#divContentArea
position: absolute;
left: 0px;
top: 30px;
right: 0px;
bottom: 30px;
#divContentLeft
position: absolute;
top: 0px;
left: 0px;
width: 200px;
bottom: 0px;
background-color:red;
#divContentCenter
position: absolute;
top: 0px;
left: 200px;
bottom: 0px;
right:200px;
background-color:yellow;
#divContentRight
position: absolute;
top: 0px;
right: 0px;
bottom: 0px;
width:200px;
background-color:red;
#divFooter
position: absolute;
height: 28px;
left: 0px;
bottom: 0px;
right: 0px;
background-color:blue;
</style>
<body >
<div id="divContainer">
<div id="divHeader"> top
</div>
<div id="divContentArea">
<div id="divContentLeft">left
</div>
<div id="divContentCenter">center
</div>
<div id="divContentRight">right
</div>
</div>
<div id="divFooter">bottom
</div>
</div>
</body>
</html>
【讨论】:
【参考方案9】:我还没有看到这样的帖子,但我想我会把它放在那里。
<div class="main">
<header>Header</header>
<div class="content">Content</div>
然后是 CSS:
body, html
height: 100%;
margin: 0;
padding: 0;
.main
height: 100%;
padding-top: 50px;
box-sizing: border-box;
header
height: 50px;
margin-top: -50px;
width: 100%;
background-color: #5078a5;
.content
height: 100%;
background-color: #999999;
这是一个有效的jsfiddle
注意:我不知道浏览器的兼容性是什么。我只是在玩其他解决方案,这似乎效果很好。
【讨论】:
【参考方案10】:使用设置为 100% 的外包装 div,然后您的内包装 div 100% 现在应该与此相关。
我确信这对我有用,但显然不是:
<html>
<body>
<div id="outerwrapper" style="border : 1px solid red ; height : 100%">
<div id="header" style="border : 1px solid blue ; height : 60px"></div>
<div id="wrapper" style="border : 1px solid green ; height : 100% ; overflow : scroll ;">
<div id="left" style="height : 100% ; width : 50% ; overflow : scroll; float : left ; clear : left ;">Some text
on the left</div>
<div id="right" style="height : 100% ; width 50% ; overflow : scroll; float : left ;">Some Text on the
right</div>
</div>
</div>
</body>
</html>
【讨论】:
可以举个例子。我不明白 我发布了我的想法,但我无法让它这么早/这么晚工作。也许如果我再睡一点。【参考方案11】:如果您不想使用绝对定位和所有爵士乐,这里有一个我喜欢使用的修复:
你的html:
<body>
<div id="header"></div>
<div id="wrapper"></div>
</body>
你的 CSS:
body
height:100%;
padding-top:60px;
#header
margin-top:60px;
height:60px;
#wrapper
height:100%;
【讨论】:
我不认为这按预期工作。首先#header
应该是margin-top:-60px;
。其次,height:100%
表示高度将是父元素高度的 100%,不包括边距、内边距和边框。根据您的滚动设置,这将导致出现滚动条或裁剪您的内容。以上是关于CSS如何设置div高度100%减去nPx [重复]的主要内容,如果未能解决你的问题,请参考以下文章