Фальсификация фиксированной позиции в IE6 - PullRequest
0 голосов
/ 21 апреля 2010

У меня есть сайт, который использует нижний фиксированный заголовок фиксированной позиции: http://www.entheospartners.com/newsite/

Эта установка прекрасно работает во всех браузерах, кроме IE6, который не поддерживает фиксированное позиционирование, поэтому вот что я сделал:

Когда пользователь IE6 приходит на страницу, я решаю, нужна ли прокрутка, используя этот бит кода:

var windowHeight = $(window).height();
var totalHeight = windowHeight - 100; // where 100 is the sum of the top nav height + footer height
var contentHeight;

if($('#subpage-content-small').length) { // main content div for a three column layout
    contentHeight = $('#subpage-content-small').height();
};

if($('#subpage-content-wide').length) { // main content div for a two column layout
    contentHeight = $('#subpage-content-wide').height();
};

if(contentHeight > totalHeight) {
    $('#container-container').css({
        'overflow-y' : "scroll",
        'height' : totalHeight
    });
};

... который вычисляет все правильно, помещает полосы прокрутки туда, где они должны быть (вправо) и устанавливает их на соответствующую высоту. Проблема в том, что полосы прокрутки не перемещают содержимое. Я не могу сказать, что я когда-либо видел нечто подобное, поэтому я надеюсь, что кто-то еще здесь. Заранее спасибо!

PS - Очевидно, что в IE6 это необходимо учитывать для устранения неполадок, которые, как я знаю, будут такими же болезненными для вас, как и для меня.

UPDATE

После небольшого углубления в CSS-выражения, основываясь на первом ответе, я пришел к решению, которое работает для фиксированного позиционирования меню в верхней части страницы. Все, что мне нужно, это уметь использовать это и применять в нижней части страницы. Это не так просто, как переключение всех «верхних» на «нижние», поэтому я надеюсь, что кто-то сможет меня просветить. Вот CSS:

#divfixed { 
    position: absolute; 
    top: expression(0+((e=document.documentElement.scrollTop)?e:document.body.scrollTop)+'px'); 
    left: expression(0+((e=document.documentElement.scrollLeft)?e:document.body.scrollLeft)+'px');}

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Вы можете использовать выражения CSS. Код ниже был скопирован с здесь .

fixme {
  /* Netscape 4, IE 4.x-5.0/Win and other lesser browsers will use this */
  position: absolute; right: 20px; bottom: 10px;
}
body > div#fixme {
  /* used by Opera 5+, Netscape6+/Mozilla, Konqueror, Safari, OmniWeb 4.5+, iCab,     ICEbrowser */
  position: fixed;
}
</style>
<!--[if gte IE 5.5]>
<![if lt IE 7]>
<style type="text/css">
div#fixme {
  /* IE5.5+/Win - this is more specific than the IE 5.0 version */
  right: auto; bottom: auto;
  left: expression( ( -20 - fixme.offsetWidth + ( document.documentElement.clientWidth ?     document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 =     document.documentElement.scrollLeft ? document.documentElement.scrollLeft :     document.body.scrollLeft ) ) + 'px' );
  top: expression( ( -10 - fixme.offsetHeight + ( document.documentElement.clientHeight     ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe =     document.documentElement.scrollTop ? document.documentElement.scrollTop :     document.body.scrollTop ) ) + 'px' );
}
</style>
<![endif]>
<![endif]-->
0 голосов
/ 21 апреля 2010

После дополнительных исследований, основанных на выражениях CSS, я наткнулся на полезный плагин jQuery, который отлично работает для меня: http://chrisiona.com/fixedposition/

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

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