Для начала я приведу небольшой фрагмент из книги Дмитрия Кирсанова "Веб-дизайн" (с.194), чтобы довести до вас суть проблемы.
Заметки о полях. Упомянутые только что поля -- это не поля, которые устанавливает вокруг содержимого страницы дизайнер, а те небольшие просветы вдоль левой и верхней границ окна, которые оставляет сам броузеер. Пользователь не может ни поместить что-либо в эту мертвую зону, ни повлиять на размеры полей средствами стандартного HTML. Еще хуже то, что величина этих полей непостоянна — она зависит от марки и версии броузера и от установленного в данный момент базового кегля шрифта. Из-за этого возникают трудности с точным совмещением фонового изображения и материала переднего плана — ведь броузер настилает фоновую картинку по всему пространству окна вплоть до рамки, вне зависимости от того, насколько отодвинуты от этой рамки текст и изображения переднего плана.
Примечание: проведя небольшое исследование, я составил вот
такую табличку размеров отступов для некоторых браузеров. -- А.
В.
браузер | Netscape Navigator | MS Internet Explorer | Opera | |||||
платформа | win32 | unix | win32 | win32 | ||||
версия | 3.x | 4.x | 3.x | 4.x | 3.x | 4.x | 5.0 | 3.5x |
отступы | 8px | 8px | 7px | 7px | 10px | 10px | 10px | 10px |
Оговорка относительно "стандартного HTML" не случайна -- очевидно, поля эти были введены именно для того, чтобы размеченные в минималистском, академическом стиле тексты можно было читать, не стукаясь взглядом о вплотную прижатую к тексту рамку окна. Предоставляя со временем все больше оформительской свободы автору страницы броузеры не могли обойти своим вниманием и этот аспект. Так, MSIE поддерживает атрибуты leftmargin н topmargin тега BODY, позволяющие устанавливать любую (в том числе нулевую и отрицательную) величину полей страницы. Однако и стандарт HTML 4.0, и броузер Netscape игнорируют эти «MSlE-only» атрибуты.
Более идеологически правильный, хотя и выходящий за рамки HTML подход - использование CSS-свойств margin-left и margin-top для тега BODY. К сожалению, незрелость реализации CSS не позволяет воспользоваться даже таким невинным трюком: дело в том, что если MSIE отмеряет поле от рамки окна, то NC принимает отправную точку то "поле по умолчанию", которое имеет место в отсутствие CSS. Поэтому, чтобы прижать содержимое страницы вплотную к левой рамке окна, в MSIE достаточно сказать <BODY style="margin- left: 0рх">, тогда как в NC вместо 0рх придется подбирать некую отрицательную величину (около -7рх).
Желание обойтись без CSS заставляет некоторых дизайнеров прибегать к еще более замысловатому трюку. Пользуясь тем, что у тега FRAME есть поддерживаемые обоими броузерами атрибуты marginwidth и marginheight, они заключают всю страницу в единственный фрейм с тем, чтобы иметь возможность точно устанавливать величину полей.
А вот теперь давайте разберемся!
Во-первых, нам известен простейший способ создания одинаковых полей (в том числе нулевых) для браузеров NN и MSIE начиная с 4-х версий. Для этого нужно, чтобы тег BODY выглядел следующим образом:
<BODY LEFTMARGIN="X" TOPMAGIN="Y" MARGINWIDTH="X" MARGINHEIGHT="Y">
Здесь X - левый отступ, а Y - верхний. Первые два атрибута понимает только MSIE, вторые два - только NN. (Opera не понимает ни тот, ни другой)
Но эти чисто визуальные атрибуты элемента BODY не входят ни в одну официальную спецификацию HTML, и их использование противоречит идеологии языка. Куда удобнее и правильнее было бы использовать CSS, ведь тогда достаточно иметь одну инструкцию в css-файле для всего сайта. Я полностью соглашаюсь с тов. Кирсановым - с помощью свойства magrin (margin-top, margin-left) невозможно создать одинаковые поля в обоих браузерах.
Тут есть один тонкий секрет!
Netscape 4.x знает, что такое CSS-позиционирование. Можно вложить
все содержимое страницы в один общий слой:
<div id="MyBody" style="position:absolute; top:0;
left:0">Содержимое страницы</div>
Но это как-то накладно. А вот если добавить такой style-атрибут к
тегу BODY - результат будет неожиданный: Explorer и Opera его игнорируют
(тут им подавай margin, а не position!), а Netscape
создает нулевые (в нашем примере) поля. Остается только привести стили
к общему знаменателю:
<style type="text/css"> body { margin-left:0px; margin-top:0px; position:absolute; top:0; left:0} </style>
Похоже, волшебное заклинание найдено!