Подтвердить что ты не робот

Как вертикально выровнять 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/

*

4b9b3361

Ответ 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%);
}