первый раз задаю здесь свой вопрос :)
Я работаю над веб-сайтом и попытался расширить его по вертикали до нижней части окна клиента, используя обычный прием:
html, body { height: 100%; }
.container { min-height: 100%; }
Затем я хотел добавить несколько заголовков над основным содержанием и липкий нижний колонтитул внизу. Я завернул оба из них в свои собственные контейнеры и вытащил заголовок наверх вот так:
.top { position: relative; z-index: 1; height: 168px; }
.end { height: 58px; }
Зная высоту верхнего и нижнего колонтитулов, я решил отрегулировать общую высоту страницы так, чтобы она точно заполняла окно клиента (без полос прокрутки), если только содержимое не было слишком длинным. Я сделал это с отрицательными полями:
.container { overflow: hidden; min-height: 100%; margin-top: -164px; margin-bottom: -58px; }
.container-in { margin-top: 164px; margin-bottom: 58px; }
Второй контейнер находится внутри первого, и именно туда я помещаю фактическое содержимое каждой страницы.
Итак, это прекрасно работает в Firefox 4/5 — абсолютно ничего не отключено, все так, как задумано. Хром тоже вроде нормально. Однако в IE8 игнорируется отрицательная маржа в .container (я проверял с помощью инструментов разработчика). Контейнер начинается после .top, и в результате между .top и .container-in есть зазор в 164 пикселя из-за поля .container-in.
И что самое смешное - если я переключаю IE8 в режим совместимости с IE7, этой проблемы больше не возникает! Отрицательные поля прекрасно себя ведут в режиме IE7, но, конечно, ломается куча других вещей, поэтому нельзя указывать IE, чтобы он использовал режим совместимости.
Любые идеи о том, как обойти эту проблему/использовать другое решение для получения одинакового эффекта во всех браузерах (IE7 не требуется)? Я делаю что-то не так?
РЕДАКТИРОВАТЬ: Еще немного повеселившись и поиграв, я обнаружил, что заменив отрицательные поля на отрицательные координаты top: (и установив все контейнеры как относительные), он отлично работает в IE8, но теперь он оставляет зазор в 222 пикселя ниже html-контейнера в firefox (согласно firebug). Смущенный!
EDIT2: кажется, я знаю, что здесь не так, технически говоря. Internet Explorer 8 считает отрицательное поле «переполнением», и, поскольку переполнение: скрыто, оно уничтожает поле. Если я удалю overflow: hidden, у него больше не будет такого поведения, но он сломает остальную часть дизайна. У кого-нибудь еще есть идеи?