Цитата(mielnir) | ...все отлично )) Гляньте подпись Sardar'a. |
Действительно, все отлично (я просто "огласил приговор" своему варианту, чтобы всем было ясно - он не пригоден для использования ;) )! Сегодня, "побаловавшись" с этой темой, написал кое-что поинтересней. Конечно же я отказался от использования обработчиков событий onscroll&onresize в пользу метода setExpression (пускай браузер сам "разруливает" позиционирование ;) ). Но для того, чтобы избежать длинных-предлинных выражений в таблице стилей, я не стал отказываться от применения behavior. Думаю, что достаточно сравнить описание стиля элемента, которое использует г-н http://www.howtocreate.co.uk/fixedPosition.html (и это только одно выражение св-ва left):
Код | 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' );
|
вот с такой записью:
Код | #ID { position:fixed; top:0px; left:0px; behavior:url(position-fixed.htc); }
|
и будет понятно, что второй вариант проще. Очевидно также, что он удобен еще и тем, что нет нужды писать кроссбраузерный стиль, используя условные комментарии и селекторы, не поддерживаемые IE. Пишется одно правило для всех браузеров. Кроме того, в моем варианте не используются ненужные глобальные переменные (ignoreMe&ignoreMe2) - вместо них создается дополнительная функция. Вот код из файла position-fixed.htc:
Код | <public:component lightweight='true'> <public:attach event='ondocumentready' onevent='fixPosition()' /> <script type='text/jscript'> /*<![CDATA[*/ if (!window.__getDimensionsForFixPosition__) { window.__getDimensionsForFixPosition__ = function (method) { var d = this.document; return (d.documentElement[method] || d.body[method]); } } function fixPosition() { if (!/MSIE (5|6)/.test(navigator.userAgent)) return; style.position = 'absolute'; var l = parseInt(currentStyle.left), t = parseInt(currentStyle.top), r = parseInt(currentStyle.right), b = parseInt(currentStyle.bottom), s1 = '+__getDimensionsForFixPosition__("clientWidth")', s2 = '+__getDimensionsForFixPosition__("scrollLeft")', l_p = (isNaN(l)) ? -r - offsetWidth + s1 : l, t_p = (isNaN(t)) ? -b - offsetHeight + s1.replace(/Width/, 'Height') : t; style.setExpression('left', l_p + s2); style.setExpression('top', t_p + s2.replace(/Left/, 'Top')); } /*]]>*/ </script> </public:component>
|
Надеюсь на комментарии, которые могут помочь исправить то, что возможно было упущено... |