position:fixed для IE6 | описание 4-х способов

position:fixed для ИЕ6 Дата публикации: 24.03.2010 ...

Дата публикации: 24.03.2010

Задача

Проэмулировать CSS свойство position: fixed для IE6, которое всеми «любимый» браузер ни в какую понимать не хочет.

Решения

Для эмуляции будем использовать expression, который будет вычислять положение нашего блока при любых изменениях размеров или положения страницы. Для этого можно использовать три варианта:

* html .fixedBlock{ /*хак для ИЕ6*/
	position: absolute;
	top: expression(eval(document.body.scrollTop) + "px");
}
* html .fixedBlock{ /*хак для ИЕ6*/
	position: absolute;
	top: expression(parseInt(document.body.scrollTop, 10) + "px");
}
* html .fixedBlock{ /*хак для ИЕ6*/
	position: absolute;
	top: expression(document.getElementsByTagName("body")[0].scrollTop + "px");
}

Наиболее подходящим из вариантов я считаю последний, так как привязка к «document.body» работает только в Quirks mode(режим совместимости), для работы и в стандартном режиме работы браузера стоит привязываться к «document.documentElement» (он же document.getElementsByTagName(«body»)[0]). Последний вариант сработает в любом из режимов и поэтому более надежен.

Возможные проблемы

Теперь ты получил рабочий пример в ИЕ6, но, если обратишь внимание, то при прокрутке страницы наш блок с position: fixed будет «дёргаться». Чтобы это устранить есть хитрое решение от гуру студии Лебедева — стоит прописать такой стиль для body:

body
{
    background:url(about:blank);
    background-attachment: fixed;
}

Демо пример.

Ещё 1 способ…

Однажды столкнулся со случаем, в котором не работал ни один из данных примеров (из за объявленного там DOCTYPE), и мне на помощь пришёл данный скрипт(он прижимает наш блок к низу нашего окна):

* html .fixedBlock{ /*хак для ИЕ6*/
	position: absolute;
	top: expression(parseInt(document.documentElement.scrollTop + document.documentElement.clientHeight - this.offsetHeight, 10) -280 + "px");
}

Где «280» — расстояние между нижними границами окна с position: fixed и окна браузера.

Заметки

  • в «боевых» условиях вместо хаков следует использовать условные комментарии;
  • следует помнить, что expression замедляет работу браузера. Так как для определения актуальных координат, нужно постоянно вести перерасчет в зависимости от прокрутки окна браузера, нельзя сделать оптимизированный experssion, который вычислялся бы только один раз. Потому, если страница тормозит имеет смыл попробовать решение на Javascript (материал готовится).

Материалы

Теги:
Показать комментарии

Смотрите также в этом разделе

Смежные материалы, которые могут быть вам полезны

  • HasLayout | знакомимся, управляем, применяем
  • Max-width для IE6 | описание 2-х способов
  • Min-height для IE6 | без использования expression
  • Min-width для IE6 | описание 4-х способов
  • Min-width и max-width одновременно для IE6 | описание 2-х способов
  • PNG и прозрачность в IE6 | 4 метода | обход проблем
  • Блочная модель в IE6 | решаем проблему с размерами блоков для IE6
  • Высота блока 1px для IE6 | решаем проблемы с блоками небольшой высоты
  • Для IE6 устраняем flickering — обращение к серверу при наведении на элемент
  • Дублирование символов в IE6
  • Дырка под футером при показе блока в IE 6
  • Как перекрыть поверх слоем select в IE6
  • Как перекрыть поверх слоем select в IE6
  • Обрезка контента c отрицательным margin в IE6
  • Отступы плавающих блоков в IE6 | решаем проблему с большим отступом у плавающих блоков
  • Псевдокласс :first-child для ИЕ6
  • Псевдокласс hover в IE 6
  • Селектор потомков > для IE6
  • Селекторы атрибутов [type=…] в ИЕ6
  • Сестринский селектор для IE6
  • Ссылки с вложением
  • Убираем смещение на 1px в IE6 для right:0 и bottom:0