Как заставить блок DIV расширяться до нижней части страницы, даже если у него нет содержимого?

В разметке, показанной ниже, я пытаюсь растянуть div содержимого до самого низа страницы, но он растягивается только в том случае, если есть контент для отображения. Причина, по которой я хочу это сделать, заключается в том, что вертикальная граница по-прежнему отображается внизу страницы, даже если нет содержимого для отображения.

Вот мой HTML:

<body>
    <form id = "form1">
    <div id = "header">
        <a title = "Home" href = "index.html" />
    </div>

    <div id = "menuwrapper">
        <div id = "menu">
        </div>
    </div>

    <div id = "content">
    </div>

И мой CSS:

body {
    font-family: Trebuchet MS, Verdana, MS Sans Serif;
    font-size:0.9em;
    margin:0;
    padding:0;
}
div#header {
    width: 100%;
    height: 100px;
}
#header a {
    background-position: 100px 30px;
    background: transparent url(site-style-images/sitelogo.jpg) no-repeat fixed 100px 30px;
    height: 80px;
    display: block;
}
#header, #menuwrapper {
    background-repeat: repeat;
    background-image: url(site-style-images/darkblue_background_color.jpg);
}
#menu #menuwrapper {
    height:25px;
}
div#menuwrapper {
    width:100%
}
#menu, #content {
    width:1024px;
    margin: 0 auto;
}
div#menu {
    height: 25px;
    background-color:#50657a;
}

Что вы хотите, чтобы он делал, если на странице больше контента, чем может поместиться? Какие браузеры вас интересуют?

drs9222 26.07.2009 03:49
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
202
1
372 025
17
Перейти к ответу Данный вопрос помечен как решенный

Ответы 17

вы можете взломать его с помощью объявления мин-высота

<div style = "min-height: 100%">stuff</div>

Также вам может понравиться это: http://matthewjamestaylor.com/blog/ultimate-2-column-left-menu-pixels.htm

Это не совсем то, о чем вы просили, но это также может удовлетворить ваши потребности.

Попробуйте поиграть со следующим правилом css:

#content {
    min-height: 600px;
    height: auto !important;
    height: 600px;
}

Измените высоту, чтобы она соответствовала вашей странице. Высота упоминается дважды для кроссбраузерной совместимости.

это работает, но я обнаружил, что если я увеличиваю минимальную высоту до более 600 пикселей, создается прокрутка. Вы хоть представляете, почему это происходит?

Siddharth Patel 07.12.2014 17:23

@SiddharthPatel Потому что div #content переполняет своего родителя. Поэтому установите для родительского элемента div #content значение overflow: auto или overflow: hidden css, и оно должно расширяться / переполняться, чтобы соответствовать, а не прокручиваться. Наверное, в следующий раз лучше задать такие вопросы как новые вопросы, чем в комментариях :)

Colt McCormack 20.01.2015 22:34

После того, как вы попробовали каждый метод ответа, это единственный, который работает. Даже это работает отлично, потому что мне нужно настроить значение высоты, чтобы оно соответствовало высоте страницы, поэтому это требует настройки. Однако он работает одинаково для всех браузеров.

TARKUS 06.03.2016 17:22

Большое вам спасибо за этот ответ. Это просто и хорошо работает на нескольких платформах. Я на самом деле использовал это раньше, не осознавая, около 1 года назад, хотел бы, чтобы я мог проголосовать дважды.

vedi0boy 13.11.2016 16:08

Свойство min-height поддерживается не всеми браузерами. Если вам нужно, чтобы ваш #content увеличил его высоту на более длинных страницах, свойство height сократит его.

Это немного похоже на взлом, но вы можете добавить пустой div шириной 1 пиксель и высотой, например. 1000 пикселей внутри вашего #content div. Это заставит контент быть высотой не менее 1000 пикселей и по-прежнему позволит более длинному контенту увеличивать высоту при необходимости.

У меня нет кода, но я знаю, что однажды сделал это, используя комбинацию height: 1000px и margin-bottom: -1000px; Попробуй это.

Вау, это действительно работает! Но если содержимое выходит за пределы контейнера, то переполненную часть увидеть не удастся ...

adripanico 16.01.2018 16:37

Хотя это не так элегантно, как чистый CSS, небольшой фрагмент javascript может помочь в этом:

<html>
<head>
<style type='text/css'>
    div {
        border: 1px solid #000000;
    } 
</style>
<script type='text/javascript'>

    function expandToWindow(element) {
         var margin = 10; 

         if (element.style.height < window.innerHeight) { 
            element.style.height = window.innerHeight - (2 * margin) 
         }
    }


</script>
</head>
<body onload='expandToWindow(document.getElementById("content"));'>
<div id='content'>Hello World</div>
</body>
</html>

В зависимости от того, как работает ваш макет, вы можете обойтись установкой фона для элемента <html>, который всегда равен по крайней мере высоте области просмотра.

Ответ принят как подходящий

Ваша проблема заключается не в том, что div не на 100% высоте, а в том, что контейнер вокруг него не так. Это поможет в браузере, который, как я подозреваю, вы используете:

html,body { height:100%; }

Возможно, вам также придется отрегулировать отступы и поля, но это даст вам 90% пути. Если вам нужно заставить его работать со всеми браузерами, вам придется немного повозиться с этим.

На этом сайте есть несколько отличных примеров:

http://www.brunildo.org/test/html_body_0.html
http://www.brunildo.org/test/html_body_11b.html
http://www.brunildo.org/test/index.html

Еще рекомендую зайти на http://quirksmode.org/

Это решение не подходит для прокручиваемых страниц.

jbranchaud 12.07.2011 22:01

Свойство min-height в CSS должно ему помочь ... я думаю

Alfabravo 03.12.2011 01:21

Интересно, что это отсортировало мои проблемы с прокруткой, а не вызвало их

Alan Macdonald 17.03.2015 20:22

У меня не работает в последней версии хрома.

HelloWorldNoMore 26.04.2016 21:21

Попробуйте решение "липкого нижнего колонтитула" от Райана Фейта,

http://ryanfait.com/sticky-footer/
http://ryanfait.com/resources/footer-stick-to-bottom-of-page/

Работает в IE, Firefox, Chrome, Safari и, предположительно, в Opera, но не тестировал это. Отличное решение. Очень просто и надежно реализовать.

Ссылки вниз! Ссылки вниз!

codemirror 30.11.2017 10:06

За наших падших корешей ?

Abraham Brookes 09.11.2018 01:38
СВЯЗЬ
c24w 07.03.2019 18:57

Пытаться:

html, body {
    height: 102%;
}
.wrapper {
    position: relative;
    height: 100%;
    width: 100%;
}
.div {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 1000px;
    min-height: 100%;
}

Еще не тестировал ...

Это невозможно сделать, используя только таблицы стилей (CSS). Некоторые браузеры не принимают

height: 100%;

как более высокое значение, чем точка обзора окна браузера.

Javascript - самое простое кроссбраузерное решение, хотя, как уже упоминалось, не чистое или красивое.

Я знаю, что это не лучший метод, но я не мог понять его, не испортив позиции в заголовке, меню и т. д. Итак .... Я использовал таблицу для этих двух столбцов. Это было БЫСТРОЕ исправление. JS не требуется;)

Попробуйте http://mystrd.at/modern-clean-css-sticky-footer/

Ссылка выше не работает, но эта ссылка https://stackoverflow.com/a/18066619/1944643 в порядке. : D

Демо:

<!DOCTYPE html>
<head>
    <meta charset = "UTF-8">
    <meta name = "author" content = "http://mystrd.at">
    <meta name = "robots" content = "noindex, nofollow">
    <title>James Dean CSS Sticky Footer</title>
    <style type = "text/css">
        html {
            position: relative;
            min-height: 100%;
        }
        body {
            margin: 0 0 100px;
            /* bottom = footer height */
            padding: 25px;
        }
        footer {
            background-color: orange;
            position: absolute;
            left: 0;
            bottom: 0;
            height: 100px;
            width: 100%;
            overflow: hidden;
        }
    </style>
</head>
<body>
    <article>
        <!-- or <div class = "container">, etc. -->
        <h1>James Dean CSS Sticky Footer</h1>

        <p>Blah blah blah blah</p>
        <p>More blah blah blah</p>
    </article>
    <footer>
        <h1>Footer Content</h1>
    </footer>
</body>

</html>

@codemirror, спасибо, я только что отредактировал комментарий, добавив еще одну работающую ссылку.

Vinicius José Latorre 01.06.2018 06:16

Липкий нижний колонтитул с фиксированной высотой:

Схема HTML:

<body>
   <div id = "wrap">
   </div>
   <div id = "footer">
   </div>
</body>

CSS:

html, body {
    height: 100%;
}
#wrap {
    min-height: 100%;
    height: auto !important;
    height: 100%;
    margin: 0 auto -60px;
}
#footer {
    height: 60px;
}

Я постараюсь ответить на вопрос прямо в заголовке, вместо того, чтобы быть одержимым приклеиванием нижнего колонтитула к нижней части страницы.

Сделайте так, чтобы div расширялся до нижней части страницы, если содержимого недостаточно для заполнения доступного вертикального окна просмотра браузера:

Демо в (перетащите маркер кадра, чтобы увидеть эффект): http://jsfiddle.net/NN7ky
(положительная сторона: чистый, простой. недостаток: требуется flexbox - http://caniuse.com/flexbox)

HTML:

<body>

  <div class=div1>
    div1<br>
    div1<br>
    div1<br>
  </div>

  <div class=div2>
    div2<br>
    div2<br>
    div2<br>
  </div>

</body>

CSS:

* { padding: 0; margin: 0; }

html, body {
  height: 100%;

  display: flex;
  flex-direction: column;
}

body > * {
  flex-shrink: 0;
}

.div1 { background-color: yellow; }

.div2 {
  background-color: orange;
  flex-grow: 1;
}

та-да - или я слишком сонный

Некоторым из нас посчастливилось поддерживать только «современные» браузеры, так что это было для меня невероятно полезно. Спасибо, Гима. Я пробовал несколько способов сделать что-то подобное, но это всегда ломалось разными тонкими способами. Это намного лучше. До сих пор не совсем понимаю, почему это так работает.

Chris Nicola 20.07.2014 09:13

Элемент Flexbox пытается разделить область содержимого между элементами в нем. Предлагаемое мною решение работает следующим образом: 1) запретить сжатие div и 2) разрешить рост .div2. Следовательно, div не сжимается, чтобы скрыть свое содержимое, и только .div2 может расширяться.

Gima 20.07.2014 17:41

Таким образом, это решает проблему, с которой я столкнулся в Firefox, где содержимое все еще было немного слишком большим для браузера. К сожалению, в Chrome это само по себе не решает эту проблему. Однако установка полей и отступов на 0 делает это.

Michael Scheper 26.07.2015 05:09

это правильный ответ, min-height: 100% работает только в том случае, если в родительском контейнере больше ничего нет, а calc на самом деле не помогает, если брат выше расширяющегося элемента имеет неизвестную высоту

zakius 11.12.2015 11:48

После нескольких часов борьбы с этой проблемой, это единственное решение, которое действительно исправило ее для меня. Отсутствует только небольшое объяснение того, что делает каждая часть. Но в любом случае, большое спасибо @Gima.

pylund 14.05.2017 17:59

Работает в Opera 12. Достаточно для меня. / lol Edit: это действительно должен быть принятый ответ.

AnrDaemon 30.04.2020 13:46

Вы можете использовать единицу длины "vh" для свойства min-height самого элемента и его родителей. Поддерживается с IE9:

<body class = "full-height">
    <form id = "form1">
    <div id = "header">
        <a title = "Home" href = "index.html" />
    </div>

    <div id = "menuwrapper">
        <div id = "menu">
        </div>
    </div>

    <div id = "content" class = "full-height">
    </div>
</body>

CSS:

.full-height {
    min-height: 100vh;
    box-sizing: border-box;
}

Это только растягивает div до высоты области просмотра, но не до самой страницы.

jansmolders86 23.02.2018 18:28

Я думаю, что проблема будет решена, просто сделав заполнение html на 100%, может быть тело заполняет 100% html, но html не заполняет 100% экрана.

Попробуйте:

html, body {
      height: 100%;
}

Другие вопросы по теме