Двойные стандарты

Всегда очень забавно видеть, как абсолютно аналогичные ситуации трактуются по разному в зависимости от субъективных факторов.

Применительно к верстке всегда принято ругать IE6, который давным-давно устарел, содержит кучу багов, а 50% времени, затрачиваемого на верстку шаблона, уходит на его подгонку под IE6. И тем смешнее видеть, например, вот такие баги в одном из «идолов» веб-разработки — FireFox. В общем и целом FF некорректно позиционирует элементы с position:absolute внутри блока fieldset, у которого стоит position:relative. Баг существует с 2008 года во всех версиях, включая новейший FF4 и особых подвижек в исправлении что-то не видать. Все остальные браузеры, включая приснопамятный IE6 (!!!), бага лишены и рендерят все правильно легко и непринужденно.

Но больше всего доставляют в этой ситуации рекомендации по решению проблемы: «Просто добавьте внутрь fieldset еще один div в качестве враппера для всех элементов и присваивайте position:relative именно ему». 🙂 По-моему, это прекрасно! Все баги все того же IE6 исправляются примерно также — типа, «добавьте тут враппер» или «вставьте тут zoom:1» — и за что мы только обижаемся на этот браузер? Ведь всего лишь какие-то мелочи просят сделать… А мы тут, понимаешь, разнылись… 🙂

Браузеры — покой нам только снится…

Веб-разработчики спят и видят, когда можно будет не адаптировать сайты под старые браузеры, типа IE6, Opera 9 или FF2 (в меньше степени, но все же — отсутствие «display: inline-block;» это печально). Бодрые отчеты говорят нам о том, что доля шестого эксплорера уже сильно меньше 10% и когда она наконец станет меньше 5% — можно будет смело на него забивать и вешать на своем сайте плашку «Обновите браузер».

Однако, реальная практика показывает совсем другие цифры. Смотрю на примере двух своих сайтов — оба не имеют яркой ориентации на столичных пользователей, имеют много посетителей из регионов, только один собирает трафик с уклоном на гос.учреждения и органы власти, а другой — с уклоном на бизнес/корпоратив. И что же мы имеем по обоим? А имеем мы примерно одинаковую структуру:

И вид сей навевает (по сравнению с бодрыми отчетами, демонстрирующими «среднюю температуру по больнице») печаль и уныние. Ибо домашние пользователи — это конечно прекрасно, но если сайт ориентирован на корпоративную аудиторию и/или людей в гос.учреждениях/органах власти, то IE6 еще долго нужно будет брать в расчет, т.к. он вместе с Windows XP живее всех живых и спокойно поплевывает с высоты на всяких там конкурентов, включая свои же новые версии…

Одно утешение — эти самые новые версии все-таки суммарно его опережают. И девятую Оперу вместе со вторым Файрфоксом в расчет можно не принимать, что тоже неплохо.

Internet Explorer убивает

В буквальном смысле — тем что тратит время жизни тем, что вынуждает бороться с его багами.

В данном конкретном случае столкнулся с багом, о котором до этого ни разу нигде не читал и не слышал. Более того, уже после решения проблемы поиском в Гугле так найти почти ничего и не смог. Хотя, возможно, плохо искал, так как ситуация достаточно неочевидная и нечастая… Примеры кода есть по ссылке приведенной ниже, а в тезисах суть следующая. Имеем div с содержимым, которому изначально присвоен некий скрывающий его со страницы класс, типа такого:

.ui-tabs-hide {
left:-15000px;
position:absolute;
top:-15000px;
visibility:hidden;
}

Потом посредством JavaScript этот класс с блока убирается, но содержащиеся внутри div’а таблицы остаются невидимыми (иногда частично — границы есть, а содержимого — нет, что уж совсем футуристично).

Описание проблемы с примерами дается тут — http://wiki.orbeon.com/forms/doc/contributor-guide/ie-bugs (пункты 2.1.4, 2.1.5). Сам столкнулся с этим багом при работе с модулем Tabs для Drupal, в котором все реализовано посредством JQuery UI Tabs. По приведенной ссылке предлагается вносить изменения в код JavaScript, но мне лезть во внутренности JQuery не хотелось (возможно, проблема решения в новых версиях JQuery UI Tabs, т.к. в комплекте модуля идет 1.6, но обновляться не хотелось, так как могли вылезти какие-нибудь новые грабли, связанные с несовместимостями самого Drupal’а, а мне срочно надо было решить вопрос), поэтому подумал и добавил в вышеприведенный класс для скрывания блока строчку «display: none;«, что полностью решило проблему и IE6/7 стали нормально отображать таблицу внутри div’а.