Как заполнить 100% оставшейся высоты?
+--------------------+
| |
| |
| |
| |
| 1 |
| |
| |
| |
| |
+--------------------+
| |
| |
| |
| |
| 2 |
| |
| |
| |
| |
+--------------------+
Содержание (1) как показано выше, неизвестно, как оно может увеличиваться или уменьшаться в динамически генерируемых страниц. Второй div (2), как показано выше, должен заполнить оставшееся пространство.
вот пример моего html
<div id="full">
<!--contents of 1 -->
<div id="someid">
<!--contents of 2 -->
</div>
</div>
css...
#full{width: 300px; background-color: red;}
#someid{height: 100%;}
или это неправильный метод? Как мне это сделать?
пожалуйста, смотрите мой демо и покажи мне мою ошибку.
8 ответов:
вы должны быть в состоянии сделать это, если вы добавить в div (
#headerниже), чтобы обернуть Содержание 1.
если вы плаваете
#header, содержание с#someidбудет вынужден обтекать его.Далее, вы устанавливаете
#headerширина до 100%. Это заставит его расшириться, чтобы заполнить ширину содержащего div,#full. Это будет эффективно толкать все 's ниже#headerтак как нет места для потока по бокам больше.наконец, set
#someid's высота до 100%, это сделает его такой же высоты, как#full.HTML
<div id="full"> <div id="header">Contents of 1</div> <div id="someid">Contents of 2</div> </div>CSS
html, body, #full, #someid { height: 100%; } #header { float: left; width: 100%; }
обновление
Я думаю, что стоит упомянуть, что flexbox хорошо поддерживается в современных браузерах сегодня. CSS может быть изменен есть
#fullстать гибким контейнером, и#someidдолжен установить это flex расти до значения больше, чем0.html, body, #full { height: 100%; } #full { display: flex; flex-direction: column; } #someid { flex-grow: 1; }
и
divдо 100% высоты на странице, вам нужно будет установить каждый объект в иерархии выше div на 100%, а также. например:html { height:100%; } body { height:100%; } #full { height: 100%; } #someid { height: 100%; }хотя я не полностью понимаю ваш вопрос, я предполагаю, что это то, что вы имеете в виду.
вот пример, с которым я работаю:
<html style="height:100%"> <body style="height:100%"> <div style="height:100%; width: 300px;"> <div style="height:100%; background:blue;"> </div> </div> </body> </html>
Style- это просто замена для CSS, который я не снаружи.
Это можно сделать с помощью таблицы:
<table cellpadding="0" cellspacing="0" width="100%" height="100%"> <tr height="0%"><td> <div id="full"> <!--contents of 1 --> </div> </td></tr> <tr><td> <div id="someid"> <!--contents of 2 --> </div> </td></tr> </table>затем применить css, чтобы сделать someid заполнить оставшееся пространство:
#someid { height: 100%; }В отличие от принятого ответа, который ничего не делает, кроме того, что делает контейнер div полной высотой страницы, это решение заставляет div #2 заполнить оставшееся пространство, как указано в вопросе. Если вам нужен этот второй div, чтобы заполнить всю высоту, отведенную ему, в настоящее время это единственный способ сделать это.
но не стесняйтесь доказать мне, что я ошибаюсь, конечно! CSS-это всегда лучше.
html, body { height: 100%; } .parent { display: flex; flex-flow:column; height: 100%; background: white; } .child-top { flex: 0 1 auto; background: pink; } .child-bottom { flex: 1 1 auto; background: green; }<div class="parent"> <div class="child-top"> This child has just a bit of content </div> <div class="child-bottom"> And this one fills the rest </div> </div>
Я знаю, что это поздняя запись, но даже в 2016 году я удивлен полным отсутствием поддержки IE для flex (в настоящее время 11 является единственным, кто поддерживает его и его главным образом багги в этом http://caniuse.com/#feat=flexbox) который с точки зрения бизнеса не велик! Поэтому я думаю, что до тех пор, пока IE не будет закрыт, лучшее решение и самый дружественный к кросс-браузеру, безусловно, должен быть JS/Jquery?
большинство сайтов уже используют Jquery и очень простой пример (для моего кода) это:
$('#auto_height_item').height($(window).height() - $('#header').height());вы, очевидно, можете заменить окно и заголовок, и пусть основная математика делает работу. Лично я все еще не уверен в flex еще...
я добавил Это для страниц, которые были слишком коротки.
html:
<section id="secondary-foot"></section>css:
section#secondary-foot { height: 100%; background-color: #000000; position: fixed; width: 100%; }
создайте div, который содержит оба divs (full и someid) и установите высоту этого div следующим образом:
высота: 100vh;
высота содержащих divs (full и someid) должна быть установлена в "auto". Вот и все.
если ваши пробелы нужно исправить точно границы экрана вы можете попробовать
сделать большой
divС :top:0; bottom:0; margin:0px auto;а внутри сделать 2
divСheight:50%; margin:0px auto;Он очень похож на подход thgaskell, но он более гибкий и совместимый с CSS3. Вы можете попробовать объединить и протестировать его, чтобы увидеть, подходит ли он лучше всего на всех ориентациях и устройствах, которые вам нужны.
Comments