100% высотой для нескольких отделений

Мне обычно размечали мою структуру что-то вроде этого:

Где тело будет содержать фоновый шаблон, "все" будут содержать dropshadow для страницы, идущей вверх и вниз, и "страница" может часто иметь повторяющийся-y фон также.

Я попробовал вариации на использование CSS height/min-height свойства:

html, body {
    height:100%;
    ...
}
#all {
    height:100%; 
    min-height:100%; 
}
#page {
    height:100%; 
    min-height:100%;
    height:auto !important;
}

Походит, если я удаляю height:auto из "всех" затем, что это походит на него работы, ПОКА Вы не прокручиваете, затем после прокрутки исчезает фон для всех

пример

Однако, если я сохраняю height:auto там затем, я получаю проблему фона для страницы, не работающей

пример

Надо надеяться, кто-то знает фиксацию?

11
задан kilrizzy 15 March 2010 в 18:34
поделиться

7 ответов

Ну, вот что я получил для CSS:

html, body {
    height:100%; /* IE6: treaded as min-height*/
    margin: 0;
    padding: 0;
}
body {
    margin: 0;
    padding: 0;
    color: #494949;
    text-align: center;
    background-color: #3f91a7;
    background-image: url(images/bg_body.jpg);
    background-repeat: repeat-x;
    background-position: center top;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
}
#all {
    margin: 0px;
    padding: 0px;
    height:100%; /* IE6: treaded as min-height*/
    min-height:100%; /* real browsers */
    height:auto !important;
    background-image: url(images/bg_all.png);
    background-repeat: repeat-y;
    background-position: center top;
    overflow: hidden;
}
#page {
    width: 993px;
    padding: 0 0 10000px;
    margin-top: 0px;
    margin-right: auto;
    margin-bottom: -10000px;
    margin-left: auto;
    text-align: left;
    background-color: #FFF;
    background-image: url(images/bg_page.jpg);
    background-position: center top;
    background-repeat: repeat-y;
    height:100%; /* IE6: treaded as min-height*/
    min-height:100%; /* real browsers */
    height:auto !important;
}
#header, #footer {
    text-align: center;
    font-size: 16px;
    padding: 20px;
}
#content {
    padding: 25px;
}

У меня не было возможности протестировать его ни в чем, кроме Firefox, но, честно говоря, это даст вам хорошее начало.

1
ответ дан 3 December 2019 в 12:28
поделиться

Вот что происходит: вы установили для html и body высоту 100%, но эти 100% - это высота области просмотра, а не документа. Так как высота #all установлена ​​на 100%, она установлена ​​на 100% от высоты родителя, который является телом, который установлен на 100% высоты области просмотра. Все наследует высоту области просмотра.

Способ решения этой проблемы на самом деле такой же, как и при очистке плавающих объектов, имеющих внешний контейнер. Все, что вам нужно сделать, это поместить overflow: auto; на #all . Вам даже не нужны объявления высоты для любых других элементов, и вы можете удалить либо #all , либо #page div.

Дополнительная информация здесь: http://www.sitepoint.com/blogs/2005/02/26/simple-clearing-of-floats/

0
ответ дан 3 December 2019 в 12:28
поделиться

Я бы просто перевернул расположение ваших страниц div # all и div # ...

<div id="page">
  <div id="all">
    <div id="header"></div>
    <div id="content"></div>
    <div id="footer"></div>
  </div>
</div>
1
ответ дан 3 December 2019 в 12:28
поделиться

Вы пробовали:

html,
body {
     margin: 0;
     padding: 0;
     height: 100%;
}
#all {
     min-height: 100%;
}

? Только для IE 6, вы должны установить height: 100%; для #all (потому что он интерпретирует это в основном как min-height (в результате ошибки). Поскольку IE6 не понимает атрибут min-height, height фактически становится заменой min-height).

Если вы зададите height: 100%; для других браузеров, они воспримут это как 100% высоты области просмотра, а не 100% страницы, поэтому прокрутка будет работать некорректно.

Мой комментарий на понижение голоса:

Стало ясно, что мой ответ не решает всей проблемы. То, что мы имеем здесь, кажется довольно сложным случаем - по крайней мере, никто здесь, кажется, еще не нашел ответа? Я даже заглянул в отличную (немецкую) книгу Инго Чао, который пришел к тому же выводу: Установка высоты родителя не будет работать, и установка высоты ребенка не будет работать, если высота родителя не была установлена явно, а динамически по размеру содержимого.

Но мой ответ все же может помочь немного ограничить возможности - потому что установка height на #all, скорее всего, не будет работать ни в одном браузере, кроме IE 6. Если вы не согласны, пожалуйста, опубликуйте комментарий, потому что в таком случае я тоже хотел бы узнать об этом больше.

0
ответ дан 3 December 2019 в 12:28
поделиться

Вы пробовали это:

function getWindowHeight() {
                var windowHeight = 0;
                if (typeof(window.innerHeight) == 'number') {
                    windowHeight = window.innerHeight;
                }
                else {
                    if (document.documentElement && document.documentElement.clientHeight) {
                        windowHeight = document.documentElement.clientHeight;
                    }
                    else {
                        if (document.body && document.body.clientHeight) {
                            windowHeight = document.body.clientHeight;
                        }
                    }
                }
                return windowHeight;
            }


window.onload = init;



 function init(){
 document.getElementByID("all").style.height = getWindowHeight() + "px";

    }   

Или поместите страницу вместо all

-2
ответ дан 3 December 2019 в 12:28
поделиться

У меня сработало:

#page {
    width: 993px;
    padding: 0px;
    margin-top: 0px;
    margin-right: auto;
    margin-bottom: 0px;
    margin-left: auto;
    text-align: left;
    background-color: #FFF;
    background-image: url(http://jeffkilroy.com/hosted/layout1/images/bg_page.jpg);
    background-position: center top;
    background-repeat: repeat-y;
    /* height:100%;  IE6: treaded as min-height*/
    height: expression(document.body.offsetHeight); /* sets min-height for IE */
    overflow: auto;
    min-height:100%; /* real browsers */
    /* height:auto !important; */
}
0
ответ дан 3 December 2019 в 12:28
поделиться

Забудьте 100% о div, попробуйте переместить фоновое изображение в элемент html, а границу во всю высоту - в body.

html {
    height:100%;
    background-color: blue;
}
body {
    margin: auto auto;
    padding: 0;
    color: #494949;
    /*min-height: 100%; */
    height:100%; /*for ie6*/
    border-left:solid 2px red;
    border-right:solid 2px red;
    background-color:#fff;
    width: 960px;
}
0
ответ дан 3 December 2019 в 12:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: