2015-09-28 5 views
0

Требование просто: создайте макет сайта с динамическим липким нижним колонтитулом (то есть нижний колонтитул динамической высоты, который придерживается нижней части окна просмотра, когда содержимое не заполняет всю область просмотра, но это под контентом и не сразу видно, когда контент выходит за пределы высоты окна просмотра), который работает в браузерах обратно в IE6 и не требует работы JS-хаков.
Возможно ли это?Макет сайта с динамическим липким нижним колонтитулом, который работает с IE6 без JS: возможно ли это?

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

Sticky footer layout diagram

Я пытался любое количество макетов с дивами и таблицами, но я не могу думать ни о том, что получить эту работу в старых IE, Firefox и т.д. Любая помощь будет высоко оценен.
Спасибо.

+0

IE6 представляет собой долю в процентах от всех браузеров в использовании. Почему вы все еще заботитесь о IE6? – Craig

+0

Это не делает ничего, чтобы ответить на вопрос, но, ради аргумента, возьмем IE6 из уравнения. Теперь, как бы вы это сделали? Спасибо. – HartleySan

+0

Если бы я имел в виду, что это был ответ, я бы не поставил его в комментарии. :-) Я бы использовал современный HTML5, или в худшем случае я бы использовал DIV с значениями семантического идентификатора (** не ** CSS-классы), перейдя к лучшему будущему, поддерживая только столь же отсталые, как мне абсолютно необходимо, и Я бы терпел, что мои предположения ставятся под сомнение и другими, и я надеюсь, один. Мир. :-) – Craig

ответ

1

Липкий нижний колонтитул с динамическим размером является жестким, потому что вам также необходимо динамически изменять основное содержимое, чтобы прокрутка работала правильно, но CSS не является динамическим языком программирования.

Ближайший я думаю, что вы сможете получить даже с текущим CSS («текущий», конечно, полностью исключает IE6) заключается в использовании процентов. Проблема с процентами заключается в том, что нижний колонтитул не будет динамически отнесен к содержимому нижнего колонтитула, он будет рассчитан на ваше лучшее предположение относительно процентного значения для использования. Это не будет удовлетворительным.

Вы сказали, что хотите избежать «хаков» JavaScript, но, тем не менее, вы могли бы почти наверняка снять это с помощью JavaScript, установив нижний колонтитул абсолютно позиционированным, нижнее положение прибитое до нуля (0) и запись события который обнаруживает изменения в высоте нижнего колонтитула и соответствующим образом изменяет размер основного окна содержимого.

Я не знаю, что я назвал бы это «взломом» в уничижительном смысле. Это всего лишь код, делая то, что вы говорите ему. Конечно, если корпоративная (или другая) политика, в которой вы пытаетесь реализовать это, не позволит использовать JavaScript, это другое дело. И учитывая, что пародия на безопасность 14-летнего IE6 находится на этом этапе игры, я на самом деле был бы одним из тех, кто хотел бы отключить JavaScript. Но это, конечно, исключает возможность развертывания любого удаленного современного факсимиле «приложения». Конечно, я имею в виду современные удобные обратные связи, которые я разрабатывал в толстых клиентских приложениях более 20 лет назад и которые стали действительно возможными в веб-браузерах со времен веб-стандартов «Web 2.0». IE6, конечно, предшествует даже этому.

Обеспечение полной поддержки IE6 может быть высоким порядком.

Вы уверены, что не можете указать, что ваше приложение должно работать в современном браузере? Самые последние версии Chrome и Firefox все еще могут быть установлены в Windows XP, и любой, кто не верит в новые версии Chrome или Firefox, намного более безопасен, чем древний, IE6 с ошибкой, обманывающий себя.Было сказано, что; если вы все еще используете Windows XP, у вас очень серьезные проблемы с безопасностью, ожидая, когда вас укусят.

+0

Большое спасибо за этот ответ и ваши последние комментарии. Ваши исходные комментарии останутся немного обеспокоенными, но после дальнейших объяснений я понимаю, что вы имеете в виду. Спасибо. Если бы вы были так добры, то, что я прошу о возможности вернуться хотя бы к IE8? Другими словами, липидный нижний колонтитул с динамической высотой возможен в FF, Chrome и IE до 8 без JS? Спасибо. – HartleySan

+0

@HartleySan У меня просто не было времени, чтобы на самом деле так выкачать. Я не уверен, что это возможно с использованием CSS исключительно. Если бы это был я, я бы потянулся за JavaScript (и используя jQuery для нормализации кода обработчика событий между браузерами). Кроме того, я обнаружил бы, когда JavaScript отключен, и сделайте нижний колонтитул невключенным в этом случае и, возможно, отобразит скрытое предупреждающее сообщение в нижней части заголовка (где-то в любом случае), объяснив, что этот опыт будет скомпрометирован, если только JavaScript не является включен. Извините, у меня нет лучшего ответа - искренне желаю, чтобы я это сделал. Это может быть возможно, не знаю. – Craig

+0

Поиграв с этим в течение нескольких дней, я начинаю делать то же самое. Это позор, по-видимому, простые и общие макеты, но простые и интуитивно понятные для создания только с помощью CSS, но я полагаю, что это природа браузера. Я действительно чувствую, что CSS всегда является самым слабым звеном в попытке сделать что-либо в браузере. Когда мы собираемся получить настоящий стиль/стиль? Во всяком случае, большое спасибо. Я ценю вашу помощь и понимание. – HartleySan

0

Вот что вам нужно добавить в свой CSS:

html,body{width:100%;} //This makes sure the body takes up 100% of the window 
.wrapper{min-height:100%; margin-bottom:-/*height of footer*/px;} 
.push{height:/*height of footer*/px;} 
.footer{height:/*height of footer*/px;} 

Wrap все из зеленой секции в DIV с class="wrapper" и добавить <div class="push"></div> в нижней части, чтобы предотвратить вашу зеленую зону от переполнения в фиолетовой области (из-за отрицательного запаса).

+0

Это не отвечает на мой вопрос, потому что мне нужен нижний колонтитул с динамической высотой. Пожалуйста, снова прочитайте вопрос. Спасибо. – HartleySan

+0

Изменяет ли высота с установленными интервалами для совместимости с мобильными устройствами (т. Е. '@media (min-height: y) {}') или что-то совсем другое? Если это первый, вы можете использовать '@ media', чтобы указать, с каких интервалов изменения высоты. – InfiniteLoop

+0

Честно говоря, это не имеет большого значения, так как вопрос задается о динамических высотах.Например, в нижнем колонтитуле может быть любое количество вещей, которые могут привести к тому, что он будет занимать различное количество вертикальных пикселей в браузерах по простому факту, что не все браузеры одинаково отображают одно и то же. Таким образом, ограничивая нижний колонтитул высотой набора, вы значительно ограничиваете его гибкость. Кроме того, в большинстве нормальных случаев вы никогда бы не указали высоту нижнего колонтитула, поэтому зачем вам здесь? – HartleySan

0

Возможно со старой таблицей HTML в школьной школе. Следующий код должен работать в IE6.

html, body, table { height: 100%; } 
 
table { width: 100%; } 
 
td { vertical-align: top; } 
 
.header { background-color: orange; } 
 
.main { 
 
    background-color: green; 
 
    height: 100%; 
 
} 
 
.footer { background-color: purple; }
<table> 
 
    <tr> 
 
    <td class="header">1</td> 
 
    </tr> 
 
    <tr> 
 
    <td class="main">2</td> 
 
    </tr> 
 
    <tr> 
 
    <td class="footer">3</td> 
 
    </tr> 
 
</table>

Для новых браузеров вы можете сделать то же самое с таблицами CSS.

html, body, .table { height: 100%; } 
 
.table { 
 
    display: table; 
 
    width: 100% 
 
} 
 
.row { display: table-row; } 
 
.cell { 
 
    display: table-cell; 
 
    vertical-align: top; 
 
} 
 
.header { background-color: orange; } 
 
.main { 
 
    background-color: green; 
 
    height:100%; 
 
} 
 
.footer { background-color: purple; }
<div class="table"> 
 
    <div class="row"> 
 
    <div class="cell header">1</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell main">2</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell footer">3</div> 
 
    </div> 
 
</div>