сделать высоту div расширяться с его содержанием
у меня есть эти вложенные divs, и мне нужен основной контейнер для расширения (по высоте), чтобы разместить DIVs внутри
<!-- head -->
...
<!-- /head -->
<body class="main">
<div id="container">
<div id="header">
<!--series of divs in here, graphic banner etc. -->
</div>
<div id="main_content"> <!-- this DIV _should_ stretch to accomodate inner divs -->
<div id="items_list" class="items_list ui-sortable">
<div id="item_35" class="item_details">
</div>
<div id="item_36" class="item_details">
</div>
<div id="item_37" class="item_details">
</div>
<!-- this list of DIVs "item_xx" goes on for a while
each one representing a photo with name, caption etcetc -->
</div>
</div>
<br class="clear"/>
<div id="footer">
</div>
</body>
</html>
CSS это:
* {
padding: 0;
margin: 0;
}
.main {
font: 100% Verdana, Arial, Helvetica, sans-serif;
background: #4c5462;
margin: 0;
padding: 0;
text-align: center;
color: #000000;
}
.main #container {
height: auto;
width: 46em;
background: #4c5462;
margin: 0 auto;
border: 0px solid #000000;
text-align: left;
}
.main #main_content {
padding: 5px;
margin: 0px;
}
#items_list {
width: 400px;
float: left;
}
.items_list {
width: 400px;
float: left;
}
.item_details {
margin-top: 3px;
margin-bottom: 3px;
padding: 3px;
float: left;
border-bottom: 0.5px solid blue;
}
проблема у меня в том, что #main_content
не растягивается, чтобы разместить все внутренние дивы, в результате чего они продолжают идти на заднем плане.
как я могу решить это?
23 ответов
вам нужно заставить clear:both
до #main_content
div закрыт. Я, вероятно, переместил бы <br class="clear" />;
на #main_content
div и установите CSS как:
.clear { clear: both; }
обновление: этот вопрос по-прежнему получает достаточное количество трафика, поэтому я хотел обновить ответ современной альтернативой, используя новый режим компоновки в CSS3 называется гибкие коробки или Flexbox:
body {
margin: 0;
}
.flex-container {
display: flex;
flex-direction: column;
min-height: 100vh;
}
header {
background-color: #3F51B5;
color: #fff;
}
section.content {
flex: 1;
}
footer {
background-color: #FFC107;
color: #333;
}
<div class="flex-container">
<header>
<h1>
Header
</h1>
</header>
<section class="content">
Content
</section>
<footer>
<h4>
Footer
</h4>
</footer>
</div>
большинство современных браузеров в настоящее время поддержка Flexbox и единицы просмотра, но если вам нужно поддерживать поддержку старых браузеров, обязательно проверьте совместимость для конкретной версии браузера.
добавить следующее:
overflow:hidden;
height:1%;
к вашему основному div. Исключает потребность для extra <br />
для ясного.
в качестве альтернативного способа вы также можете попробовать это, что может быть полезно в некоторых ситуациях
display:table;
Я бы просто использовать
height: auto;
в вашем div. Да, я знаю, что немного опоздал, но я подумал, что это может помочь кому-то, как помогло бы мне, если бы это было здесь.
Thw следующее должно работать:
.main #main_content {
padding: 5px;
margin: 0px;
overflow: auto;
width: 100%; //for some explorer browsers to trigger hasLayout
}
используйте тег span с display:inline-block
css прилагается к нему. Затем вы можете использовать CSS и манипулировать им как div множеством способов, но если вы не включаете width
или height
оно расширяет и втягивает основанный на своем содержании.
надеюсь, что это поможет.
обычно я думаю, что это можно решить, заставив clear:both
правило о последнем дочернем элементе #items_list
.
вы можете использовать:
#items_list:last-child {clear: both;}
или, если вы используете динамический язык, добавьте дополнительный класс к последнему элементу, сгенерированному в любом цикле, создающем сам список, поэтому вы получите что-то в своем html, например:
<div id="list_item_20" class="last_list_item">
и css
.last_list_item {clear: both; }
эта проблема возникает, когда дочерние элементы родительского Div плавают. Вот это Последний Решением проблемы:
в файле CSS напишите следующий класс под названием .clearfix вместе с псевдо селектор :после
.clearfix:after {
content: "";
display: table;
clear: both;
}
затем в вашем HTML добавьте .clearfix класс для вашего родительского Div. Например:
<div class="clearfix">
<div></div>
<div></div>
</div>
Он должен работать всегда. Вы можете назвать имя класса как .группа вместо .clearfix, так как это сделает код более семантическим. Обратите внимание, что нет необходимости добавлять точку или даже пробел в значении контент между двойные кавычки "". Кроме того,переполнение: авто; может решить проблему, но это вызывает другие проблемы, такие как показ полосы прокрутки и не рекомендуется.
Источник: Блог Лизы Каталано и Криса Койера
добавьте свойство float в #main_content
div-он будет расширяться, чтобы содержать его плавающее содержимое
прежде чем что-либо делать, проверьте правила css с помощью:
{ position:absolute }
удалить, если они существуют и не нужны.
похоже, это работает
html {
width:100%;
height:auto;
min-height:100%
}
Он принимает размер экрана как минимум, и если содержимое расширяется, оно растет.
плавающие элементы не занимают пространство внутри родительского элемента, так как имя предполагает, что они плавают! Таким образом, если высота явно не предоставляется элементу с плавающими дочерними элементами, то родительский элемент будет сжиматься и не будет принимать размеры дочернего элемента, также если его задано overflow:hidden;
его дети могут не отображаться на экране. Существует несколько способов решения этой проблемы:
вставьте другой элемент под плавающий элемент с
clear:both;
свойства, или использоватьclear:both;
on:after
плавающего элемента.использовать
display:inline-block;
илиflex-box
вместоfloat
.
в CSS: #clear_div{clear:both;}
после тега div внутреннего div добавьте этот Новый следующий div
<div id="clear_div"></div>
http://www.w3schools.com/cssref/pr_class_clear.asp дополнительные сведения
Я добавил Bootstrap в проект с section
теги, которые я установил на 100% высоты экрана. Он работал хорошо, пока я не сделал проект отзывчивым, и в этот момент я заимствовал часть jennyfofennyответом таким образом, фон моего раздела соответствовал фону содержимого, когда размер экрана изменился на меньших экранах.
мой новый section
CSS выглядит так:
section {
// min-height so it looks good on big screen
// but resizes on a small-screen
min-height: 100%;
min-height: 100vh;
width:100%;
width:100vh;
}
давай ты раздел это определенный цвет. Пользуясь min-height
, Если ширина раздела уменьшается из-за меньшего экрана, высота раздела будет расширяться, содержимое останется в разделе, а ваш фон останется желаемым цветом.Я сам сталкиваюсь с этим в проекте - у меня был стол внутри div, который выливался из нижней части div. Ни один из исправлений высоты, которые я пробовал, не работал, но я нашел странное исправление для него, и это поставить абзац в нижней части div с точкой в нем. Затем стиль "цвет" текста, чтобы быть таким же, как фон контейнера. Работал аккуратно, как вам нравится, и не требуется javascript. Неразрывное пространство не будет работать - как и прозрачное изображение.
по-видимому, ему просто нужно было увидеть, что под таблицей есть некоторое содержимое, чтобы растянуть его. Интересно, сработает ли это для кого-нибудь еще.
Это то, что заставляет дизайнеров прибегать к макетам на основе таблиц - количество времени, которое я потратил, выясняя этот материал и делая его совместимым с кросс-браузером, сводит меня с ума.
Я пробовал это, и это сработало
<div style=" position: absolute; direction: ltr;height:auto; min-height:100%"> </div>
вы пробовали традиционный способ? дайте основную высоту контейнера: auto
#container{height:auto}
я использовал это, и это работало большую часть времени со мной.
Если вы используете jQuery UI, у них уже есть класс, в котором работает только шарм
добавить <div>
внизу внутри div, который вы хотите расширить с height:auto;
затем добавьте имя класса ui-helper-clearfix или используйте этот атрибут стиля и добавьте, как показано ниже:
<div style=" clear:both; overflow:hidden; height:1%; "></div>
добавить класс jQuery UI в clear div, а не div, который вы хотите развернуть.
Я знаю, что это своего рода старый поток, однако этого можно достичь с помощью min-height
свойства CSS в чистом виде, поэтому я оставлю это здесь для будущих ссылок:
Я сделал скрипку на основе кода OP, размещенного здесь:http://jsfiddle.net/U5x4T/1/, по мере удаления и добавления divs внутри, вы заметите, как контейнер расширяется или уменьшается в размере
единственное, что вам нужно для этого, дополнительно к OP-коду:
*переполнения в основной контейнер (требуется для плавающих divs)
* свойство css min-height, дополнительная информация доступна здесь:http://www.w3schools.com/cssref/pr_dim_min-height.asp
добавлен дисплей: встроенный в div, и он вырос автоматически (не материал прокрутки), когда содержание высоты стало больше, чем установленная высота div 200px
нет необходимости использовать много CSS, просто используйте bootstrap, а затем используйте:
class="container"
для div, который должен быть заполнен.