Позднее Ctrl + ↑

Необъяснимость глюков Firefox

Я уже писал, что в FF глюков мало, то понять, как их решить, невозможно, потому, что они наркоманские.

Есть страница, ширина которой — 100%. Нет горизонтального скроллинга. Дописываем в неё в определённом месте:

<script type="text/javascript" src="rubrika.js"></script>

И появляется горизонтальный скроллинг. Думаю: что-то в Рубрике. Исправляю на:

<script type="text/javascript" src="bubrika.js"></script>

(Такого файла нет.) Не помогает. Скроллинг остался. Пробую:

<script type="text/javascript"></script>

Скроллинг исчезает. Интересно. Неужели, думаю, он умудряется рендерить элемент <script>? Пишу:

<script type="text/javascript" src="bubrika.js" style="display: none"></script>

Скроллинг появляется. Получается, что он его не рендерит, а просто рисует скроллинг в случае, если у script есть src! Бред!

Так и вижу в открытых исходниках Mozilla текст:

IScrollBarNafig *_s;
_s = geckoBrwsr_Window2->__scrlBars;
if(P_src)
{
    _s->select(NULL, 0, 1, FALSE);
    rePaint(_s, PAINT_MODE_DEFAULT);
}

(Исходники на «„C++“» принято писать примерно так)

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

Проходит час экспериментов, ничто не помогает. Я беру, переделываю всё так, чтобы скрипт можно было вытащить в другое место. Вытаскиваю его в другое место, соответственно. Скроллинг исчезает.

И не просите меня выложить страничку для примера. Ту страничку, на которой я это делаю, я выложить не могу, а сочинять такую новую у меня нет никакого желания, слишком много чести для Mozilla Foundation.

Arrrrghhhh.

Шахматная партия

Ожидая окончательных оценок судей, шахматисты неспешно переставляли с места на место фигуры на доске — тройной тулуп, тройное сальто, тройной аксель. Они предчувствовали, что и оценка тоже будет не выше трёх.

Три маленьких открытия

Так не бывает, чтобы сверстал сайт, а он — хоба-на — работает во всех браузерах отлично. Каждый раз приходится что-то подкручивать, подделывать. Но с другой стороны, благорадря этому узнаёшь всё больше разного. Сегодня я узнал три разного.

1. Как заставить IE нормально понимать z-index?

Есть такая проблема, что IE применяет z-index’ы не ко всему документу, а как-то выборочно. Например, относительно позиционированный элемент оказывается «ближе к пользователю», чем статический, даже если его z-index меньше. Создаётся впечатление, что каждый relative-элемент создаёт своё пространство z-индексов.

Исследования показали, однако, что это ложное впечатление. На самом деле своё пространство z-индексов едино для всех относительных элементов. Таким образом, проблема решается просто путём изменения статического элемента на относительный. По идее, других проблем это вызвать не должно?

2. Как в Mozilla изобразить overflow-x/overflow-y?

У меня тут ситуация такова, что на странице почти обязательно появляется горизонтальный скроллинг (по смыслу), но видимым он быть не должен. В IE эта проблема решается вот так:

overflow-x: hidden;

Но на самом деле свойства overflow-x и overflow-y придумали в Microsoft, а W3C про них ничего не знают. Как же сделать это в Мозилле? А вот так:

overflow: -moz-scrollbars-vertical;

Итого имеем:

body {
  overflow: -moz-scrollbars-vertical;
  overflow-x: hidden;
}

Осталось понять, как сделать то же самое в Опере.

3. Как в Opera изобразить overflow-x/overflow-y?

А никак. То есть, как, но только совсем другим путём. Потыкавшись в Гуголь минуты полторы и не найдя готового решения (вроде -o-scrollbars-vertical), я решил, что нужно сочинять своё имеющимися средствами (то есть, средствами W3C). Но это оказалось просто.

W3C считает, что свойство overflow может иметь значения visible, hidden, scroll, auto, inherit. То есть, применяя это всё к body, мы можем получить либо полное отсутствие скроллбара, либо присутствие обоих (понятно, что речь идёт о странице, которая не помещается в отведённые ей рамки). Но кто сказал, что применять его нужно к body? Итак, решение.

Внутрь body запихиваем вот такой вот div:

#wrapper {
  width: 100%;
  height: auto;
  overflow: hidden;
}

И весь остальной контент запихиваем уже в него. Теперь всё работает так, как нам надо. Элемент body отображает только вертикальный скроллбар; горизонтальный ему не нужен, так как единственный элемент, находящийся внутри него — #wrapper — имеет ширину 100%, то есть прекрасно влезает по ширине.

В этом месте кажется, что можно выкинуть IE-only overflow-x и MZ-only -moz-scrollbars-vertical, дабы получить красивый, внятный и совместимый со стандартами CSS. Но не тут-то было. Mozilla всё-таки снова отображает горизонтальный скроллинг. Как же она его любит...

В общем, для надёжности оставляем всё, и overflow-x, и -moz и wrapper. И чёрт с ними, со стандартами.

Hope it helps™

Actimel

Мы провели исследования: 200 детей по всему миру в течении двух недель пили Actimel два раза в день, в результате чего... они выпили 5600 бутылочек Actimel

© IronRat

Firefox 1.0

Официально заявляю, что я поставил себе Mozilla Firefox 1.0.

Update: Один из сайтов, который у меня сейчас в разработке, по-прежнему отображается с горизонтальным скроллингом в ноль пикселей.

В IE очень много глюков рендеринга, но их можно как-то объяснить. Элементы форм игнорируют z-index, потому, что их рисует GDI в последнюю очередь (ну или что-то такое). Некоторые вещи не влезают в ширину потому, что и left: и right: одновременно IE понять не может. Однострочные комментарии в CSS не понимаются, надо думать, просто потому, что никто не написал кода, который их не учитывает. То есть баги приблизительно предсказуемы и приблизительно понятно где копать, чтобы их отловить.

В Gecko же багов меньше чем у кого-либо, но не удаётся выдумать никаких объяснений их появлению. Ну отчего может возникнуть скроллинг в 0 пикселей? Ну отчего координаты могут округляться в три разные стороны? Иногда возникает ощущение, что они в порядке прикола сделали эти баги, чтобы нам жизнь мёдом не казалась.

Эх.

Can’t type it

Странные люди.

За сегодня мне 4 раза пришёл typing notification от некоего Can’t. То есть, вылезал балун «Can’t is typing a message». С промежутком, например, в пару часов.

Печатает-печатает, а напечатать — не может. Type type, a type — can’t, я бы сказал.

Update: Вот, 5-й раз:

Can't type it!
Ранее Ctrl + ↓