Необходимо сверстать макет страницы таким образом, чтобы он состоял из трех строк — div-ов.
Верхняя и нижняя строки фиксированной высоты, верхняя прижата к верхней части страницы, нижняя строка прижата к нижней части страницы.
Основной контент в цетральной строке, в ней при нехватке места должен появляться скрол. Центральный div должен всегда занимать всю доступную высоту, которая осталась от верхней и нижней строк.
Таблицами с фреймами я такое делать умею. Хотелось бы научиться делать div-ми, посмотреть как люди живут. Пробовал всякие генераторы шаблонов, не нашел подходящего варианта.
верхний див с фиксированной шириной.
нижний див так же фиксированный.
центральному диву скриптом определяем высоту, равную высота окна браузера минус высота 2-х фиксированных дивов. этому же центральному диву устанавливаем overflow:auto;
на jQuery это будет примерно так:
$('div.middler').css({'height':$(window).height()-$('div.top').height-$('div.bottom').height()+'px','overflow':'auto'});
Вариант товарища dom1n1k вам подойдет, если не будет всевозможных добавлений интерфейса, которые отображаются не всегда. Например панель администрирования.
Скрипты тут штука излишняя.
Вот набросал приблизительную канву: dom1n1k.name/dump/habr-qa6300.html
Оговорюсь: в IE6 не работает (он не умеет задавать размер абсолютно спозиционированных элементов по 4 отступам), начиная с 7-ки должно быть по идее нормально.
Вот как раз шестой ишак и поддерживается моим вариантом. Подключение jquery не критично, на основе скрипта все работает норм во всех браузерах. В вашем варианте есть один маленький косяк. При добавлении панелей интерфейса(например панель администратора cms) в залогиненном варианте ваша верстка не будет работать так как хотелось бы. И писать костыль будет еще более громоздко.
Не совсем понял про добавление панели. Сделать так, чтобы например сверху была не одна панель, а две — а средний блок подстраивался бы под их суммарную высоту?
Не вижу никакой проблемы, даже если эта панель будет добавляться на клиенте через JS — нужно будет лишь пересчитать пару отступов (один раз, собственно при добавлении, а не в реальном времени при ресайзе окна). А уж если отдаваться статикой со стороны сервера, тем более.
Это не проблема. Скорей непрактичность. В моем же случае пересчет будет не ручным(как у вас), а автоматическим(вам ничего пересчитывать не придется). От куда такая неприязнь к скрипту? jQuery легкая библиотека, и к тому же дает кроссбраузерный результат и может применяться далеко не только для решения этой задачи при верстке.
Можно и автоматический пересчет сделать — вообще не вопрос. Я же написал, что это лишь общая канва. Речь о том, что пересчет будет однократным, а не реал-тайм при ресайзе (если компьютер/браузер не из свежих — скорее всего будет тормозить, мерцать при рефреше и т.п.)
Это не неприязнь к jQuery вообще, а нежелание плодить лишние сущности.
Например, IE иногда любит при обнаружении какой-то ошибки в JS оборвать его выполнение вообще. Соответственно, споткнувшись об одну ошибку (которая может быть вообще в другом месте), JS-функционал может отвалиться вообще весь :)
Поэтому нужно всеми силами избегать завязывать на JS то, что может полностью разрушить макет страницы.
Это если решим поддерживать 6-й эксплорер =)
Я пока только в 8-м смог потестить, пока полет нормальный. Если в семерке все ок, то наверное так и оставлю.