Висота дайвінга 100% і розширюється, щоб відповідати вмісту


172

У мене на своїй сторінці є елемент div, його висота встановлена ​​на 100%. Висота тіла також встановлена ​​на 100%. Внутрішній дів має передумови і все, що відрізняється від фону тіла. Це працює для того, щоб зробити висоту div на 100% від висоти екрана браузера, але проблема полягає в тому, що у мене є вміст всередині цього діва, який виходить вертикально за межі висоти екрана браузера. Коли я прокручую вниз, діва закінчується в тому місці, коли вам довелося почати прокручувати сторінку, але вміст переповнює поза цим. Як змусити діву завжди пройти донизу, щоб відповідати внутрішньому змісту?

Ось спрощення мого CSS:

body {
    height:100%;
    background:red;
}

#some_div {
    height:100%;
    background:black;
}

Як тільки я прокручую сторінку, чорнота закінчується і вміст витікає на червоний фон. Здається, неважливо, чи встановив я позицію на відносну чи абсолютну на #some_div, проблема виникає в будь-якому випадку. Вміст всередині #some_div здебільшого абсолютно розміщений, і він динамічно генерується з бази даних, тому його висоту не можна знати заздалегідь.

Редагувати: Ось скріншот проблеми: проблема дів


Про це запитали кілька тижнів тому. Я побачу, чи зможу знайти це питання. Я вважаю, що прокоментував це. редагувати Я вважаю ваше запитання схожий на це: stackoverflow.com/questions/9398313 / ...
jmbertucci

будь ласка, ваш код для кращого розуміння
неділю

чи можете ви опублікувати свій повний код pls
Свен Бідер

23
Ви хочете, щоб усі мої тисячі рядків PHP-коду, css та javascript? Я опублікував частину css, що стосувалася питання ...
Joey

2
NECROPOST є GO: установка властивості переповнення зазвичай виправляє проблеми , як їх там , де зміст всередині DIV простягається повз нього ( overflow: hidden;, overflow: scroll;, і т.д.).
AlbertEngelB

Відповіді:


308

Ось що вам слід зробити в основному в стилі CSS div

display: block;
overflow: auto;

І не чіпайте height


4
Працювали чудово. Мені потрібно додати height: 100%до html, bodyі контейнера DIV , щоб зробити його заповнити висоту , коли не було достатньо змісту , хоча.
Ніко Хуйсамен

дивовижне рішення, але ви можете насправді доторкнутися до висоти, якщо об'єктив є чимось на кшталт чуйного кріплення вікон
Alexis Rabago Carvajal

Чи display: block;потрібне? Divs - це вже елементи на рівні блоку.
Макс Хайбер

він додає для мене внутрішню смугу прокрутки (і горизонтальну, і вертикальну)
Натан Н

Якщо ви все ще отримали батьківський елемент трохи вище, ніж дочірні елементи, то перевірте, чи немає зайвих пробілів та / або  видаліть їх. Спробуйте також відрегулювати висоту лінії. Наприклад, я поставив line-height: 0, тому що мені не потрібен текст, аби показати зображення.
Zorgatone

57

Встановіть heightдо autoі min-heightна 100%. Це має вирішити це для більшості браузерів.

body {
  position: relative;
  height: auto;
  min-height: 100% !important;
}

3
IMO, це відповідає на питання "Як змусити діву завжди йти до кінця, щоб відповідати внутрішньому змісту?" краще, ніж відповідна на даний момент відповідь, яка просто вмикає прокручування переповнення, а не забезпечує розширення div / body, щоб відповідати його вмісту. +1
Jammerz858

Працював над моєю справою. Дякую!
Тайсон Неро

Може бути , варто відзначити , що з якоїсь - то причини не працює , якщо heightце 100%і min-heightє auto- я б очікувати , щоб вони були взаємозамінними в цьому випадку, але схоже , що вони не є.
PeaBrain

13

Зазвичай ця проблема виникає, коли дочірні елементи Батьківського діву плавають. Ось останнє рішення проблеми:

У свій CSS-файл запишіть наступний клас під назвою .clearfix разом із селектором псевдо : after

.clearfix:after {
content: "";
display: table;
clear: both;
}

Потім у своєму HTML додайте клас .clearfix у свій батьківський Div. Наприклад:

<div class="clearfix">
    <div></div>
    <div></div>
</div>

Це має працювати завжди. Ви можете назвати ім'я класу як .group замість .clearfix , оскільки це зробить код більш семантичним. Зауважте, що не потрібно додавати крапку або навіть пробіл у значенні Вмісту між подвійною цитатою "". Також переповнення: авто; може вирішити проблему, але це спричиняє інші проблеми, такі як показ смуги прокрутки, і не рекомендується.

Джерело: Блог Лізи Каталоно та Кріса Койєра


8

Якщо ви просто залишити height: 100%і використовувати займе стільки місця , як зміст всередині . Таким чином весь текст залишиться на чорному тлі.display:block;divdiv


Де ти користувався display: block? Я не бачу цього у вашому питанні.
Гонки легкості на Орбіті

Я додав його до #some_div після того, як запропонував Ронні, але це не вирішило проблему.
Джої

1
Чи можете ви спробувати додати float: none; до того ж #some_div css
RonnieVDPoel

Замість float: none;використання clear:both;. Це те саме, але більше крос-браузер, @RonnieVDPoel
Cannicide

6

Це питання може бути старим, але воно заслуговує на оновлення. Ось ще один спосіб зробити це:

#yourdiv {
    display: flex;
    width:100%;
    height:100%;
}

1
Якщо ви збираєтесь публікувати старе питання, рекомендується використовувати поточні значення (AKA без префіксів на flex).
jhpratt

Вибачте, я не знаю, про що ви говорите.
user9459537

1
Префікси Flex вже давно не потрібні.
jhpratt


5

Спробуйте це:

body { 
    min-height:100%; 
    background:red; 
} 

#some_div {
    min-height:100%; 
    background:black; 
} 

IE6 та більш ранні версії не підтримують властивість мінімальної висоти.

Я думаю, що проблема полягає в тому, що коли ви кажете тілу мати висоту 100%, його фон може бути настільки ж високим, як і огляд одного "перегляду" браузера (область перегляду, що виключає панелі інструментів браузера та панелі стану та меню та меню та краї вікон). Якщо вміст вище одного огляду, він переповнює висоту, присвячену фону.

Це властивість мінімальної висоти на корпусі повинно ЗИМОЖИТИ, щоб фон був принаймні таким же високим, як один вікно перегляду, якщо ваш вміст не заповнює одну цілу сторінку донизу, але він також повинен дозволяти зростати вниз, щоб охопити більше внутрішнього вмісту.


3

Старе питання, але в моєму випадку я виявив, що position:fixedвирішив це для мене. Моя ситуація, можливо, була дещо іншою. У мене був накладений напівпрозорий divз завантаженою анімацією, який мені потрібен, відображаючись під час завантаження сторінки. Таким чином, використовуючи height:auto / 100%або min-height: 100%обидва, заповнили вікно, але не зону поза екраном. Використовуючи position:fixedцю прокрутку з накладеним користувачем, вона завжди покривала видиму область і зберігала мою анімацію попереднього завантаження в центрі на екрані.


1

Просто додайте ці два рядки у свій css id #some_div

display: block;
overflow: auto;

Після цього ви отримаєте те, що шукаєте!


0

Я не зовсім впевнений, що я зрозумів це питання, тому що це досить відверта відповідь, але тут іде ... :)

Ви намагалися встановити властивість переповнення контейнера видимим або автоматичним?

#some_div {
    height:100%;
    background:black; 
    overflow: visible;
    }

Додаючи, що слід підштовхувати чорний контейнер до будь-якого розміру, який вимагає ваш динамічний контейнер. Я вважаю за краще видимим для автоматичного, оскільки, здається, авто поставляється із смугами прокрутки ...


0

Сучасні браузери підтримують блок "висота вікна перегляду". Це дозволить розширити поділ до доступної висоти вікна перегляду. Я вважаю це більш надійним, ніж будь-який інший підхід.

#some_div {
    height: 100vh;
    background: black;
}

0

Навіть ти можеш так зробити

display:block;
overflow:auto;
height: 100%;

Сюди входить кожен ваш динамічний поділ відповідно до вмісту. Припустимо, якщо у вас є спільний div з класом, він збільшить висоту кожного динамічного діла відповідно до вмісту


0

Ви також можете використовувати

 display: inline-block;

шахта працювала з цим


0

ЗАВДАННЯ БЕЗ ПОЗИЦІЇ: ФІКСОВАНА

По-справжньому класним способом я зрозумів це для недавнього меню: налаштування тіла на:

position: relative

і встановіть свій клас обгортки так:

#overlaywrapper {
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
    background: #00000080;
    z-index: 100;
}

Це означає, що вам не потрібно встановлювати фіксовану позицію і все ще можете дозволити прокручування. Я використовував це для накладення меню, яке НАЙВІТЬ велике.



0

Гаразд, я спробував щось подібне:

тіло (нормально)

#MainDiv { 
  /* where all the content goes */
  display: table;
  overflow-y: auto;
}

Це не зовсім точний спосіб його написання, але якщо основний показ діва ви робите як таблицю, він розширюється, і тоді я реалізував смуги прокрутки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.