CSS Как установить высоту div 100% минус nPx
У меня есть обертка div, которая содержит 2 divs рядом друг с другом. Над этим контейнером у меня есть div, содержащий мой заголовок. Оболочка обертки должна быть на 100% меньше высоты заголовка. Заголовок составляет около 60 пикселей. Это исправлено. Поэтому мой вопрос: как установить высоту моего обертки div на 100% минус 60 пикселей?
<div id="header"></div>
<div id="wrapper">
<div id="left"></div>
<div id="right"></div>
</div>
Ответы
Ответ 1
Вот рабочий 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, но каждый главный браузер поддерживает его. Ваши два divs #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}
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}
</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>
Ответ 2
В CSS3 вы можете использовать
height: calc(100% - 60px);
Ответ 3
Если вам нужно поддерживать IE6, используйте JavaScript, чтобы управлять размером обертки div (задайте положение элемента в пикселях после прочтения размера окна). Если вы не хотите использовать JavaScript, это невозможно. Есть обходные пути, но ожидают, что неделя или две заставят его работать в каждом случае и в каждом браузере.
Для других современных браузеров используйте этот css:
position: absolute;
top: 60px;
bottom: 0px;
Ответ 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
Вы можете сделать что-то вроде height: calc (100% - nPx); например, высота: calc (100% - 70px);
Ответ 6
Это не отвечает на поставленный вопрос, но создает тот же визуальный эффект, который вы пытаетесь достичь.
<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>
Ответ 7
В этом примере вы можете определить разные области:
<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>
Ответ 8
Я еще не видел ничего подобного, но я подумал, что я поместил его там.
<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
Примечание. Я понятия не имею, что такое совместимость с браузером. Я просто играл с альтернативными решениями, и это, казалось, хорошо работало.
Ответ 9
Используйте внешнюю оболочку div, установленную на 100%, а затем ваша внутренняя оболочка 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>
Ответ 10
Если вы не хотите использовать абсолютное позиционирование и весь этот джаз, здесь исправление, которое мне нравится использовать:
ваш 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%;
}