Как заставить 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;
}
1787   18  

18 ответов:

ваша проблема не в том, что 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/

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

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

демо на (перетащите ручку кадра, чтобы увидеть эффект):http://jsfiddle.net/NN7ky
(вверх: чистый, простой. недостаток: требует адаптируемых блоков - 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;
}

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

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

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

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

вы можете своего рода взломать его с помощью мин-высота декларация

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

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

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

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

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

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

хотя это не так элегантно, как чистый 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, body {
    height: 102%;
}
.wrapper {
    position: relative;
    height: 100%;
    width: 100%;
}
.div {
    position: absolute;
    top: 0;
    bottom: 0;
    width: 1000px;
    min-height: 100%;
}

еще не проверял...

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

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;
}

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

попробуйте с помощью:

html, body {
      height: 100%;
}

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

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

Demo:

<!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>

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

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

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

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

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

height: 100%;

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

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

вы можете использовать единицу длины "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;
}

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

Не самая лучшая и не лучшая реализация самых больших стандартов, но вы можете изменить DIV для промежутка... Это не очень рекомендуется, но быстро исправить =P =)

Comments

    Ничего не найдено.