Существует множество различных подходов к этому, основанных на различных идеях. Учитывая, что элемент имеет фиксированную высоту (в px,% или что у вас есть), лучшее решение, которое я нашел до сих пор, основано на следующем принципе:
Дайте родительскому div position: relative;
и ребенку div position: absolute;
, для того, чтобы сделать ребенка абсолютированным по отношению к родительскому.
Для ребенка, установите top
, bottom
left
, и right
к 0
. Учитывая, что у ребенка также есть фиксированные width
и height
, что меньше размера родителя, это приведет к тому, что браузер окажется в невозможной ситуации.
Входит margin: auto;
на ребенка, в качестве браузера спасителя. Теперь браузер может добавлять достаточный запас со всех сторон, чтобы дочерний элемент сохранял свой размер, но все же заполнял весь родитель, как принудительно, top
, bottom
, left
и right
установлен на 0
.
TADAAA! Элемент получает вертикальное и горизонтальное выравнивание внутри родителя.
Markup
<div class="parent">
<div class="child"></div>
</div>
CSS
.parent {
width: 200px;
height: 200px;
position: relative;
}
.child {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
width: 100px;
height: 100px;
}
рабочий пример
http://jsfiddle.net/sg3Gw/
Установите этот флажок дубликатом вопрос: http://stackoverflow.com/questions/79461/vertical-alignment-of-elements-in-a-div – SVS