CSS-макет для вертикальных сложенных div-ов, чтобы использовать 100% доступной высоты - PullRequest
1 голос
/ 05 июля 2011

У меня есть макет, в котором два div отображаются вертикально друг над другом внутри родительского div, который будет иметь определенную высоту (из-за наличия меню слева).Я хочу, чтобы два div занимали все доступное вертикальное пространство.Тем не менее, они должны изменить размер в зависимости от их содержания.Самый простой способ объяснить это с помощью диаграммы:

enter image description here

Считывание диаграмм сверху вниз, это сценарий:

  1. оба div занимают 50% доступной высоты, так как этого достаточно, чтобы вместить их содержимое (это значение по умолчанию).

  2. в верхнем div много контента и меньше в нижнемдела.Top div расширяется для соответствия содержимому и сдавливает нижний div.

  3. обратная ситуация (2).

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

Я думаю, я мог бы выяснить, как сделать это с таблицей, см. Пример здесь , который почти правильно (в любом случае в chrome) за исключением того, что внешний div не расширяется должным образом.

Есть ли лучшее решение CSS для этого без использования таблицы?

Я не могу использовать JavaScript, и решение должноработать во всех браузерах ... включая IE6 :(.

Ответы [ 3 ]

3 голосов
/ 05 июля 2011

Это можно сделать с помощью CSS с помощью функции, называемой гибкой блочной моделью. Это расширение блочной модели, которая использовалась в CSS с самого начала, и позволяет вам делать такие вещи, как вертикальное наложение и т. Д., Что было невозможно раньше.

Вы должны начать с display: flexbox;, а затем использовать другие связанные стили для определения характеристик макета, который вы хотите. Это очень мощно. Вы можете прочитать полную спецификацию W3C для этого здесь: http://www.w3.org/TR/css3-flexbox/

Теперь плохие новости: это очень недавнее дополнение к CSS. На самом деле он имеет достаточно хорошую поддержку браузера (хотя и с префиксами поставщиков), но проблема, с которой вы всегда будете сталкиваться, заключается в том, что он не поддерживается в IE, даже в IE9 (хотя это планируется для IE10)

Для других браузеров требуются префиксы поставщиков, поэтому даже для поддерживаемых браузеров вам придется писать свои стили в четырех или пяти версиях.

Кроме того - и это настоящий убийца - не существует хорошего альтернативного решения для браузеров, которые его не поддерживают. Если вы создадите свою страницу с использованием flexbox макетов и загрузите ее в браузер, который их не поддерживает, это будет катастрофа.

По этой причине он пока еще не видел особого применения в реальном мире. Придет время, но пока IE9 и более ранние версии используются, он не станет мейнстримом.

Вы можете увидеть полную таблицу совместимости браузера для этой функции здесь: http://caniuse.com/#search=Flexible%20Box%20Layout%20Module

Тем временем вам придется использовать решение Javascript.

Моя рекомендация - плагин JQuery Masonry . Я думаю, что это будет вашим лучшим решением на данный момент.

0 голосов
/ 23 сентября 2011

SuperStretch может помочь вам в этом.

0 голосов
/ 05 июля 2011

Вы можете подделать его, используя div обтекания высотой 100% и белую рамку, например:

http://jsfiddle.net/cBV88/2/

Вы также можете удалить фиксированную высоту, и она все равно будет работать.

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