Как вертикально выровнять div внутри другого div без отображения: table-cell
Хорошо, это структура div.
<div class="DivParent">
<a href="#">
<div class="DivWhichNeedToBeVerticallyAligned"></div>
</a>
</div>
DivParent имеет фиксированные значения ширины и высоты, но DivWhichNeedToBeVerticallyAligned не имеет фиксированных значений высоты.
Если вы делаете DivParent display: table-cell; вы можете вертикально выровнять DivWhichNeedToBeVerticallyAligned, но я не хочу использовать эту функцию, так как она вызывает некоторый беспорядок.
Ссылка тега href должна быть того же размера, что и divParent i, означающая, что целое divparent должно быть доступно для кликов. как дисплей: блок.
Итак, есть ли способ CSS для выравнивания по вертикали или облегченного jquery-решения.
Спасибо.
Здесь jsfiddle: http://jsfiddle.net/XHK2Z/
*
Ответы
Ответ 1
Вы можете использовать дополнительный помощник для достижения вертикального выравнивания в блоке с фиксированной высотой.
Посмотрите на это: http://jsfiddle.net/kizu/7Fewx/
Там у вас должен быть помощник рядом с блоком, который вы хотите выровнять с помощью:
.DivHelper {
display: inline-block;
vertical-align: middle;
height:100%;
}
И добавьте display: inline-block; vertical-align: middle;
в .DivWhichNeedToBeVerticallyAligned
Ответ 2
Невозможно сделать это с помощью CSS, не зная высоты дочернего div.
С помощью jQuery вы можете сделать что-то вроде этого.
var parentHeight = $('#parent').height();
var childHeight = $('#child').height();
$('#child').css('margin-top', (parentHeight - childHeight) / 2);
Ответ 3
если родительский объект не имеет другого дочернего элемента. это будет css только "взломать"
DivParent{line-height:100px /*the div actual height*/ }
.DivWhichNeedToBeVerticallyAligned{display:inline-block}
другой взлом
DivParent{height:100px; position:relative}
.DivWhichNeedToBeVerticallyAligned{height:20px; position:absolute; top:50%; margin-top:-10px;}
Ответ 4
Это решение работает для меня отлично в современных браузерах, включая IE 10 и выше.
<div class="parent">
<div class="child">Content here</div>
</div>
введя этот css
.parent {
height: 700px;
display: flex;
justify-content: center;
align-items: center;
}
.child {
width : 525px;
}
Ответ 5
Я использовал следующее решение (без позиционирования, таблицы-таблицы/таблицы-строки и без высоты строки), так как более года он работает и с IE 7 и 8.
<style>
.outer {
font-size: 0;
width: 400px;
height: 400px;
background: orange;
text-align: center;
display: inline-block;
}
.outer .emptyDiv {
height: 100%;
background: orange;
visibility: collapse;
}
.outer .inner {
padding: 10px;
background: red;
font: bold 12px Arial;
}
.verticalCenter {
display: inline-block;
*display: inline;
zoom: 1;
vertical-align: middle;
}
</style>
<div class="outer">
<div class="emptyDiv verticalCenter"></div>
<div class="inner verticalCenter">
<p>Line 1</p>
<p>Line 2</p>
</div>
</div>
Ответ 6
Вот еще один вариант для современных браузеров:
.child {
position: absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
-o-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}