Привет.
Всем давно известно, что IE до 7 версии не поддердживал CSS-свойство position: fixed;
и всем также давно известно, как осуществляется совместимость — через JS внутри CSS-expression: position: absolute; top: expression(document.getElementsByTagName("body")[0].scrollTop + "px");
. Казалось бы, что сейчас такие дремучие версии IE уже никому не нужны, однако, как опять же всем давно известно, существует и некий Quirks Mode, который используют некоторые крупные сервисы (Amazon, например) и при создании браузерных плагинов, которые вставляют свой код в страницу, приходится учитывать. А поскольку взаимодействие с сайтом происходит через JS, то и применять CSS-свойства приходится динамически.
Итак, столкнулся я со следующей проблемой: IE не хочет корректно обрабатывать
- строку с CSS-expression отправленную в св-во так:
obj.style.top = 'expression(document.getElementsByTagName("body")[0].scrollTop + "px")';
- так (хотя здесь проблема в ином, IE просто не применяет ничего аттрибуту
style
черезsetAttribute
):
obj.setAttribute('style', 'top: expression(document.getElementsByTagName("body")[0].scrollTop + "px")');
- так:
obj.cssText = 'top: expression(document.getElementsByTagName("body")[0].scrollTop + "px");';
- и даже так:
obj.className = 'pew';
$("<style>.pew{top: expression(document.getElementsByTagName("body")[0].scrollTop + "px";}</style>").prependTo('body');
Но потом наткнулся на гайд по экспрешнам в MSDN и нашёл там решение:
Для работы с CSS-expression у IE в объекте style есть три метода (+1 для document):
setExpression(property, "expression");
— присваивание экспрешна (условие пишется в кавычках);getExpression(property);
— получение строки с экспрешном;removeExpression(property);
— удаление экспрешна;document.recalc(true);
— перерасчёт всех динамических CSS-значений текущего документа.
Таким образом спасла меня строка obj.setExpression('top', 'document.getElementsByTagName("body")[0].scrollTop + "px"');
. Пользуйтесь.
комментарии отключены.