Браузер для пользователя веб-дизайнера
Исторически сложилось, что посетители сайта пользуются разными программами просмотра веб-страниц (браузерами).
Начиналось все достаточно мирно: существовал только один браузер — NCSA Mosaic. Он был разработан Марком Андреесеном в Национальном суперкомпьютерам центре Иллинойского университета к апрелю 1993 г. Браузер умел отображать текст с гиперссылками, к следующим версиям уже поддерживал изображения и другие основные элементы, привычные в современных браузерах. (Для справки: работа над NCSA Mosaic продолжалась вплоть до 1997 года, последняя выпущенная версия — 3.0.) Однако спустя недолгое время (1994 г.) под руководством того же Андреесена компанией Netscape был разработан одноименный браузер, версии которого выпускаются до сих пор. Обладая намного большей функциональностью, он быстро завоевал популярность среди пользователей интернета, и до определенного периода был определенным лидером.
«Определенный момент» пришелся на 1997 год, когда компания Microsoft выпустила четвертую версию браузера Internet Explorer (далее IE), встроенного в операционную систему Windows, и тем самым совершила
3. |
Верстка |
Больной удар по монополизму Netscape (выход четвертой версии которого пришелся на тот же 1997 год). Вплоть до третьей версии (1996 год) IE не пользовался особой популярностью в силу ограниченной функциональности и в силу того, что слава Netscape уже была слишком велика. В четвертой версии были немного упорядочены сложные взаимоотношения со стандартами Консорциума W3C и введены некоторые новшества. Но если еще во время выхода этой версии соотношение используемых браузеров было явно не в пользу IE, то после выхода его пятой версии (1999 год) Netscape надолго ушел в забвение и использовался лишь преданными фанатами. Дело в том, что по сравнению с IE 5.0 браузер Netscape позволял верстать только очень простые страницы. Проблемы проявлялись в чтении CSS, в интерпретации ссылок в виде изображений, в нежелательном размножении фоновых изображениях таблиц по ячейкам, в ошибочных интерпретациях размеров ячеек таблиц, в принципиальном отсутствии возможности точного позиционирования объектов средствами CSS (для этого существовал специфический тэг <layer>, не поддерживавшийся другими браузерами). Один тот факт, кто IE 5.0 уже достаточно приемлемо работал с таблицами стилей, позволил снискать ему расположение многих веб-дизайнеров. Шестая (2001 год) и седьмая (2006 год) версии значительно усовершенствованы с этой точки зрения. И тут на сцену выходят еще два игрока, а именно — браузеры Mozilla и Opera. Mozilla использовал «движок» (механизм чтения и от - рисовки веб-страниц в окне браузера, Rendering Engine) под названием Gecko, который впоследствии стал основой для множества браузеров; в этот механизм были включены фрагменты кода, написанного для Mosaic. Так что генетическое родство браузеров IE, Netscape «старого» и «нового» (версии которого, начиная с 6, выходят на основе Gecko) и Mozilla прослеживается, несмотря на все различия. Браузер Opera, напротив, содержит абсолютно оригинальный код, не несущий тяжкого наследия патриархов, что позволяет ему при богатой функциональности оставаться очень компактным. Первая версия этого браузера (1993 г.) разрабатывалась для внутреннего пользования норвежской компании; с пятой версии (2000 г.) браузер стал условно-бесплатным (бесплатным при условии показа баннеров). Множество ошибок в интерпретации разметки было исправлено к версии 6 (2001 г.), но до этой версии включительно не поддерживалось абсолютное позиционирование объектов, да и вообще интерпретация CSS была весьма ограниченной. Седьмая версия (2003 г.) явилась прорывом в будущее, но только восьмая (2005 г.) по-настоящему вывела Opera на уровень браузеров, достойно поддерживающих стандарты. В девятой версии (2005 г.) исправлены некоторые мелкие ошибки; сейчас развитие браузера идет в основном по пути наращивания функциональности. На основе Gecko было разработано несколько браузеров, в частности, популярный Firefox (к выходу этой книги ожидается третья версия), |
|
206 |
Браузер для пользователя... |
3.5 |
Версии Netscape, начиная с шестой, пакет приложений SeaMonkey, браузеры K-Meleon, Flock (на основе Mozilla Firefox), Galeon и Epiphany (для Linux), Camino — бывший Chimera (для MacOS), японский Kazehakase (с поддержкой других механизмов отображения) и другие. На основе близкого к Gecko «движка» KHTML (а точнее, на основе механизма WebKit на базе KHTML) разработаны популярный в среде MacOS X браузер Safari (вероятно, к выходу этой книги он будет портирован и под Windows), совмещенный браузер и файловый менеджер Konqureror в операционной системе Linux, а также браузер Swift для Windows. На всякий случай еще можно помнить, что есть браузеры Voyager (операционная система QNX), Dillo с ограниченным функционалом, текстовые Links и Lynx, российский Ariadna без поддержки JavaScript, Net Positive для операционной системы BeOS, Amaya — фирменный браузер консорциума W3C — и множество других... По данным статистики SpyLOG, на период с 7 июня по 31 июля 2007 года процентное соотношение пользователей различных браузеров разных версий было таким: Microsoft Internet Explorer 6 — 56,2913% Microsoft Internet Explorer 7 — 13,217% Firefox 2 — 12,0777% Opera 9 — 10,0911% Firefox 1 — 2,4749% Opera 8 — 2,3043% Microsoft Internet Explorer 5 — 1,4346% Mozilla 5 — 0,5962% Mozilla 1 — 0,4993% Opera 7 — 0,4925% Браузер не был определен — 0,2212% Microsoft Internet Explorer 4 — 0,0883% Netscape Navigator 7 — 0,0634% Firefox 0 — 0,0345% Konqueror 3 — 0,0321% Opera 6 — 0,0320% Netscape Navigator 4 — 0,0258% Opera 5 — 0,0041% Не определенные браузеры на основе Gecko — 0,002% Netscape Navigator 6 — 0,0012% Galeon 2 — 0,0011% Mozilla 0 — 0,001% Netscape Navigator 3 — 0,0009% Microsoft Internet Explorer 3 — 0,0009% Firefox 3 — 0,0008% Nutscrape 1 — 0,0006% |
Konqueror 2 — 0,0002%
Galeon 1 — 0,0002%
Microsoft Internet Explorer 0 — 0,0001%
DISCo Pump 3 — 0,0001%
Konqueror b — 0,0001%
Microsoft Internet Explorer 2 — 0,0001%
Netscape Navigator 2 — 0,0001%
Вопрос первый. Что дает такое многообразие пользователю? Верный ответ: возможность выбора и возможность удовлетворить самый взыскательный вкус.
Например, браузеры Internet Explorer для Windows, Safari для MacOS X и Konqueror для Linux (с рабочим столом KDE) замечательны тем, что пользователю можно и не выбирать: за него постарались разработчики, установив браузер в операционную систему. Каждый из этих браузеров (с некоторыми оговорками, особенно Konqueror) вполне приемлемо справляется с отображением веб-страниц, сверстанных с учетом современных возможностей. (Забегая вперед, отмечу, что в силу этого факта тестировать сайт в первую очередь нужно для браузеров, установленных в системе по умолчанию.)
Из альтернативных браузеров для всех трех популярных систем распространены Mozilla Firefox и Opera. Первый удобен своей компактностью, большой расширяемостью и идеологией приложения с открытым исходным кодом, а также тем, что постоянно развивается и совершенствуется. С помощью бесплатных же надстроек можно настолько доработать этот браузер, что он будет выполнять даже несвойственные ему функции. Браузер Opera замечателен еще большей компактностью и огромным количеством уже встроенных функций (а также тем, что не менее постоянно развивается и совершенствуется), однако в свете модной тенденции использовать «опенсорсные» (с открытым исходным кодом, от Open Source) приложения Firefox лидирует.
Наконец, есть Netscape (на данный момент уже версия 8, включающая в себя «движки» Gecko и Trident — это тот, на котором основан IE — одновременно; анонсирована девятая версия) и еще ряд браузеров, которые сильно уступают вышеперечисленным в популярности.
Вырежи и сохрани
Интересна одна особенность. Opera, являясь популярным, но статистически не самым распространенным браузером (в статсводках он всегда находится после IE, Firefox и Safari), тем не менее, дает массу идей для развития интерфейса и функциональности других браузеров. Например, mdi-интерфейс (многооконная система, позволяющая открывать в одном окне
Браузер для пользователя... |
3.5 |
Браузера несколько сайтов) впервые появилась в Опере, и лишь затем перекочевала в Firefox, Safari и — лишь к седьмой версии — в Internet Explorer. Идея импорта и экспорта закладок (в терминологии IE — «Избранное»), очищения кэша, истории посещенных страниц и конфиденциальных данных также была заимствована Firefox’ом и Safari из Оперы. Встроенное средство для поиска также впервые появилось в браузере Opera... Остались мелочи: когда производители остальных браузеров сделают аналоги «корзины» для вызова случайно закрытых страниц, мгновенный кэш, управление «жестами мыши», отключение изображений в браузере и вызов настроек по одной клавише, индивидуальные настройки каждой веб-страницы, средства заметок и управление голосом, подгонку слишком широкой страницы под окно браузера, эмуляцию вида страницы для экранов карманных компьютеров, встроенные (без существенного увеличения размера программы) полноценные почтовый клиент, RSS-агрегатор, менеджер загрузок, клиент BitTorrent и некоторые другие вещи, по умолчанию существующие в Opera, и уместят это в дистрибутив размером 4 Мб, тогда можно будет про него забыть. Частично некоторые из этих функций реализованы в других браузерах (например, чтение RSS есть почти во всех современных версиях браузеров), но все вместе встречаются, только если оснастить браузер десятком надстроек. |
|
Вопрос второй. Что дает такое многообразие веб-дизайнеру? Ответ первый: постоянно опасение, что, если даже он сделает сайт, который будет работать в большинстве распространенных браузеров, то очередная версия популярного обозревателя сведет на нет многие из его усилий. Так, во многих сайтах, сверстанных не на таблицах, а на основе блоков <div>, и замечательно отображавшихся в IE 6, возникли проблемы, когда их стали тестировать в IE 7. Ответ второй: такое многообразие дает веб-дизайнеру необходимость постоянного тестирования в нескольких программах, возможность тренировать свою память запоминанием таблиц несовместимостей и бессонные ночи в попытках исправить те несовместимости, которые были открыты и запатентованы непосредственно во время работы над проектом. Рассмотрим основные моменты, на которые нужно обращать внимание при верстке веб-страниц и тестировании в различных браузерах. Первая группа отличий касается интерпретации HTML-тэгов. У всех браузеров при интерпретации блочных элементов (абзац <p>, цитата <blockquote>, заголовки <h1> и далее по ряду, блок |
|
209 |
Верстка |
|
<div>, форма <form> и т. п.) и таблиц сильно различаются точные значения отступов и интерлиньяжа (так что для достижения максимальной схожести облика текста нужно применять CSS-поправку: значения margin, padding и line-height; следует, однако, учитывать, что старыми браузерами эти поправки будут игнорироваться или трактоваться неточно). Элемент <hr> (в стиле XHTML — <hr />) в каждом браузере выглядит по-разному, так как производители разных браузеров по-разному имитируют объемность. Чтобы осталась простая горизонтальная черта без имитации объема, стоит писать комплекс <hr size="1" color="black" noshade> (в стиле XHTML — <hr size="1" color="black" noshade="noshade" />) либо использовать средства CSS. Разные размеры и разный внешний у элементов <input> различных типов; к единообразию их можно привести при помощи CSS (в IE, начиная с версии 5, в Netscape с версии 6 и Opera с версии 7). Подчеркивание ссылок загадочно ведет себя в разных версиях разных браузеров: то появляется, то пропадает (вопреки стилевым указаниям), особенно если в стилевых таблицах разные классы ссылок то имеют, то не имеют подчеркивание. В частности, этому подвержен браузер Opera 6. Тэги <layer> (позиционируемые слои) и <blink> (мигающий текст) поддерживается только Netscape 4 и поздними в порядке обратной совместимости. Тэги <bgsound> (фоновый звук) и <marquee> (бегущая строка) поддерживаются браузером Internet Explorer; тэг бегущей строки в старых браузерах игнорируется, но в современных Gecko-браузерах и Opera он уже поддерживается, хотя и не в чести у веб-дизайнеров. Поддержка тэга <iframe> (плавающий фрейм) отсутствовала в четвертой версии Netscape. Тэги <button> (кнопка без отправки запроса, в отличие от <input type="submit" />) <fieldset> (набор полей в форме) также сравнительно свежие. Это говорит о том, что, если есть вероятность просмотра сайта в старых версиях браузеров, то для тэгов <iframe> и <button> следует придумать замену или имитацию (так, <layer> в Netscape 4 по функциональности очень похож на <iframe>). Маркеры элементов ненумерованного списка (тэг <li>) в разных браузерах выглядят то как кружки, то как квадраты, то как ромбы; отступы смысловой части слева тоже различные. CSS и это исправит. Вторая группа разночтений — это особенности в интерпретации параметров тэгов. Так, различные браузеры по-разному справляются с чтением размеров ячеек таблицы. Допустим, нам нужна таблица с тремя колонками, левая и права из которых занимают каждая ширину, равную двумстам |
|
210 |
Браузер для пользователя... |
3.5 |
Пикселям. Ширина самой таблицы при этом равна ширине рабочей области окна браузера, то есть <table width="100%">. Естественно, что среднюю ячейку приходится оставлять без указания размеров, потому что экраны у всех разные, и мы смело надеемся на то, что браузер сам все посчитает. В Opera 6 и Netscape 4, а также некоторых других браузерах при таких указаниях окажется, что боковые колонки слегка разъедутся, и их ширина будет произвольной, но более двухсот пикселей. (В качестве решения, идущего вразрез со здравым смыслом, но действительно помогающим, можно использовать такое: приготовить прозрачный файл в формате GIF размером 1 на 1 пиксель и поставить его в боковые колонки в виде распорки, задав ширину в 200 пикселей, чтобы ширина не оказалась уже, а средней колонке задать непропорционально большую ширину, например, 3000px (в указаниях размеров в HTML и CSS единицы измерения пишутся после чисел без пробелов) — в этом случае средняя колонка растянется максимально и будет равна ширине рабочей области окна браузера минус 400 пикселей, тогда как боковые будут фиксированной ширины). Изредка нужно, чтобы таблица занимала 100% окна по высоте: например, чтобы отцентрировать какой-нибудь элемент (единственный на веб-странице) по вертикали — форму для поиска, загрузочное изображение, рекламу. Простое <table height="100%"> поможет только в части браузеров — там, где высота элемента body расценивается как видимая часть рабочей области окна браузера; в Opera же высота body — это высота совокупности высот элементов на странице. Поэтому элементы все равно будут группироваться вверху. Выход в том, чтобы в таблице стиле задать для body высоту: body {height:100%}. Как видим, опять CSS — панацея от бед HTML и неосмотрительности создателей браузеров. Модемные соединения еще не ушли в прошлое; это значит, что многие пользователи экономят трафик и отключают загрузку изображений на веб-страницах. В этом случае, если размеры у изображений заданы явно, то Internet Explorer отобразит прямоугольники с пиктограммой изображения, тогда как Firefox отобразит только альтернативные надписи, а Opera условное пространство под изображение, не совпадающее с указанными размерами. Если изображения — это иллюстрации, то это не так страшно. Но очень часто дизайнеры и верстальщики используют графику как строительный материал, на основе которого строится композиция страницы. Естественно, что при потере графикой указанных размеров композиция рушится. Сохранить ее можно несложным способом: для ячеек таблицы или блоков нужно прописывать высоту и ширину (или один, принципиальный для верстки параметр), совпадающие с высотой и шириной включаемого изображения, а также указывать параметры align и valign (если используются средства CSS, то text - align и vertical-align), чтобы альтернативный текст располагался в нужном месте ячейки или блока. |
Еще одна проблема связана с отступами содержимого от края вебстраницы. Если есть возможность серверных включений (т. е. вы используете SSI или PHP и другие языки серверных сценариев), то имеет смысл повторять весь кусок кода до изменяющегося содержимого (т. е. после <body с параметрами> и разных навигационных меню и заставок) в отдельном файле, меняя в нем только заголовки с помощью переменных, а во всех остальных файлах делать в нужном месте включение этого файла. В этом случае достаточно только в одном файле написать <body marginheight="0" marginwidth="0" topmargin="0" leftmargin="0" rightmargin="0" botommargin="0"> с нужными числовыми значениями, чтобы все работало как надо (свойства marginheight и marginwidth работают в Netscape, прочие в остальных браузерах). Если же возможности серверных включений нет, то приходится прибегать ко включаемым файлам стилевой разметки (CSS), потому что есть вероятность, что один или несколько параметров нужно будет изменить, а файлов, где нужно внести это изменение — около сотни... В файле CSS просто пишем строчку:
Body {padding:0px; margin:0px]
В этом случае совместимость будет и с Opera (поддерживающей свойство padding для данной задачи), и с остальными браузерами, где работает свойство margin. Чтобы обеспечить полную совместимость, следует использовать вместе и CSS-, и HTML-методы.
Абсолютно все браузеры отображают элементы форм и связанные с формами отступы по-разному. Причем дело касается не только разных браузеров, но и разных версий одного и того же браузера. Особенные проблемы возникают, если вы пытаетесь поставить форму поиска в тесную композицию, где большие отступы нежелательны. Например, Explorer 6 отобразит одинаковые отступы сверху и снизу формы, Netscape 6 отобразит нижний отступ (до следующего элемента), а верхний отступ будет почти незаметен (или равен высоте интервала между строками в абзаце), Opera 6 и 7 будут отображать очень маленькие отступы, также равные высоте интервала между строками в абзаце.
Так в браузерах под Win (IE, FF, Opera etc.| |
Поиск на сайте |
А так в Safari под Мае Поиск на сайте |
Сами цвета и размеры всех элементов форм (кроме <input type="hidden" />) во всех браузерах разные, и не все из них можно редактировать с помощью стилевых таблиц. Если, например, фон элементов <option> списка <select> в новых браузерах можно залить каким-то цветом, кроме белого, то в Opera 6 нельзя. Safari — очень элегантный браузер. Он даже умеет расставлять переносы в тексте, если его хорошо попросишь. Но вот вид кнопок на веб-страницах он не позволяет редактировать (да и другие
Браузер для пользователя... |
3.5 |
Элементы форм). Apple-разработчики слишком дорожат внешним видом кнопок в стиле Aqua. Есть еще некоторые мелочи. Например, в более или менее длинном списке <select> в IE будет возникать полоса прокрутки, а в других браузерах нет. А если поставить рядом две и более последовательности <button>кнопок</button>, то в IE между ними не будут возникать пробелы, а в других браузерах будут. А в старых браузерах этот тэг вообще будет игнорироваться. В тэге <link> обязательным является параметр href, задающий связи с внешними файлами. Браузер Netscape 4 вместо параметра href использует src; для кроссбраузерности без использования серверных технологий в тэг можно добавлять оба параметра (но с точки зрения чистоты кода это неправильно). Если ссылка является изображением, то при наведении мыши всплывающей подсказкой в Internet Explorer будет содержимое параметра alt тэга <img />, в N etscape и Opera — содержимое параметра title тэга <a>, а если такового нет, то седьмая Opera будет показывать URL, на который ведет ссылка. В качестве выхода можно (например, с помощью сценария, чтобы не писать вручную) прописывать одинаковое содержимое для параметра alt тэга <img> и параметра title тэга <a>. Во всех браузерах есть более или менее существенные различия отображения блочных и линейных элементов в кегле (размере) и гарнитуре (начертании) текста, интерлиньяже, отступах внутри элемента и отступах от других элементах, цвете, стилях (курсивный, полужирный, подчеркнутый и т. п.) и других параметрах. Практически все эти различия в современных браузерах (IE с версий 4, желательно 5, Netscape с версии 6, Opera с версии 7, отчасти 6, максимально в 8, Firefox, Safari, SeaMonkey и Konqueror любых версий) можно свести к минимуму средствами CSS. Однако с интерпретацией CSS в различных браузерах тоже не все гладко; эти проблемы составляют третью группу. Самое больное место среди отображения стилевых директив — это границы и доступ к объектам. В четвертом Netscape вообще невозможно разнообразить цвета и тип линий границ элементов при помощи стилевых таблиц. Пятый IE не всегда воспринимает пунктирные и штриховые линии. В шестой (и седьмой) Opera поддержка таких директив более стабильна, чем в пятом IE. Если вы задали цвета и стили границ таблицы (или ячейки), но не поставили никакого содержимого, то в некоторых браузерах эти границы не будут отображаться; нужно либо поставить неразрывный пробел, либо однопиксельный прозрачный GIF-рисунок. Возможно, вы решили создать вертикальные линии при помощи ячеек таблиц, залитых цветом при помощи CSS или HTML: если в этих ячейках не будет содержимого, то в Netscape и в некоторых случаях в Opera 6 они вообще не будут отображаться, если цвета заданы при помощи CSS. Наиболее корректная поддержка стилевых директив |
3. |
Верстка |
Проведена в IE 5 и выше, в Netscape 6 и выше и в Opera 7 и позже, а также в Safari и прочих Gecko - и KHTML-базированных браузерах. Под доступом к объектам имеется в виду вот что: какие свойства каких объектов можно задавать с помощью CSS. Например, фон страницы. Поскольку при точном позиционировании фонового изображения есть center, который отвечает за вертикальное размещение, и есть center, отвечающий за горизонтальное, то Internet Explorer 4 их просто путает и может начать отображать фон с середины страницы по вертикали, разрезав ее на верхнюю и нижнюю половинки, вместо того чтобы разместить фон по центру. В разных браузерах фон то способен оставаться на месте с прокруткой содержимого, то не способен. Только в IE версий 5 и позже есть практически полный контроль над элементами форм (цвета, размеры, но не всегда отступы), тогда как хуже всего он в Opera 6 и ниже и Netscape 4. Только в IE начиная с версии 5.5 и Opera 8+ есть контроль над цветом полосы прокрутки (не только боковой, для всей страницы, но и для элементов типа <iframe>), что, несомненно, удобно для дизайнеров, так как позволяет обеспечить максимальную цветовую совместимость элементов на странице. Контроль вида текстовых ссылок (вид и наличие подчеркивания, цвета) есть почти во браузерах, но в Netscape только начиная с версии 6, а в Opera полноценно — с версии 7, т. к. до этого была частичная поддержка свойств, и цвета приходилось задавать в <body>. Псевдокласс :hover для определения вида ссылки при наведении на нее курсора работает в Netscape только с 6 версии, а в 4-м игнорируется. В Opera 6 при наличии нескольких классов для ссылок браузер иногда начинает «путать» эти классы. Особого упоминания при разговоре о совместимости свойств CSS заслуживает возможность точного позиционирования объектов на странице. В Netscape 4 она реализована при помощи тэга <layer top=... left=...>, в остальных его версиях и в остальных браузерах с 4-5 версий — при помощи тэга <div> и стилевых директив (div style="position:absolute; left:30px; top:100px"). В первом случае объект может позиционироваться только абсолютно (и здесь не идет речь о стилях, здесь авторский HTML от компании Netscape; кстати, внутрь этого тэга можно было вставлять целый отдельный документ, т. е. это аналогия SSI). Во втором — и абсолютно (т. е. относительно края страницы), и относительно другого (родительского или соседнего) объекта. Для Internet Explorer возможность такого позиционирования (с 4 версии; в Opera начиная с версии 7) достаточно удобна в силу того, что позволяет отказаться от вложенных таблиц как средства верстки. Есть особый вид позиционирования (position:fixed), который позволяет элементу оставаться на одном месте относительно окна браузера (а не края документа) при прокрутке длинного документа; это дает возможность располагать в таких элементах меню и прочие нужные вещи без помощи длинных сценариев. Этот вид позиционирования есть |
|
214 |
Браузер для пользователя... |
3.5 |
В Opera и Netscape с 6-х версий, а в Internet Explorer нужно прибегать к трюку, полноценно имитирующему такое поведение элементов. Полностью стилевые указания для блока (на его месте может быть любой элемент, способный быть точно позиционированным) звучат так: <div style="width: 200px; height:100px; position: fixed; top: 100px; left:200; //position: absolute; top: expression(document. getElementsByTagName( 'body' )[0].scrollTop < 850 ? 100 + document. getElementsBy TagName('body')[0].scrollTop : '' + 'px'); z-index: 1000">Текст<^^> Важно также в стилях написать: body {background: url ('1.gif') no-repeat; background-attachment: fixed} (вместо 1.gif может быть любая фоновая картинка, в данном случае прозрачная). Это, как ни странно, влияет на то, чтобы в Internet Explorer не было «дрожания» блока при прокрутке страницы. В IE 7 позиционирование position:fixed работает и без таких ухищрений. Четвертую группу составляют различия в интерпретации объектной модели документа (DOM, или Document Object Model). В целом стоит сказать, что теоретически с помощью языков активных сценариев можно получить доступ к любому свойству любого элемента страницы. На деле не все так радужно. В частности, браузеры 4-го поколения и Opera 6 фактически не позволяли изменять (и даже проверять) свойства форм и их элементов. Со свойствами точного позиционирования тоже были сильные проблемы. Не были доступны все типы линий и все параметры расположения фонового изображения. Нельзя было строить при помощи DOM новые элементы на странице (правда, Internet Explorer 4.0 уже был способен на это, но вразрез со спецификацией W3C, при помощи собственных технологий), а новые свойств существующих элементов можно было определять очень ограниченно. Фактически, полноценная поддержка DOM появилась в IE с 5-й версии, в Netscape с 6-й (когда он «перешел» на Gecko; соответственно, более или менее последовательная реализация объектной модели документа есть во всех Gecko - и KHTML-браузерах), в Opera становление полноценной поддержки произошло где-то в промежутке между 7 и 8 версиями (на заметку: с 1 по 3 версию использовался малофункциональный оригинальный «движок», с 4 версии «движок» Electra, с седьмой версии Presto, с девятой версии Merlin; размер установочных файлов увеличивается несущественно, но функциональность прибавляется). Доступ к элементам в IE 4 версии и выше осуществляется при помощи следующей директивы: document. all["id элемен - та"].style. свойство="значение" (или просто id элемента. |
Style. свойство="значение"), в более поздних версиях при сохранении поддержки этой директивы используется и другая, отвечающая концепции объектной модели: document. getElementById('id_ элемента').style. свойство="значение". В 6-й и более поздних версиях Netscape и прочих Gecko-браузера используется вторая возможность. Естественно, в тэге элемента, к которому обращается сценарий, должно стоять что-то типа id="имя". В Opera 6 и позже используются обе возможности. В Netscape 4 обращение идет следующей директивой: document. layers. name элемента^оситеп^
Свойство="значение". При этом элемент должен быть заключен в тэг <layer пате="имя">...<1ауег>.
Обращаться можно к тем элементам, изменение свойств которых допущено реализацией CSS в данном браузере.
Доступ к содержимому слоя производится аналогично, с помощью свойства innerHTML: в первых случаях document. all["id_элемен - Ta"].innerHTML = текст, id элемента. innerHTML = текст и document. getElementById("id элемента").innerHTML = текст с теми же правилами распределения по браузерам, а в Netscape 4 более сложной конструкцией:
Document. layers. name элемента^оситеп^ореп(); document. layers. name элемента. document. write("текст");
Document. layers. name элемента. document. close();
Впрочем, написание отдельного фрагмента кода для Netscape 4 — это перебор, учитывая, что им сейчас пользуются единицы. Впрочем, все же наличие такого фрагмента говорит только о добросовестности программиста и верстальщика. В этом случае логичнее использовать схему серверного определения браузера и работы с ним.
Схема действительно невероятно логичная, требует не так уж много затрат и оправдывает себя тем, что пользователи думают, что сайт написан специально для их любимого браузера. Не секрет, что браузер, с помощью которого была запрошена страница, можно определить нехитрой эвристикой не только с помощью JavaScript^, но и при помощи серверных языков программирования (Perl, PHP, Parser и другие). А поскольку с помощью таких языков можно формировать страницы динамически, достаточно построить следующий алгоритм:
1. Производится выяснение браузера пользователя: анализируется переменная $HTTP_USER_AGENT как строка, выясняется наличие в ней стратегически важных слов (Opera, MSIE, Netscape, Gecko, Firefox, KHTML, SeaMonkey, Safari, Lynx, K-Meleon и других), номеров версий и названий платформ (операционных