Pull to refresh

Фиксируя полноценный fixed

Reading time1 min
Views1.5K
В статье Шитова (студия Лебедева) описан полноценно работающий fixed.
Дошли у меня руки до создания такого fixed и решил попользоваться предложенным решением.
Но оно не заработало. Начал изучать исходный код статьи (ну там то работает) и в итоге выяснил, что дело в DOCTYPE. Как известно Лебедеву на него положить, а я вот написал его. Именно он выключал fixed в IE.


1й вариант Back to quirks

Если указать доктайп, то вся концепция летит в тартарары. Сделать так, чтоб код был валиден, и все работало оказалось (после 2х часов иностранного гугла) довольно легко – надо
перед доктайпом поставить пустой HTML комментарий. При этом:
1. Валидатор w3c говорит что код верный.
2. Огненнолис распознает доктайп и работает в соответствии с ним.
3. IE тупит – не находит доктайтпа на первой строчке и переходит в режим совместимости. Фиксед работает.
4 Опера на компьютере не стоит — ничего не скажу.

2й вариант Forward to DOCTYPEs

Почему это происходит?
Все как обычно очень просто. Шитов использует document.body.scrollTop; как, кстати говоря, и большинство пользователей интернета, постольку в свое время в поиске Яндекс выдавал мне только такую формулировку (и так же учат в интернете горе-программисты от JS, вот что можно сказать по существу о следовании стандарту w3c не вдаваясь в философские аспекты).
А в режиме соответствия стандарту у IE меняется объектная модель и надо использовать document.documentElement.scrollTop.
Проверил.
Код
body{
padding:5em 0 0 0;
}
h1{
position:fixed;
_position:absolute;
top:0;
_top:expression(eval(document.documentElement.scrollTop));
left:0;
margin:0;
padding:0;
background:lime;
}

h1 — действительно сверху, но теперь только при наличии DOCTYPE
Tags:
Hubs:
+9
Comments64

Articles