Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Особенности описания фреймовых структур

Фреймы

Фреймы позволяют разбить окно просмотра браузера на несколько прямоугольных подобластей, располагающихся рядом друг с другом. В каждую из подобластей можно загрузить отдельный HTML-документ, просмотр которого осуществляется независимо от других. Между фреймами, также как и между отдельными окнами браузера, при необходимости можно организовать взаимодействие, которое заключается в том, что выбор ссылки в одном из фреймов может привести к загрузке нужного документа в другой фрейм или окно браузера.

Возможность работы с фреймами впервые была реализована в браузере Netscape 2.O. Следующая версия браузера Netscape 3.0 обогатила возможности фреймов, добавив несколько дополнительных параметров к основным тэгам описания структуры фреймов. Браузер Microsoft Internet Explorer поддерживает фреймы, начиная с версии 3.0, а также предоставляет уникальную возможность создания плавающих фреймов.

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

Сферы применения фреймов

Разработчикам HTML-документов предоставляется довольно богатый выбор форм отображения информации на страницах. Текстовая и графическая информация может быть упорядочена и организована при помощи списков, таблиц или просто с помощью параметров выравнивания, задания горизонтальных линий, разделения на абзацы. Иногда этих возможностей оказывается недостаточно и тогда приходится разбивать окно просмотра браузера на отдельные области или фреймы (frames). В ряде русскоязычных описаний языка HTML вместо термина фреймы используется термин кадры. Частота использования обоих терминов примерно одинакова.

Выбор фреймовой структуры отображения информации на WWW оправдан в следующих случаях:

  • при необходимости организовать управление загрузкой документов в одну из подобластей окна просмотра браузера при работе в другой подобласти;

 

  • для расположения в определенном месте окна просмотра информации, которая должна постоянно находиться на экране вне зависимости от содержания других подобластей экрана;

 

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

Приведенный список не исчерпывает все возможные случаи, где можно применить фреймы, а носит рекомендательный характер.

Рассмотрим сначала типичные варианты использования фреймов на примерах реально существующих HTML-документов, а затем обратимся к правилам разработки документов, содержащих фреймы.

На рис. 5.1 показана одна из HTML-страниц агентства "Финмаркет", специализирующегося на предоставлении информации с финансовых и фондовых рынков России.

Рис. 5.1. Типичный Web-документ с фреймовой структурой

На этой странице окно браузера разбивается на три фрейма. Нижняя часть окна занимает 20% высоты всего окна и содержит постоянную информацию, которая в данном случае представляет собой графическое меню, позволяющее в любой момент обратиться к наиболее важным разделам. Этот фрейм не может изменять своих размеров по командам пользователя и не имеет полос прокрутки. Верхняя часть окна (составляющая 80% высоты) разделена по горизонтали на два фрейма. Левый фрейм содержит оглавление документов, которые могут быть просмотрены пользователем. Правый фрейм, занимающий большую часть окна просмотра, предназначен для отображения самих документов. При первоначальной загрузке эти два фрейма делят окно браузера по горизонтали в соотношении 15% на 85%. Это соотношение может изменяться пользователем при просмотре, что позволяет выбрать оптимальные размеры фреймов с учетом содержимого загруженных документов. Каждый из этих фреймов имеет свою полосу прокрутки, обеспечивающую возможность просмотра всего содержимого фрейма вне зависимости от размера самого фрейма, всего окна браузера и используемых шрифтов. При выборе любой ссылки в левом фрейме соответствующий документ будет загружен в правый фрейм. Такая структура позволяет одновременно видеть на экране и оглавление документов, и содержимое выбранного документа.

Приведем без пояснений фрагмент HTML-кода, по которому построен документ с данной структурой:

<FRAMESET ROWS="80%,20%">

<FRAMESET COLS="15%, 85%">

<FRAME SRC="LIST.htm">

<FRAME scrolling=auto SRC="empty.htm" name="pages">

</FRAMESET>

<FRAME SRC = "toolbar.html" scrolling=noresize>

</FRAMESET>

Данный пример показывает наиболее типичное использование фреймовых структур, когда один фрейм служит оглавлением документов, а другой используется для загрузки их содержимого. Решение такой задачи без применения фреймов обычно выполняется следующим образом. На одной из страниц располагают оглавление, состоящее из ссылок на другие документы или их отдельные фрагменты. При переходе по такой ссылке оглавление исчезает, а на его место загружается нужный документ, после прочтения которого обычно необходимо вновь вернуться к оглавлению. При использовании фреймов такой возврат становится ненужным, так как оглавление постоянно располагается на части экрана.

В интернете можно найти сайт электронного издания популярного в Санкт-Петербурге адресно-телефонного справочника "Весь Петербург".

Электронная версия справочника доступна по адресу http://www.allpetersburg.ru и позволяет находить нужные сведения по запросам пользователя. Данная страница документа также имеет фреймовую структуру и состоит из двух фреймов, причем первый из них имеет ширину 100 пикселов, а второй занимает всю оставшуюся ширину окна просмотра. Фрейм, расположенный с левой стороны, используется для графического меню, постоянно присутствующего на экране, а также содержит логотип компании "Nevalink". Второй фрейм содержит документ, который в данном случае представляет собой форму для запроса пользователя. Структура этой страницы определена следующим HTML-кодом:

<FRAMESET COLS="100,*" frameborder="0" framespacing="0" border="0">

<FRAME NAME="Menu window" SRC="menu.htm" noresize>

<FRAME NAME=content SRC="sql.idc" noresize>

</FRAMESET>

Фреймы очень похожи на таблицы — и те и другие осуществляют разбиение окна просмотра браузера на прямоугольные области, в которых располагается некоторая информация. Однако при помощи фреймов можно решить не только задачу форматирования страниц документа, но организовать взаимодействие между ними. Принципиальная разница между фреймами и таблицами состоит в том, что каждому фрейму должен соответствовать отдельный HTML-документ, а содержимое всех ячеек таблицы всегда является частью одного документа. Кроме того, отображаемая во фрейме страница может прокручиваться при просмотре независимо от других. Каждый фрейм по существу является отдельным "мини-браузером". В отличие от фреймов, вся структура которых всегда представлена на экране, таблицы могут полностью не помещаться в окне и быть просмотрены только по частям. Отсюда следует вывод, что если в HTML-таблицах общее число ячеек практически не ограничено и может достигать нескольких сотен, то число фреймов в документе обычно не превосходит нескольких единиц.

Совет

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

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

Существуют также страницы, которые с виду построена аналогично предыдущим. Для примера можно взять страницуочень популярного во всем мире сборника программных продуктов, предназначенных в основном для работы с Интернетом. Адрес сервера http://www.tucows.com. Заметим, что имя сервера определила аббревиатура, полученная от сокращения полного названия сборника — The Ultimate Collection of Winsock Software. Поскольку сокращение tucows оказалось созвучным словосочетанию two cows (две коровы), то на страницах сервера сплошь и рядом встречается изображение коров, а рейтинг программных продуктов оценивается в количестве мычаний ("Моо") и графически изображается в виде ряда из соответствующего числа коров. Большинство страниц сервера построено однотипно — в левой части окна приводится список доступных разделов, а в правой части — перечень программных продуктов выбранного раздела. На первый взгляд структура документа должна иметь примерно такой же вид, как и в предыдущих примерах. Однако в этом документе фреймы не используются! Данная страница построена при помощи таблицы, которая состоит всего лишь из одной строки с двумя ячейками. Таблица не имеет обрамления и лишь преследует цель форматирования страницы. Впечатление разделения экрана на две части по вертикали создано путем использования фонового графического изображения, содержащего вертикальную линию, а вовсе не сеткой таблицы. В этом можно убедиться, если выполнять просмотр страницы без загрузки изображений. Использование таблицы здесь, видимо, обусловлено соображениями большей доступности документов, поскольку фреймы позволяют отображать не все браузеры.

Недостатком такого подхода в данном случае является необходимость повторения в каждом документе всего списка разделов (левая часть страницы), что незначительно увеличивает размер файлов.

Сравнение приведенных примеров показывает, что использование таблиц и фреймов может иногда быть взаимозаменяемым и определяется пожеланиями разработчиков. Заметим, что часто при взгляде на страницу с отображенным на ней документом невозможно определить, как она построена. Конечному пользователю знание внутренней структуры документа не требуется, однако при разработке собственных Web-страниц ознакомление с исходным кодом существующих документов было бы крайне полезно. В первом примере (см. рис. 5.1) фреймовая структура документа сразу же видна — наличие двух вертикальных полос прокрутки уже определяет присутствие отдельных фреймов. Последующие два примера внешне очень схожи, причем невозможно определить, что первый из них построен с помощью фреймов, а второй — с помощью таблиц. Отличия будут проявляться только при работе с ними. В примере адресно-телефонного справочника при прокрутке документа левая часть окна будет оставаться на месте, что возможно только при наличии фреймовой структуры. В следующем примере (сборника программных продуктов) при прокрутке будет смещаться все содержимое окна.

Посмотреть структуру документа при работе с браузером Netscape можно воспользовавшись пунктом Page Info (в версиях 3.x браузера Netscape этот пункт меню назывался Document Info) меню View (рис. 5.2).

Рис. 5.2. Меню View браузера Netscape

Кроме того, всегда можно ознакомиться с исходным HTML-кодом всего документа, воспользовавшись пунктом Page Source меню View (или пунктом View Frame Source контекстного меню, вызываемого правой кнопкой мыши, для просмотра HTML-кода документа, загруженного в выбранный фрейм).

Совет

Не следует без необходимости злоупотреблять использованием фреймов, причем их количество не должно превосходить трех-четырех.

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

Все приведенные примеры данного раздела взяты со страниц популярных WWW-серверов и, пожалуй, могут служить образцами применения фреймов в HTML-документах.

Последующие разделы данной главы посвящены правилам записи документов, содержащих фреймы.

Правила описания фреймов

Перейдем теперь к рассмотрению правил записи тэгов, используемых для документов с фреймовыми структурами.

Давайте для начала рассмотрим полный HTML-код, создающий документ с фреймами средней сложности:

<HTML>

<HEAD>

<TITLE> </TITLE>

</HEAD>

<FRAMESET ROWS="25%,50%,25%">

<FRAME SRC="header.htm">

<FRAMESET COLS="25%,75%">

<FRAME SRC="list.htm">

<FRAME SRC="info.htm">

</FRAMESET>

<FRAME SRC="footer.htm">

</FRAMESET>

<NOFRAMES>

Ваш браузер не может отображать фреймы

</NOFRAMES>

</HTML>

Этот пример создает страницу с фреймами, показанную на рис. 5.3. Как вы видите, этот HTML-код определяет четыре фрейма. Верхний фрейм занимает всю ширину страницы и содержит заголовок. Далее идут два центральных фрейма, один из которых расположен с левой стороны и занимает 25 процентов от ширины экрана, а второй занимает оставшееся место. Последний, четвертый фрейм занимает нижнюю четверть экрана. В каждый из фреймов загружается отдельный HTML-документ, имя которого определяется параметром SRC.

Как видно из примера, для описания структуры фреймов применяются теги <FRAMESET>, <FRAME> и <NOFRAMES>. Рассмотрим назначение этих тэгов.

Рис. 5.3. Результат отображения браузером Netscape HTML-документа с фреймами, приведенного в примере

Тэг <FRAMESET>

Фреймы определяются в структуре, называемой FRAMESET, которая используется для страниц, содержащих фреймы, вместо раздела BODY обычного документа. Web-страницы, составленные из фреймов, не могут содержать раздел BODY в своем HTML-коде. В свою очередь, страницы с разделом BODY не могут использовать фреймы.

Совет

Так как для страниц с фреймами не применяется раздел BODY, то нет возможности задать фоновое изображение и цвет фона для всей страницы в целом. Напомним, что эти установки определяются параметрами BACKGROUND и BGCOLOR, записываемыми в тэге BODY. Однако это не мешает в каждый фрейм загружать документы, имеющие свои параметры фона.

Контейнер из тегов <FRAMESET> и </FRAMESET> обрамляет каждый блок определений фрейма. Внутри контейнера <FRAMESET> могут содержаться только тэги <FRAME> и вложенные теги <FRAMESET>.

Тэг <FRAMESET> имеет два параметра: ROWS (строки) и COLS (столбцы) и записывается в следующем виде:

<FRAMESET ROWS="список_значений" COLS="список_значений">.

Примечание

Некоторые браузеры разрешают использовать дополнительные параметры тега <FRAMESET>. Обзор возможностей браузеров Netscape и Microsoft Internet Explorer дается в конце главы.

Можно определить значения для ROWS или COLS, или обоих вместе. Необходимо определить, по меньшей мере, два значения хотя бы одного из этих параметров. Если другой параметр опущен, то его значение принимается равным 100%.

Совет

Если в тэге <FRAMESET> определено только одно значение для ROWS и COLS, то этот тег будет считаться ошибочным и браузер проигнорирует его. Другими словами, нельзя определить <FRAMESET>, состоящий только из одного фрейма.

Список значений параметров ROWS и COLS тега <FRAMESET> представляет собой разделенный запятыми список значений, которые могут задаваться в пикселах, в процентах или в относительных единицах. Число строк или столбцов определяется числом значений в соответствующем списке. Например, запись

<FRAMESET ROWS="100,240,140">

определяет набор трех фреймов. Эти значения представляют собой абсолютные значения в пикселах. Другими словами, первый фрейм (первая строка) имеет высоту 100 пикселов, второй — 240 и последний — 140 пикселов.

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

<FRAMESET ROWS="25%,50%,25%">.

В этом примере создаются три фрейма, размещаемые как строки во всю ширину экрана. Верхняя строка займет 25 процентов от доступной высоты экрана, средняя строка — 50 процентов и нижняя — 25 процентов. Если сумма заданных процентов не равна 100%, то значения будут пропорционально отмасштабированы, чтобы в итоге получилось ровно 100%.

Значения в относительных единицах выглядят следующим образом:

<FRAMESET COLS="*,2*,3*">.

Звездочка (*) используется для пропорционального деления пространства. Каждая звездочка представляет собой одну часть целого. Складывая все значения чисел, стоящих у звездочек (если число опущено, то подразумевается единица), получим знаменатель дроби. В этом примере первый столбец займет 1/6 часть от общей ширины окна, второй столбец — 2/6 (или 1/3), а последний — 3/6 (или 1/2).

Помните, что числовое значение без каких-либо символов определяет абсолютное число пикселов для строки или колонки. Значение со знаком процента (%) определяет долю от общей ширины (для COLS) или высоты (для ROWS) от окна просмотра, а значение со звездочкой (*) задает пропорциональное распределение оставшегося пространства.

Приведем пример, использующий все три варианта задания значений:

<FRAMESET COLS="100,25%,*,2*">.

В этом примере первый столбец будет иметь ширину 100 пикселов. Второй столбец займет 25 процентов от всей ширины окна просмотра, третий столбец — 1/3 оставшегося пространства и, наконец, последний столбец — 2/3. Абсолютные значения рекомендуется назначать первыми по порядку слева направо. За ними следуют процентные значения от общего размера пространства. В заключение записываются значения, определяющие пропорциональное разбиение оставшегося пространства.

Совет

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

Если используется тег <FRAMESET>, в котором заданы значения и COLS, и ROWS, то будет создана сетка из фреймов. Например:

<FRAMESET ROWS="*,2*,*" COLS="2*,*">

Эта строка HTML-кода создает сетку фреймов с тремя строками и двумя столбцами. Первая и последняя строки занимают 1/4 высоты каждая, а средняя строка — половину. Первый столбец занимает 2/3 ширины, а второй - 1/3.

Контейнер <FRAMESET> </FRAMESET> может быть вложен внутрь другого такого же контейнера, как это было показано в начальном примере. Рассмотрим далее использование тега <FRAME>.

Примечание

В некоторых источниках по языку HTML указывается, что параметры COLS и ROWS тега <FRAMESET> являются взаимоисключающими. Однако и Netscape, и Microsoft Internet Explorer допускают их совместное использование.

Тэг <FRAME>

Тэг <FRAME> определяет одиночный фрейм. Он должен располагаться внутри пары тегов <FRAMESET> и </FRAMESET>. Например:

<FRAMESET ROWS="*,2*">

<FRAME>

<FRAME>

</FRAMESET>

Обратите внимание, что тег <FRAME> не является контейнером и в отличие от <FRAMESET> не имеет завершающего тэга. Все определение одиночного фрейма выполняется одной строчкой HTML-кода.

Необходимо записать столько тегов <FRAME>, сколько отдельных фреймов определено при задании тега <FRAMESET>. В предыдущем примере тэгом <FRAMESET> задано две строки, поэтому потребовалось записать два тега <FRAME>. Однако этот пример, по существу, бесполезен, так как ни один из фреймов не имеет какого-либо содержания!

Тэг <FRAME> имеет шесть параметров: SRC, NAME, MARGINWIDTH, MARGINHEIGHT, SCROLLING и NORESIZE.

Примечание

Некоторые браузеры разрешают использовать ряд дополнительных параметров тега <FRAME>. Обзор возможностей браузеров Netscape и Microsoft Internet Explorer дается в конце главы.

Приведем запись тега <FRAME> со всеми параметрами:

<FRAME SRC="url" NAME="window_name" SCROLLING=YES|NO|AUTO

MARGINWIDTH="value" MARGINHEIGHT="value" NORESIZE>

На практике в тэге <FRAME> редко используются одновременно все параметры.

Наиболее важный параметр — SRC (сокращение от слова source). Довольно часто в тэге <FRAME> задается единственный параметр SRC. Например:

<FRAME SRC="url">.

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

<FRAME SRC="sample.htm">.

Обратите внимание, что любой HTML-файл, заданный в описании фрейма, должен быть полным HTML-документом, а не фрагментом. Это означает, что документ должен иметь теги HTML, HEAD, BODY и т. д.

Конечно, в качестве значения SRC может быть задан любой допустимый URL-адрес. Если, например, фрейм используется для отображения изображения в формате GIF, которое располагается на сервере издательства данной книги, то следует записать:

<FRAME SRC="http://www.bhv.ru/example.gif">.

Совет

He задавайте в документе, описывающем структуру фреймов, никакого содержания.

Обычный текст, заголовки, графические изображения и другие элементы не могут прямо использоваться в документе, который описывает структуру фреймов. Все содержание фреймов должно быть определено в отдельных HTML-файлах, имена которых задаются параметром SRC тега <FRAME>.

Параметр NAME определяет имя фрейма, которое может использоваться для ссылки к данному фрейму. Обычно ссылка задается из другого фрейма, располагающегося на той же самой странице. Например:

<FRAME SRC="sample.htm" NAME="Frame_1">.

Такая запись создает фрейм с именем "Frame_1", на который может быть выполнена ссылка. Например:

<A HREF="other.htm" TARGET="Frame_1">Щелкните здесь для загрузки

документа other.htm во фрейм с именем Frame_1</A>.

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

Параметры MARGINWIDTH и MARGINHEIGHT дают возможность устанавливать ширину полей фрейма. Записывается это следующим образом:

MARGINWIDTH="value",

где "value" — абсолютное значение в пикселах. Например:

<FRAME MARGINHEIGHT= "5" MARGINWIDTH= "7">.

Данный фрейм имеет поля сверху и снизу по 5 пикселов, а слева и справа — по 7 пикселов. Не забудьте, что здесь идет речь о полях, а не о рамках. Параметры MARGINWIDTH и MARGINHEIGHT определяют пространство внутри фрей-ма, в пределах которого не будет располагаться никакая информация. Минимально допустимое значение этих параметров равно единице.

Для фреймов будут автоматически создаваться и отображаться полосы прокрутки, если содержимое фрейма не помещается полностью в отведенном пространстве. Иногда это нарушает дизайн страницы, поэтому было бы удобно иметь возможность управлять отображением полос прокрутки. Для этих целей используется параметр SCROLLING. Формат записи:

<FRAME SCROLLING="YES|NO|AUTO">.

Параметр SCROLLING может принимать три значения: YES, NO или AUTO. Значение AUTO действует так же, как и в случае отсутствия параметра SCROLLING. Значение YES вызывает появление полос прокрутки вне зависимости от необходимости этого, a NO — запрещает их появление. Например:

<FRAME SCROLLING=YES>.

Обычно пользователь может изменять размер фреймов при просмотре страницы. Если установить курсор мыши на рамке фрейма, то курсор примет форму, указывающую на возможность изменения размеров, и позволит выполнить перемещение рамки в нужное место. Это иногда нарушает структуру красиво спроектированных фреймов. Для предотвращения возможности изменения пользователем размера фреймов следует воспользоваться параметром NORESIZE:

<FRAME NORESIZE>.

Этот параметр не требует никаких значений. Естественно, когда задан параметр NORESIZE для одного из фреймов, то размер любого из смежных фреймов также не может быть изменен. Иногда, в зависимости от расположения фреймов, использования параметра NORESIZE в одном из фреймов будет достаточно, чтобы предотвратить возможность изменения размеров любого из них на экране.

Тэг <NOFRAMES>

Возможность работы с фреймами не предполагалась ни в стандарте HTML 3.0, ни в HTML 3.2. Здесь до последнего времени складывалась достаточно типичная ситуация, когда реально используемые возможности активно применяются на многих WWW-страницах, однако не являются частью стандарта. Это означало, что браузеры вполне законно могли игнорировать фреймы. С появлением стандарта HTML 4.0 ситуация изменилась — теперь поддержка фреймовых структур закреплена стандартом. Заметим, что большинство современных браузеров распознавали фреймы и до появления HTML 4.O. Тем не менее, необходимо предоставлять информацию пользователям, применяющим браузеры без поддержки фреймов. Для таких браузеров можно предусмотреть альтернативную информацию, которая записывается между парой тегов <NOFRAMES> и </NOFRAMES>. Это выглядит следующим образом:

<NOFRAMES>

весь HTML-документ

</NOFRAMES>

Все, что размещено между тэгами <NOFRAMES> и </NOFRAMES>, будет отображаться браузерами, не имеющими возможностей поддержки фреймов. Браузеры с поддержкой фреймов проигнорируют всю информацию между этими тэгами.

Заметим, что в реальной жизни разработчики HTML-страниц часто не используют возможности тега <NOFRAMES> для создания страниц без фреймовых структур, а просто создают две версии своих HTML-документов. Для такого варианта на стартовой странице обычно предлагается выбор загрузки документа с фреймовой структурой или без нее. Далее в зависимости от выбора пользователя загружается только один вариант документа.

Особенности описания фреймовых структур

Одним из важнейших тэгов, применяемых при описании фреймовых структур, является тег <FRAME>. Тег имеет ряд параметров, ни один из которых не является обязательным и не зависит от других, однако при их записи следует учитывать ряд моментов.

Оказывается, что при необходимости создания фрейма, в который в дальнейшем может быть загружен какой-либо документ, например, по команде из другого фрейма, следует в тэге <FRAME> записать параметр SRC. Если этот

параметр опущен, то фрейм не будет создан, хотя место под него будет оставлено. Например, запись типа <FRAME NAME="B"> вполне логична и могла бы определять фрейм с именем "В", в который исходно не загружается никакой документ. Однако из-за отсутствия параметра SRC фрейм с таким именем не будет существовать, поэтому дальнейшие попытки загрузить в него какой-либо документ останутся безрезультатными, а место в окне, отведенное под данный фрейм, будет пустовать. Более того, некоторые браузеры (например, Microsoft Internet Explorer версии 3 для Windows З.хх) при попытке загрузки документа в такой фрейм выдадут сообщение об ошибке и завершат работу.

Обязательность задания параметра SRC не поддается логическому объяснению, поэтому лучше всего просто принять к сведению этот факт. Тогда даже при отсутствии документа, который необходимо загружать в данный фрейм с самого начала, следует в параметре SRC задать имя какого-либо файла. Например, такой файл можно назвать empty.htm (empty — пустой), содержимым которого будет являться минимально возможный корректный HTML-документ, а именно:

<HTML>

<HEAD>

</HEAD>

<BODY>

</BODY>

</HTML>

Можно сократить данный документ до двух тэгов: <HTMLX/HTML>, что также будет верным HTML-документом. Идя по пути максимального сокращения размеров "пустого" документа, можно ограничиться файлом, размер которого равен одному байту, в котором хранится символ пробела (или любой другой неотображаемый символ). Этот файл не будет корректным HTML-документом, но не вызовет нареканий со стороны большинства браузеров. Дальнейшее сокращение размера такого файла до нуля не оправдано, так как при его загрузке браузером Netscape будет выдаваться предупреждающее сообщение (рис. 5.4) о том, что документ не содержит данных.

Рис. 5.4. Предупреждающее сообщение при загрузке файла нулевой длины

При этом на данное сообщение необходимо отреагировать, нажав клавишу <Enter> или кнопку мыши. При любой перезагрузке документа или изменении размеров окна просмотра браузера сообщение будет возникать вновь.

Можно также задать имя несуществующего файла, однако при этом браузер Netscape будет выдавать предупреждающее сообщение (рис. 5.5), что не помешает дальнейшей работе, но приведет к аналогичным неудобствам.

Рис. 5.5. Предупреждающее сообщение при попытке загрузки несуществующего файла

Совет

Создайте файл с именем empty.htm, размер которого равен одному байту, содержащий символ пробела. Примите за правило при записи тега <FRAME> всегда указывать SRC=empty.htm, если сразу невозможно указать имя конкретного файла.

Примеры фреймов

В этом разделе представлены некоторые типичные примеры определений фреймов.

Возвратимся к примеру, который приведен в начале данного раздела (рис. 5.3). Этот пример использует вложенную структуру <FRAMESET>. Внешний тег <FRAMESET> создает три строки высотой, соответственно, в 25, 50 и 25 процентов от общей высоты окна просмотра:

<FRAMESET ROWS="25%,50%,25%">.

Внутри этой области определения первая и последняя строки представляют собой простые фреймы:

<FRAME SRC="header.htm"> <FRAME SRC="footer.htm">

Каждая из этих строк заполняет всю ширину экрана. Первая строка в верхней части экрана занимает 25 процентов высоты, и третья строка в нижней части также занимает 25 процентов высоты. Между ними, однако, располагается вложенный тег <FRAMESET>:

<FRAMESET COLS="25%,75%">

<FRAME SRC="list.htm">

<FRAME SRC="info.htm">

</FRAMESET>

Этот тег определяет два столбца, на которые разбивается средняя строка экрана. Строка, в которой располагаются эти два столбца, занимает 50 процентов высоты экрана, что определено во внешнем тэге <FRAMESET>. Левый столбец использует 25 процентов от ширины экрана, в то время как правый столбец занимает оставшиеся 75 процентов ширины.

Фреймы для этих столбцов определены внутри вложенной пары тегов <FRAMESET> и </FRAMESET>, в то время как определение фреймов для первой и последней строки записывается вне этой пары, но внутри внешнего <FRAMESET> в соответствующем порядке.

Структуру записи легко понять, если воспринимать вложенный блок <FRAMESET> как отдельный элемент <FRAME>. В нашем примере внешний тег <FRAMESET> определяет три строки. Каждая из них должна быть заполнена. В данном случае они заполняются сначала отдельным элементом <FRAME>, далее — вложенным блоком <FRAMESET> шириной в два столбца, а затем еще одним элементом <FRAME>.

Теперь может возникнуть вопрос, можно ли в качестве значения параметра SRC тега <FRAME> задать имя файла, который, в свою очередь, содержит описание структуры фреймов. Да, это допустимо. В данном случае тег <FRAME> будет использован для указания на HTML-документ, который является фреймовой структурой и используется в качестве отдельного фрейма.

Вернемся к примеру и заменим вложенный <FRAMESET> на отдельный <FRAME>. Естественно, потребуется два HTML-файла вместо одного, так как вложенный <FRAMESET> теперь будет располагаться в отдельном документе. Приведем содержимое первого (внешнего) файла:

<HTML>

<HEAD>

</HEAD>

<FRAMESET ROWS="25%,50%,25%">

<FRAME SRC="header.htm">

<FRAME SRC="frameset.htm">

<FRAME SRC="footer.htm">

</FRAMESET>

<NOFRAMES>

Ваш браузер не может отображать фреймы

</NOFRAMES>

</HTML>

Второй файл с именем frameset.htm содержит следующий код:

<HTML>

<HEAD>

</HEAD>

<FRAMESET COLS="25%,75%">

<FRAME SRC="list.htm">

<FRAME SRC="info.htm">

</FRAMESET>

</HTML>

В этом случае верхняя и нижняя строки ведут себя по-прежнему. Но вторая строка теперь является простым фреймом, как и другие. Однако файл frameset.htm, на который указывает параметр SRC, определяет собственную структуру фреймов. В результате на экране будет отображено в точности то же самое, что и в первоначальном примере.

Примечание

Принципиально возможно создать вложенные структуры <FRAMESET>, использующие теги <FRAME>, которые ссылаются на тот же самый файл с описанием структуры фреймов, однако этого делать не следует. Такая ситуация приведет к бесконечной рекурсии и не даст возможности дальнейшей работы. Некоторые браузеры контролируют подобную ситуацию и предотвращают возможность сбоя. Если адрес, записанный в SRC, совпадает с одним из предыдущих адресов в иерархии фреймов, то он игнорируется, как если бы параметр SRC отсутствовал вообще.

Совет

Используя вложенные структуры <FRAMESET> в различных комбинациях, возможно создать практически любую сетку фреймов, которую можно себе представить. Однако помните, что следует создавать удобный для пользователя интерфейс, а не просто демонстрировать свое умение работать с фреймами.

Приведем пример создания регулярной прямоугольной сетки фреймов:

<HTML>

<HEAD>

</HEAD>

<FRAMESET ROWS="*,2*" COLS="20%, 30%, 40%">

<FRAME SRC="docum1.htm">

<FRAME SRC="docum2.htm">

<FRAME SRC="docum3.htm">

<FRAME SRC="docum4.htm">

<FRAME SRC="docum5.htm">

<FRAME SRC="docum6.htm">

</FRAMESET>

</HTML>

Этот пример создает сетку фреймов с двумя строками и тремя столбцами (рис. 5.6). Так как определен набор из шести фреймов, необходимо также дать шесть определений отдельных фреймов <FRAME>. Обратите внимание, что определения фреймов даются построчно. То есть первый тег <FRAME> определяет содержимое первой колонки в первой строке, второй — второй колонки, а третий заканчивает определение данных для последней колонки первой строки. Последние три фрейма затем заполняют столбцы второй строки.

Рис. 5.6. Сетка фреймов 2 на 3

Заметим также, что сумма значений процентов в параметре COLS равна не 100, а только 90 процентов. В этом нет ничего страшного, так как браузер автоматически пропорционально изменит ширину колонок, чтобы ликвидировать это противоречие.

Особенности навигации при использовании фреймов

Работа с документами, имеющими фреймовую структуру, имеет некоторые особенности, которые необходимо знать. Эти особенности JB основном проявляются в навигации при загрузке документов. Значительные различия в навигации свойственны не только разным браузерам, но и разным версиям одного и того же браузера.

Браузер Netscape версий 3.x и 4.x при нажатии кнопки Back возвращает обратно документ в тот фрейм, действия с которым производились последним. Те же действия будут произведены в случае, если будет выбран пункт Back при вызове контекстного меню в любом из фреймов. Напомним, что контекстное меню вызывается нажатием правой кнопки мыши. Таким образом, независимо от того, в каком из фреймов было вызвано контекстное меню, при нажатии кнопки Back будет выполнена отмена последней операции, даже если она была произведена в другом фрейме.

Браузер Netscape версии 2.x работал совершенно по-другому. Контекстное меню содержит команду Back in Frame, выполнение которой возвращает документ в текущий фрейм, а не выполняет отмену последней операции.

В любой версии Netscape можно сделать закладку на документ, содержащийся в выбранном фрейме. Для этого необходимо выбрать режим Add Bookmark из контекстного меню, о котором говорилось выше. Если же просто будет выбран режим Add Bookmark из главного меню браузера, то будет сделана закладка на документ с описанием структуры фреймов <FRAMESET>, которая не будет точно указывать на конкретный фрейм. Возможность создания закладки на документ отдельного фрейма вовсе не означает, что при дальнейшем использован

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...