2012-05-29 2 views
0

После нескольких часов в талии мне удалось найти решение моей проблемы, поэтому вопрос не в том, «как», а «почему это работает так». Вот мой разобранный пример:Относительное позиционирование и отступы CSS

<div id="header"> 
    <div id="header-element">header</div> 
</div> 
<div id="footer">footer</div>​ 

CSS:

#header { 
    width: 100%; 
    position: relative; 
    padding-bottom: 5%; 
} 
#header-element { 
    position:absolute; 
    bottom: 0; 
} 
#footer { 
    position: relative; 
    margin-top: 5%; 
}​ 

И jsFiddle - http://jsfiddle.net/H7jwm/3/.

Моя проблема заключалась в том, как позиционировать эти относительно позиционированные элементы, используя процент, сначала один% от верхней части документа, а второй - первый. Я достиг этого, указав padding-bottom на первый, а margin-top - на второй, но у меня есть решение с грубой силой - опробовать каждое дистанционно логичное решение. Теперь, если вы удаляете прокладку, margin-top второго элемента становится полем между этим элементом и вершиной документа, а не первым элементом, а первый элемент «занимает» остальную часть пространства до вершины.

Вопрос в том, почему это дополнение работает так? Или, чтобы перефразировать его, как работает прокладка с относительным позиционированием?

+0

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

+0

Мне удалось избежать того, что не смог поставить '# header' некоторый% из вершины документа, а' # footer' -% от '# header'. – Zemljoradnik

ответ

0

На самом деле, вы смешиваете позиции. Ваш #header имеет высоту ноль. Правильно, нуль как ни в чем, потому что у него нет никакого относительного содержания. #header-element абсолютно позиционируется и потому, что #header имеет высоту 0, он точно находится в пространстве заполнения.

Итак, если вы удаляете нижнюю часть от #header, то #footer перемещается вверх, начиная с самого верха документа. Из-за крайности вверх, между верхней границей документа и словом «нижний колонтитул» есть пробел.

Но у вас все еще есть то абсолютно позиционируемое #header-element, которое теперь будет прямо в этом крайнем пространстве.

+0

Да, я знаю, что '# header' имеет высоту ноль, но я не понимаю, как здесь вычисляется процент« padding-bottom ». Вычисляется ли она с высоты документа (это не так), а сама посылка становится высотой '# header'? – Zemljoradnik

+0

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

+0

Спасибо за ответ. Я тоже так думал и тестировал его с различным процентом, но результаты показали, что это не так (или я плохо разбираюсь). Если я не ошибаюсь, 'body' является блочным элементом, а' # header' в моем исходном проекте является дочерним элементом первого уровня 'body'. – Zemljoradnik

Смежные вопросы