CSS как установить высоту div 100% минус nPx
У меня есть обертка div, которая содержит 2 дива рядом друг с другом. Над этим контейнером у меня есть div, который содержит мой заголовок. Обертка div должна быть 100% минус высота заголовка. Заголовок составляет около 60 пикселей. Это исправлено. Итак, мой вопрос: Как установить высоту моей оболочки div на 100% минус 60 px?
<div id="header"></div>
<div id="wrapper">
<div id="left"></div>
<div id="right"></div>
</div>
11 ответов:
вот рабочий 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>
Если вам нужно поддерживать IE6, используйте JavaScript, чтобы управлять размером оболочки div (установите положение элемента в пикселях после чтения размера окна). Если вы не хотите использовать JavaScript, то это не может быть сделано. Есть обходные пути, но ожидать неделю или две, чтобы заставить его работать в каждом случае и в каждом браузере.
для других современных браузеров используйте этот css:
position: absolute; top: 60px; bottom: 0px;
большой... теперь я перестал использовать % 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; }Я проверил это во всех известных браузерах и работает нормально. Есть ли недостатки в использовании этого способа?
div { height: 100%; height: -webkit-calc(100% - 60px); height: -moz-calc(100% - 60px); height: calc(100% - 60px); }убедитесь, что при использовании менее
height: ~calc(100% - 60px);в противном случае less не будет компилировать его правильно
Это не совсем ответ на поставленный вопрос, но он создает тот же визуальный эффект, который вы пытаетесь достичь.
<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>
в этом примере вы можете определить различные области:
<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>
Я еще не видел ничего подобного, но я думал, что выложу его там.
<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
примечание: Я понятия не имею, что совместимость браузера для этого. Я просто играл с альтернативными решениями, и это, казалось, хорошо работало.
используйте внешнюю обертку 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>
Если вы не хотите использовать абсолютное позиционирование и все такое прочее, вот что я хотел бы использовать:
ваш html:
<body> <div id="header"></div> <div id="wrapper"></div> </body>код:
body { height:100%; padding-top:60px; } #header { margin-top:60px; height:60px; } #wrapper { height:100%; }
Comments