Каков современный способ вертикального центрирования формы внутри плавающего div переменной высоты без использования JavaScript? - PullRequest
2 голосов
/ 30 августа 2011

Что я пытаюсь сделать:

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

Что я хочу:

Современное решение, которое не использует JavaScript. Существует множество подходов без JavaScript, но как только вы учитываете плавающие div и динамические высоты, этот список резко сокращается. Я еще не нашел работающего решения, пока только одно современное.

Вот jsfiddle (но я предлагаю использовать необработанный код):

pshpV

Вот необработанный код:

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />

        <style type="text/css">
            body
            {
                margin: 10px;

                padding: 10px;

                background: #293134;
                color: #E0E2E4;

                border: 1px solid #93C763;
            }

            #container
            {
                overflow: hidden;

                width: 800px;

                margin: 0 auto;

                padding: 10px;

                border: 1px solid #678CB1;
            }

            #left
            {
                float: left;

                width: 568px;

                padding: 10px;

                border: 1px solid #FFCD22;
            }

            #right
            {
                float: left;

                width: 200px;

                margin-left: 10px;

                padding: 10px;

                border: 1px solid #EC7600;
            }

            #container, #left, #right
            {
                box-sizing: border-box;
                -moz-box-sizing: border-box;
                -webkit-box-sizing: border-box;
            }
        </style>
    </head>

    <body>
        <div id="container">
            <div id="left">
                <form>
                    <input type="text" name="keyword" required placeholder="keyword" />

                    <input type="submit" value="search" />
                </form>
            </div>

            <div id="right">
                <h1>foo</h1>
                <h2>bar</h2>
                <h3>baz</h3>
            </div>
        </div>
    </body>
</html>

Hindsights:

Насколько я знаю, единственный подход к работе с таблицами - это удаление поплавков. Похоже, мне даже не нужны поплавки. Несмотря на это, я все еще хотел бы найти ответ на мой вопрос.

1 Ответ

2 голосов
/ 30 августа 2011

Не совсем уверен, как именно вы хотите все, но вы можете попробовать поиграться с дисплеем: table / table-cell, а затем выровнять по вертикали.Тем не менее, IE имеет проблемы с этими свойствами.<= IE7 Я думаю </p>

Редактировать: Я хотел бы выйти на конечность и сказать, что то, что вы спрашиваете, невозможно.Проблема заключается в двух требованиях, которые вы просите объединить - плавающие и динамические высоты.Плавающий элемент означает, что родительский элемент не будет распознавать его высоту, даже если вы плаваете и родительский элемент, он растянется до высоты плавающих дочерних элементов, но все равно не будет иметь распознанной высоты.Поэтому, пробуя тактику выравнивания по центру, такую ​​как позиционирование относительно вершины: 50% не будут работать, потому что высота не распознается.Во всех случаях фактическая высота ваших элементов никогда не будет распознана, потому что они плавающие.Вам придется указать высоту родительских элементов, чтобы обойти эту проблему, и это не сработает в вашем случае, потому что это еще одно ваше требование - динамические высоты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...