Вертикально центрируйте два div внутри обертки (с динамическим содержимым и содержимым ниже обертки)

Я пытаюсь центрировать два div с динамическими высотами внутри динамической оболочки... Я играл со всеми трюками, чтобы попытаться заставить этот рабочий кросс-браузер безрезультатно, есть ли у кого-нибудь предложение? См. Рисунок для пояснения! Фиолетовый блок - это еще один блок содержимого. Я хочу сидеть на 20 пикселей ниже динамической оболочки.

Question explanation

  • ПРИМЕЧАНИЕ. Для примечания слева от красной рамки я хотел сказать: "Она должна быть такой же высокой, как у того, что содержит div (зеленый или красный), выше.
  • Я также не знаю, будет ли красный или зеленый ящик выше - просто, чтобы высота зеленого ящика была динамичной, а высота красного была фиксированной.

Ответы

Ответ 1

Используйте display: inline-block + vertical-align: middle на блоках, чтобы они были выровнены так, как вы хотите.

Посмотрите на этот пример: http://jsfiddle.net/kizu/Tky8T/

Еще больше: высота красного div также может быть динамической!

Ответ 2

Если вы сделаете обертку div равной posititon: relative. Затем зеленый div должен быть position: absolute, вы можете сделать его вертикально центрированным. Вот пример: http://jsfiddle.net/56Ase/

Ответ 3

Итак, у меня был быстрый вызов вашему вопросу, это не очень большое решение jQuery, на самом деле это так просто, что даже я мог это сделать!

Было разработано то, что div больше динамически (т.е. красное или зеленое больше), затем мы игнорируем более крупный div и обрабатываем правильный вертикальный край для меньшего div.

Посмотрите этот пример для лучшего понимания: http://jsfiddle.net/6fN48/

CSS

 #wrapper
{ width: 400px; border: 1px solid blue; padding: 10px; margin: 0 auto; }

#wrapper .red
{ width: 195px; float: left; border: 1px solid red; }

#wrapper .green
{ width: 195px; float: right; border: 1px solid green; }

JQuery

var r = $('#wrapper .red').outerHeight();
var g = $('#wrapper .green').outerHeight();
var w = $('#wrapper').outerHeight();

/* calculate which is bigger and apply the margin to that element */

/* is the red or green div bigger? */
if(r > g){

    /* ok red is bigger, then work out the top margin to apply onto green */
    var x = (w - g) / 2;

    /* apply CSS to the green div */
    $('#wrapper .green').css({ 'margin-top' : x + 'px' });

} else if(r < g){

     /* ok green is bigger, then work out the top margin to apply onto red*/
    var x = (w - r) / 2;

    /* apply CSS to the red div */
    $('#wrapper .red').css({ 'margin-top' : x + 'px' });

}

HTML

<div id="wrapper">
    <div class="red">
        Lorem ....
    </div>
    <div class="green">
        Lorem ipsum dolor ...
    </div>
    <br clear="all" />
</div>

Надеюсь, это поможет, единственный способ - использовать css-позиционирование с известной высотой, что, очевидно, не является динамическим.:)