У меня есть элемент div на моей странице, его высота установлена на 100%. Высота тела также установлена на 100%. Внутренний div имеет фон и все это и отличается от фона тела. Это работает для того, чтобы высота div составляла 100% от высоты экрана браузера, но проблема в том, что у меня есть содержимое внутри этого div, которое выходит вертикально за высоту экрана браузера. Когда я прокручиваю вниз, div заканчивается в том месте, с которого нужно было начать прокручивать страницу, но содержимое выходит за рамки этого. Как сделать так, чтобы div всегда шел до самого дна, чтобы соответствовать внутреннему содержанию?
Вот упрощение моего CSS:
body {
height:100%;
background:red;
}
#some_div {
height:100%;
background:black;
}
Как только я прокручиваю страницу, чернота заканчивается, и содержимое перетекает на красный фон. Кажется, не имеет значения, установил ли я положение относительно или абсолютно на #some_div, проблема возникает в любом случае. Содержимое внутри #some_div в основном абсолютно позиционировано и динамически генерируется из базы данных, поэтому его высота не может быть заранее известна.
Изменить: Вот скриншот проблемы:
overflow: hidden;
,overflow: scroll;
, и т.д.).Ответы:
Вот что вы должны сделать в стиле CSS, на главной
div
И не трогай
height
источник
height: 100%
кhtml, body
и контейнера DIV , чтобы сделать его заполнить высоту , когда не было достаточно содержания , хотя.display: block;
необходимо? Div уже являются элементами уровня блока.
удалите их. Также попробуйте отрегулировать высоту строки. Например, я добавилline-height: 0
, потому что мне не нужен текст, просто чтобы показать изображение.Установите
height
дляauto
иmin-height
до100%
. Это должно решить это для большинства браузеров.источник
height
есть100%
иmin-height
естьauto
- я бы ожидал, что они будут взаимозаменяемыми в этом случае, но похоже, что это не так.Обычно эта проблема возникает, когда всплывают дочерние элементы родительского Div. Вот последнее решение проблемы:
В своем CSS-файле напишите следующий класс с именем .clearfix вместе с псевдо-селектором : after
Затем в своем HTML добавьте класс .clearfix к родительскому элементу Div. Например:
Это должно работать всегда. Вы можете назвать имя класса как .group вместо .clearfix , так как это сделает код более семантическим. Обратите внимание, что нет необходимости добавлять точку или даже пробел в значение Content между двойными кавычками "". Также переполнение: авто; может решить проблему, но это вызывает другие проблемы, такие как показ полосы прокрутки и не рекомендуется.
Источник: Блог Лизы Каталано и Криса Койера
источник
Если вы просто оставите
height: 100%
и используете,display:block;
тоdiv
займет столько же места, сколько и содержимое внутриdiv
. Таким образом весь текст останется на черном фоне.источник
display: block
? Я не вижу этого в вашем вопросе.float: none;
, чтобы использоватьclear:both;
. Он делает то же самое, но более кроссбраузерен, @RonnieVDPoelЭтот вопрос может быть старым, но он заслуживает обновления. Вот еще один способ сделать это:
источник
Попробуй это:
IE6 и более ранние версии не поддерживают свойство min-height.
Я думаю, что проблема в том, что когда вы указываете телу высоту 100%, его фон может быть таким же высоким, как высота одного «окна просмотра» браузера (область просмотра, которая исключает панели инструментов и строки состояния браузера, а также строки меню и края окна). Если содержимое выше одного видового экрана, оно превысит высоту фона.
Это свойство минимальной высоты в теле должно ФОРМИРОВАТЬ фон, чтобы он был по крайней мере таким же высоким, как один видовой экран, если ваш контент не заполняет одну целую страницу вниз, а также должен позволять ему расти вниз, чтобы охватить больше внутреннего контента.
источник
Старый вопрос, но в моем случае я нашел, что
position:fixed
решил его за меня. Моя ситуация могла бы быть немного другой, хотя. У меня был полупрозрачный оверлейdiv
с анимацией загрузки, который мне нужно было отображать во время загрузки страницы. Таким образом, используяheight:auto / 100%
илиmin-height: 100%
оба заполнили окно, но не за пределами области. Использованиеposition:fixed
сделало эту прокрутку наложения с пользователем, так что она всегда закрывала видимую область и держала мою анимацию предварительной загрузки в центре экрана.источник
Просто добавьте эти две строки в ваш идентификатор CSS #some_div
После этого вы получите то, что ищете!
источник
Я не совсем уверен, что понял вопрос, потому что это довольно простой ответ, но здесь идет ... :)
Вы пытались установить свойство переполнения контейнера на видимое или автоматическое?
Добавление этого должно подтолкнуть черный контейнер к размеру, который требуется вашему динамическому контейнеру. Я предпочитаю видимо авто, потому что авто, кажется, идет с полосами прокрутки ...
источник
Современные браузеры поддерживают модуль «высота области просмотра». Это расширит div до доступной высоты области просмотра. Я считаю это более надежным, чем любой другой подход.
источник
Даже вы можете сделать это
Это будет включать в себя каждый ваш динамический div в соответствии с содержанием. Предположим, что если у вас есть общий div с классом, он увеличит высоту каждого динамического div в соответствии с содержимым
источник
Вы также можете использовать
мой работал с этим
источник
ПОКРЫТИЕ БЕЗ ПОЗИЦИИ: ИСПРАВЛЕНО
По-настоящему классным способом, который я понял для недавнего меню, было установить тело в:
и установите свой класс-оболочку следующим образом:
Это означает, что вам не нужно устанавливать фиксированное положение, и вы все равно можете использовать прокрутку. Я использовал это для наложения действительно больших меню.
источник
использовать flex
источник
Хорошо, я попробовал что-то вроде этого:
тело (нормальное)
Это не точный способ написать это, но если вы сделаете так, чтобы основной div отображался в виде таблицы, он расширялся, а затем я реализовал полосы прокрутки.
источник