Как я могу центрировать контент между div верхнего и нижнего колонтитула?

В предыдущем вопросе я узнал, как сохранить div нижнего колонтитула внизу страницы. (посмотреть другой вопрос)

Теперь я пытаюсь вертикально центрировать контент между разделами верхнего и нижнего колонтитула.

так что у меня есть:

#divHeader
{
    height: 50px;
}

#divContent
{
    position:absolute;
}

#divFooter
{
    height: 50px;
    position:absolute;
    bottom:0;
    width:100%;
}
<div id = "divHeader">
    Header
</div>
<div id = "divContent">
    Content
</div>
<div id = "divFooter">
    Footer
</div>

Я пробовал создать родительский div для размещения существующих 3 div и присвоить этому div вертикальное выравнивание: middle; но это ни к чему не приведет.

Приемы 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 сценарий полностью изменился.
4
0
3 947
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вам нужно либо установить height div, чтобы заполнить всю область содержимого, либо его координаты должны быть в центре. Что-то вроде top:50%; left:50%, но при этом div будет немного смещен в нижний правый угол.

Если добавить margin-top: -25%; маржа слева: -25%; это должно перецентрировать элемент.

Ian Oxley 16.10.2008 17:58

% в марже относится к размеру контейнера, а не к элементу. Здесь вам нужно использовать абсолютный размер.

Kornel 16.10.2008 22:27

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

Может попробовать:

#divHeader
{
    height: 50px;
}

#divContent
{
    /*position:absolute;*/
    width: 900px;
    margin-left: auto;
    margin-right: auto;
}

#divFooter
{
    height: 50px;
    position:absolute;
    bottom:0;
    width:100%;
}

Интересно, голосование отрицательное. По крайней мере, сначала расскажите причину, а затем проголосуйте против.

Nazmul 19.12.2011 11:46
Ответ принят как подходящий

В CSS2:

html,body {height:100%;}
body {display:table;}
div {display:table-row;}
#content {
    display:table-cell;
    vertical-align:middle;
}

&

<body>
<div>header</div>
<div id = "content">content</div>
<div>footer</div>
</body>

http://codepen.io/anon/pen/doMwvJ

В старом IE (<= 7) вы должны использовать трюк с абсолютным позиционированием, о котором упоминал marxidad.

И в последних версиях браузеров вместо этого вы можете использовать flexbox.

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

Suamere 14.05.2015 01:12

добавить фон: красный; только в div заголовка, и вы увидите, что «контент» на самом деле НЕ центрируется, а просто находится непосредственно под большим заголовком. Кроме того, просто удалите vertical-align: middle и убедитесь, что это не имеет никакого эффекта, потому что на самом деле ничего не выровнено по вертикали. А для настоящего теста сделайте заголовок фактической высотой, например 20% от окна, как обычно, и убедитесь, что «контент» находится прямо под ним, а не по центру по вертикали между «заголовком» и «нижним колонтитулом».

Suamere 15.05.2015 02:44

@Suamere Понятно. Я исправил пример, добавив display:table-cell в #content.

Kornel 16.05.2015 00:51

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