Установлен запрет на отображение страницы во фрейме: что делать? Понятие фрейма в HTML
Временами у вас могут возникнуть проблемы с вебвизором в метрике "Яндекс. Вебмастера". Вы хотите посмотреть запись посещения вашего сайта, но по непонятным причинам не можете. Скорее всего, установлен запрет на отображение страницы во фрейме.
Что сделать, если вебвизор не работает через "Яндекс. Метрику"
Для начала нужно проверить, включён ли у вас вообще вебвизор в метрике (в настройках счётчика). Заходим на страницу сайта, где установлен счётчик метрики. Переходим в просмотр кода страницы нажатием на (ctrl+u), комбинацией ctrl+f начинаем поиск нужного фрагмента кода, а именно - webwizor:true. Если в конце фрагмента стоит false, то код будет работать неправильно. Запрет на отображение страницы во фрейме (вебвизор) подтверждён.
Если вебвизор в метрике всё равно не воспроизводит действий пользователя, то есть несколько вариантов проблемы:
- Блокировка со стороны браузера клиента.
- Блокировка со стороны сервера, на котором «лежит» ваш сайт.
Рассмотрим оба варианта решения проблемы. Первый вариант: вебвизор не работает по причине блокировки браузером клиента, а значит, установлен запрет на отображение страницы во фрейме.
Блокировка со стороны браузера клиента
Необходимо убедиться в том, что у вас есть доступ к любому адресу Если в настройках выбран то включена блокировка. Доступ к ресурсам может блокироваться антивирусом (проверьте его настройки), фаерволом вашей системы или на уровне подсетей. Для устранения проблемы просто добавьте их в список доверенных сайтов, и проблема должна уйти.
Если проблема с установлением запрет на отображение страницы во фрейме всё-таки осталась, то просто зайдите с чистого браузера - это может быть режим "Инкогнито" или скачанный браузер без плагинов и дополнений, расширений (в случае с "Гугл Хром"). Этот подход устраняет проблему в 99 случаях из 100.
Блокировка со стороны сервера
Второй вариант: установлен запрет на отображение страниц во фрейме. Эту проблему решить немного сложнее, чем в первом случае.
- Открываем в "Яндекс. Метрике" раздел "Вебвизор", нажимаем f12 (после нажатия открываются инструменты разработчика).
- Вкладка "Консоль", перезагружаем страницу (F5).
- В списке ошибок будет подчёркнутая красная строка, там будет написано о проблеме.
Если установлена блокировка показа вашего сайта во фрейме, то в "Консоли" вы увидите такую строку: X-Frame-Options: SAMERIORIGN
В последнее время активно ведётся работа по решению этй проблемы, но пока в большинстве браузеров решение не поддерживается. Если вы убираете этот запрет, значит сознательно делаете свой для хакерских атак или просто взлома.
Приведем пример: В компании "1-С-Битрикс" говорят: "Вам важнее безопасность сайта или то, что вы не можете посмотреть действия пользователя на вашем сайте?" Для того чтобы убедиться, что именно по этой причине не работает вебвизор, и вы не можете посмотреть, что делают ваши пользователи на сайте, необходимо осуществить проверку ответа сервера на запрос в любом известном сервисе. Введите адрес страницы с установленным вебвизором и получите результат, как на скрине.
Установлен запрет на отображение страницы во фрейме, скрин свидетельствует об этом.
Вы все-таки решили снять запрет? Если он стоит на уровне конфигурации сервера, и вы поставили сайт на обратитесь в техподдержку.
Если запрет на уровне скрипта, различные cms делают запрос в свои библиотеки безопасности, поэтому проблему решить будет сложнее, чем вы думаете. Открыть страницу во фрейме не удалось? Обратитесь к разработчикам вашей CMS.
Как видите, если установлен запрет на отображение страницы во фрейме, проблему можно решить даже самостоятельно.
Сферы применения фреймов
Разработчикам HTML-документов предоставляется довольно богатый выбор форм отображения информации на страницах. Текстовая и графическая информация может быть упорядочена и организована при помощи списков, таблиц или просто с помощью параметров выравнивания, задания горизонтальных линий, разделения на абзацы. Иногда этих возможностей оказывается недостаточно и тогда приходится разбивать окно просмотра браузера на отдельные области или фреймы (frames). В ряде русскоязычных описаний языка HTML вместо термина фреймы используется термин кадры. Частота использования обоих терминов примерно одинакова.
Выбор фреймовой структуры отображения информации на WWW оправдан в следующих случаях:
- при необходимости организовать управление загрузкой документов в одну из подобластей окна просмотра браузера при работе в другой подобласти;
- для расположения в определенном месте окна просмотра информации, которая должна постоянно находиться на экране вне зависимости от содержания других подобластей экрана;
- для представления информации, которую удобно расположить в нескольких смежных подобластях окна, каждая из которых может просматриваться независимо.
Приведенный список не исчерпывает все возможные случаи, где можно применить фреймы, а носит рекомендательный характер.
Рассмотрим сначала типичные варианты использования фреймов на примерах реально существующих HTML-документов, а затем обратимся к правилам разработки документов, содержащих фреймы.
На рис. 5.1 показана одна из HTML-страниц агентства "Финмаркет", специализирующегося на предоставлении информации с финансовых и фондовых рынков России.
Рис. 5.1. Типичный Web-документ с фреймовой структурой
На этой странице окно браузера разбивается на три фрейма. Нижняя часть окна занимает 20% высоты всего окна и содержит постоянную информацию, которая в данном случае представляет собой графическое меню, позволяющее в любой момент обратиться к наиболее важным разделам. Этот фрейм не может изменять своих размеров по командам пользователя и не имеет полос прокрутки. Верхняя часть окна (составляющая 80% высоты) разделена по горизонтали на два фрейма. Левый фрейм содержит оглавление документов, которые могут быть просмотрены пользователем. Правый фрейм, занимающий большую часть окна просмотра, предназначен для отображения самих документов. При первоначальной загрузке эти два фрейма делят окно браузера по горизонтали в соотношении 15% на 85%. Это соотношение может изменяться пользователем при просмотре, что позволяет выбрать оптимальные размеры фреймов с учетом содержимого загруженных документов. Каждый из этих фреймов имеет свою полосу прокрутки, обеспечивающую возможность просмотра всего содержимого фрейма вне зависимости от размера самого фрейма, всего окна браузера и используемых шрифтов. При выборе любой ссылки в левом фрейме соответствующий документ будет загружен в правый фрейм. Такая структура позволяет одновременно видеть на экране и оглавление документов, и содержимое выбранного документа.
Приведем без пояснений фрагмент HTML-кода, по которому построен документ с данной структурой:
Данный пример показывает наиболее типичное использование фреймовых структур, когда один фрейм служит оглавлением документов, а другой используется для загрузки их содержимого. Решение такой задачи без применения фреймов обычно выполняется следующим образом. На одной из страниц располагают оглавление, состоящее из ссылок на другие документы или их отдельные фрагменты. При переходе по такой ссылке оглавление исчезает, а на его место загружается нужный документ, после прочтения которого обычно необходимо вновь вернуться к оглавлению. При использовании фреймов такой возврат становится ненужным, так как оглавление постоянно располагается на части экрана.
В интернете можно найти сайт электронного издания популярного в Санкт-Петербурге адресно-телефонного справочника "Весь Петербург".
Электронная версия справочника доступна по адресу http://www.allpetersburg.ru и позволяет находить нужные сведения по запросам пользователя. Данная страница документа также имеет фреймовую структуру и состоит из двух фреймов, причем первый из них имеет ширину 100 пикселов, а второй занимает всю оставшуюся ширину окна просмотра. Фрейм, расположенный с левой стороны, используется для графического меню, постоянно присутствующего на экране, а также содержит логотип компании "Nevalink". Второй фрейм содержит документ, который в данном случае представляет собой форму для запроса пользователя. Структура этой страницы определена следующим HTML-кодом:
Фреймы очень похожи на таблицы - и те и другие осуществляют разбиение окна просмотра браузера на прямоугольные области, в которых располагается некоторая информация. Однако при помощи фреймов можно решить не только задачу форматирования страниц документа, но организовать взаимодействие между ними. Принципиальная разница между фреймами и таблицами состоит в том, что каждому фрейму должен соответствовать отдельный 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-код, создающий документ с фреймами средней сложности:
Этот пример создает страницу с фреймами, показанную на рис. 5.3 . Как вы видите, этот HTML-код определяет четыре фрейма. Верхний фрейм занимает всю ширину страницы и содержит заголовок. Далее идут два центральных фрейма, один из которых расположен с левой стороны и занимает 25 процентов от ширины экрана, а второй занимает оставшееся место. Последний, четвертый фрейм занимает нижнюю четверть экрана. В каждый из фреймов загружается отдельный HTML-документ, имя которого определяется параметром SRC.
Как видно из примера, для описания структуры фреймов применяются теги
Рис. 5.3 . Результат отображения браузером Netscape HTML-документа с фреймами, приведенного в примере
Тэг
Фреймы определяются в структуре, называемой FRAMESET, которая используется для страниц, содержащих фреймы, вместо раздела BODY обычного документа. Web-страницы, составленные из фреймов, не могут содержать раздел BODY в своем HTML-коде. В свою очередь, страницы с разделом BODY не могут использовать фреймы.
Совет
Так как для страниц с фреймами не применяется раздел BODY, то нет возможности задать фоновое изображение и цвет фона для всей страницы в целом. Напомним, что эти установки определяются параметрами BACKGROUND и BGCOLOR, записываемыми в тэге BODY. Однако это не мешает в каждый фрейм загружать документы, имеющие свои параметры фона.
Контейнер из тегов
Тэг
Примечание
Некоторые браузеры разрешают использовать дополнительные параметры тега
Можно определить значения для ROWS или COLS, или обоих вместе. Необходимо определить, по меньшей мере, два значения хотя бы одного из этих параметров. Если другой параметр опущен, то его значение принимается равным 100%.
Совет
Если в тэге
Список значений параметров ROWS и COLS тега
определяет набор трех фреймов. Эти значения представляют собой абсолютные значения в пикселах. Другими словами, первый фрейм (первая строка) имеет высоту 100 пикселов, второй - 240 и последний - 140 пикселов.
Задание значений размеров фреймов в пикселах не очень удобно. Здесь не учитывается тот факт, что браузеры запускаются в различных операционных системах и с различными разрешениями дисплеев. В то же время, можно определить абсолютные значения размеров для некоторых случаев, например, для отображения небольшого изображения с известными размерами. Лучшим вариантом будет задание значений в процентах или в относительных единицах, например:
В этом примере создаются три фрейма, размещаемые как строки во всю ширину экрана. Верхняя строка займет 25 процентов от доступной высоты экрана, средняя строка - 50 процентов и нижняя - 25 процентов. Если сумма заданных процентов не равна 100%, то значения будут пропорционально отмасштабированы, чтобы в итоге получилось ровно 100%.
Значения в относительных единицах выглядят следующим образом:
Звездочка (*) используется для пропорционального деления пространства. Каждая звездочка представляет собой одну часть целого. Складывая все значения чисел, стоящих у звездочек (если число опущено, то подразумевается единица), получим знаменатель дроби. В этом примере первый столбец займет 1/6 часть от общей ширины окна, второй столбец - 2/6 (или 1/3), а последний - 3/6 (или 1/2).
Помните, что числовое значение без каких-либо символов определяет абсолютное число пикселов для строки или колонки. Значение со знаком процента (%) определяет долю от общей ширины (для COLS) или высоты (для ROWS) от окна просмотра, а значение со звездочкой (*) задает пропорциональное распределение оставшегося пространства.
Приведем пример, использующий все три варианта задания значений:
В этом примере первый столбец будет иметь ширину 100 пикселов. Второй столбец займет 25 процентов от всей ширины окна просмотра, третий столбец - 1/3 оставшегося пространства и, наконец, последний столбец - 2/3. Абсолютные значения рекомендуется назначать первыми по порядку слева направо. За ними следуют процентные значения от общего размера пространства. В заключение записываются значения, определяющие пропорциональное разбиение оставшегося пространства.
Совет
Если вы используете абсолютные значения параметров COLS или ROWS, то задавайте их небольшими, чтобы они могли поместиться в любом окне браузера, и дополняйте их, по крайней мере, одним значением, заданным в процентной или относительной форме, для заполнения оставшегося пространства.
Если используется тег
Эта строка HTML-кода создает сетку фреймов с тремя строками и двумя столбцами. Первая и последняя строки занимают 1/4 высоты каждая, а средняя строка - половину. Первый столбец занимает 2/3 ширины, а второй - 1/3.
Контейнер
Примечание
В некоторых источниках по языку HTML указывается, что параметры COLS и ROWS тега
Тэг
Тэг определяет одиночный фрейм. Он должен располагаться внутри пары тегов
Обратите внимание, что тег не является контейнером и в отличие от
Необходимо записать столько тегов , сколько отдельных фреймов определено при задании тега
Тэг имеет шесть параметров: SRC, NAME, MARGINWIDTH, MARGINHEIGHT, SCROLLING и NORESIZE.
Примечание
Некоторые браузеры разрешают использовать ряд дополнительных параметров тега . Обзор возможностей браузеров Netscape и Microsoft Internet Explorer дается в конце главы.
Приведем запись тега со всеми параметрами:
MARGINWIDTH="value" MARGINHEIGHT="value" NORESIZE>
На практике в тэге редко используются одновременно все параметры.
Наиболее важный параметр - SRC (сокращение от слова source). Довольно часто в тэге задается единственный параметр SRC. Например:
.
Значение параметра SRC определяет URL-адрес документа, который будет загружен изначально в данный фрейм. Обычно в качестве такого адреса записывается имя HTML-файла, расположенного в том же самом каталоге, что и основной документ. Тогда строка определения фрейма будет выглядеть, например, так:
.
Обратите внимание, что любой HTML-файл, заданный в описании фрейма, должен быть полным HTML-документом, а не фрагментом. Это означает, что документ должен иметь теги HTML, HEAD, BODY и т. д.
Конечно, в качестве значения SRC может быть задан любой допустимый URL-адрес. Если, например, фрейм используется для отображения изображения в формате GIF, которое располагается на сервере издательства данной книги, то следует записать:
.
Совет
He задавайте в документе, описывающем структуру фреймов, никакого содержания.
Обычный текст, заголовки, графические изображения и другие элементы не могут прямо использоваться в документе, который описывает структуру фреймов. Все содержание фреймов должно быть определено в отдельных HTML-файлах, имена которых задаются параметром SRC тега .
Параметр NAME определяет имя фрейма, которое может использоваться для ссылки к данному фрейму. Обычно ссылка задается из другого фрейма, располагающегося на той же самой странице. Например:
.
Такая запись создает фрейм с именем "Frame_1", на который может быть выполнена ссылка. Например:
Щелкните здесь для загрузки
документа other.htm во фрейм с именем Frame_1.
Обратите внимание на параметр TARGET, который ссылается на имя фрейма. Если для фрейма не задано имя, то будет создан фрейм без имени, и не будет возможности использовать ссылки на него из другого фрейма. Имена фреймов должны начинаться с алфавитно-цифрового символа.
Параметры MARGINWIDTH и MARGINHEIGHT дают возможность устанавливать ширину полей фрейма. Записывается это следующим образом:
MARGINWIDTH="value",
где "value" - абсолютное значение в пикселах. Например:
Данный фрейм имеет поля сверху и снизу по 5 пикселов, а слева и справа - по 7 пикселов. Не забудьте, что здесь идет речь о полях, а не о рамках. Параметры MARGINWIDTH и MARGINHEIGHT определяют пространство внутри фрей-ма, в пределах которого не будет располагаться никакая информация. Минимально допустимое значение этих параметров равно единице.
Для фреймов будут автоматически создаваться и отображаться полосы прокрутки, если содержимое фрейма не помещается полностью в отведенном пространстве. Иногда это нарушает дизайн страницы, поэтому было бы удобно иметь возможность управлять отображением полос прокрутки. Для этих целей используется параметр SCROLLING. Формат записи:
.
Параметр SCROLLING может принимать три значения: YES, NO или AUTO. Значение AUTO действует так же, как и в случае отсутствия параметра SCROLLING. Значение YES вызывает появление полос прокрутки вне зависимости от необходимости этого, a NO - запрещает их появление. Например:
.
Обычно пользователь может изменять размер фреймов при просмотре страницы. Если установить курсор мыши на рамке фрейма, то курсор примет форму, указывающую на возможность изменения размеров, и позволит выполнить перемещение рамки в нужное место. Это иногда нарушает структуру красиво спроектированных фреймов. Для предотвращения возможности изменения пользователем размера фреймов следует воспользоваться параметром NORESIZE:
.
Этот параметр не требует никаких значений. Естественно, когда задан параметр NORESIZE для одного из фреймов, то размер любого из смежных фреймов также не может быть изменен. Иногда, в зависимости от расположения фреймов, использования параметра NORESIZE в одном из фреймов будет достаточно, чтобы предотвратить возможность изменения размеров любого из них на экране.
Тэг
Возможность работы с фреймами не предполагалась ни в стандарте HTML 3.0, ни в HTML 3.2. Здесь до последнего времени складывалась достаточно типичная ситуация, когда реально используемые возможности активно применяются на многих WWW-страницах, однако не являются частью стандарта. Это означало, что браузеры вполне законно могли игнорировать фреймы. С появлением стандарта HTML 4.0 ситуация изменилась - теперь поддержка фреймовых структур закреплена стандартом. Заметим, что большинство современных браузеров распознавали фреймы и до появления HTML 4.O. Тем не менее, необходимо предоставлять информацию пользователям, применяющим браузеры без поддержки фреймов. Для таких браузеров можно предусмотреть альтернативную информацию, которая записывается между парой тегов
весь HTML-документ
Все, что размещено между тэгами
Заметим, что в реальной жизни разработчики HTML-страниц часто не используют возможности тега
Особенности описания фреймовых структур
Одним из важнейших тэгов, применяемых при описании фреймовых структур, является тег . Тег имеет ряд параметров, ни один из которых не является обязательным и не зависит от других, однако при их записи следует учитывать ряд моментов.
Оказывается, что при необходимости создания фрейма, в который в дальнейшем может быть загружен какой-либо документ, например, по команде из другого фрейма, следует в тэге записать параметр SRC. Если этот
параметр опущен, то фрейм не будет создан, хотя место под него будет оставлено. Например, запись типа вполне логична и могла бы определять фрейм с именем "В", в который исходно не загружается никакой документ. Однако из-за отсутствия параметра SRC фрейм с таким именем не будет существовать, поэтому дальнейшие попытки загрузить в него какой-либо документ останутся безрезультатными, а место в окне, отведенное под данный фрейм, будет пустовать. Более того, некоторые браузеры (например, Microsoft Internet Explorer версии 3 для Windows З.хх) при попытке загрузки документа в такой фрейм выдадут сообщение об ошибке и завершат работу.
Обязательность задания параметра SRC не поддается логическому объяснению, поэтому лучше всего просто принять к сведению этот факт. Тогда даже при отсутствии документа, который необходимо загружать в данный фрейм с самого начала, следует в параметре SRC задать имя какого-либо файла. Например, такой файл можно назвать empty.htm (empty - пустой), содержимым которого будет являться минимально возможный корректный HTML-документ, а именно:
Можно сократить данный документ до двух тэгов:
Рис. 5.4 . Предупреждающее сообщение при загрузке файла нулевой длины
При этом на данное сообщение необходимо отреагировать, нажав клавишу
Можно также задать имя несуществующего файла, однако при этом браузер Netscape будет выдавать предупреждающее сообщение (рис. 5.5 ), что не помешает дальнейшей работе, но приведет к аналогичным неудобствам.
Рис. 5.5 . Предупреждающее сообщение при попытке загрузки несуществующего файла
Совет
Создайте файл с именем empty.htm, размер которого равен одному байту, содержащий символ пробела. Примите за правило при записи тега всегда указывать SRC=empty.htm, если сразу невозможно указать имя конкретного файла.
Примеры фреймов
В этом разделе представлены некоторые типичные примеры определений фреймов.
Возвратимся к примеру, который приведен в начале данного раздела (рис. 5.3 ). Этот пример использует вложенную структуру
Внутри этой области определения первая и последняя строки представляют собой простые фреймы:
Каждая из этих строк заполняет всю ширину экрана. Первая строка в верхней части экрана занимает 25 процентов высоты, и третья строка в нижней части также занимает 25 процентов высоты. Между ними, однако, располагается вложенный тег
Этот тег определяет два столбца, на которые разбивается средняя строка экрана. Строка, в которой располагаются эти два столбца, занимает 50 процентов высоты экрана, что определено во внешнем тэге
Фреймы для этих столбцов определены внутри вложенной пары тегов
Структуру записи легко понять, если воспринимать вложенный блок
Теперь может возникнуть вопрос, можно ли в качестве значения параметра SRC тега задать имя файла, который, в свою очередь, содержит описание структуры фреймов. Да, это допустимо. В данном случае тег будет использован для указания на HTML-документ, который является фреймовой структурой и используется в качестве отдельного фрейма.
Вернемся к примеру и заменим вложенный
Ваш браузер не может отображать фреймы
Второй файл с именем frameset.htm содержит следующий код:
В этом случае верхняя и нижняя строки ведут себя по-прежнему. Но вторая строка теперь является простым фреймом, как и другие. Однако файл frameset.htm, на который указывает параметр SRC, определяет собственную структуру фреймов. В результате на экране будет отображено в точности то же самое, что и в первоначальном примере.
Примечание
Принципиально возможно создать вложенные структуры
Совет
Используя вложенные структуры
Приведем пример создания регулярной прямоугольной сетки фреймов:
Этот пример создает сетку фреймов с двумя строками и тремя столбцами (рис. 5.6 ). Так как определен набор из шести фреймов, необходимо также дать шесть определений отдельных фреймов . Обратите внимание, что определения фреймов даются построчно. То есть первый тег определяет содержимое первой колонки в первой строке, второй - второй колонки, а третий заканчивает определение данных для последней колонки первой строки. Последние три фрейма затем заполняют столбцы второй строки.
Рис. 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 из главного меню браузера, то будет сделана закладка на документ с описанием структуры фреймов
Взаимодействие между фреймами
Простейшая форма просмотра информации на WWW состоит в чтении страниц и переходах по ссылкам, при которых текущий документ в окне браузера замещается другим документом. При работе с фреймами можно организовать более удобную для пользователя схему загрузки документов.
Взаимодействие между фреймами заключается в возможности загрузки документов в выбранный фрейм по командам из другого фрейма. Для этой цели используется параметр TARGET тега <А>. Данный параметр определяет имя фрейма или окна браузера, в которое будет загружаться документ, на который указывает данная ссылка. По умолчанию при отсутствии параметра TARGET документ загружается в текущий фрейм (или окно). Это умолчание может быть изменено заданием тега
Имена фреймов должны начинаться с латинской буквы или цифры. В качестве имени может задаваться имя существующего окна или фрейма, а может указываться новое имя, под которым будет открыто новое окно. Имеется четыре зарезервированных имени, при задании которых выполняются специальные действия. Эти имена начинаются с символа подчеркивания (_): "_blank", "_self", "_parent" и "_top". Любое другое имя, начинающееся с символа "подчеркивание", недопустимо.
TARGET="_blank" - обеспечивает загрузку документа в новое окно. Это окно не будет иметь имени, а следовательно, в него невозможно будет загрузить другой документ.
TARGET="_self"
-
загрузка документа будет произведена в текущий фрейм (или окно). Такую запись
следует использовать для обхода умолчания, заданного тэгом
TARGET="_top" - вызывает загрузку документа в полное окно. Если документ уже располагается в полном окне, то данное значение действует так же, как "_self".
TARGET="_parent" - вызывает загрузку документа в область, занимаемую фреймом-родителем текущего фрейма. При отсутствии фрейма-родителя данное значение параметра действует так же, как "_top" .
Примечание
В ряде источников по языку HTML ошибочно утверждается, что при отсутствии родителя у фрейма значение "_parent" эквивалентно "_self". Такое утверждение не всегда корректно.
Предупреждение
Зарезервированные имена фреймов "_blank", "_self", "_parent" и "_top" должны записываться строчными латинскими буквами. Заметим, что такая требовательность присуща только Netscape. Браузер Microsoft Internet Explorer правильно распознает зарезервированные имена, записанные на любом регистре.
Приведем примеры взаимодействия между фреймами и отдельными окнами браузера. Рассмотрим следующий HTML-код:
В этом HTML-документе дается описание структуры, состоящей из трех фреймов с именами "А", "B " и "C ". Имена фреймов потребуются в дальнейшем для организации ссылок между фреймами. Заметим, что на фрейм с именем "А" в данном примере ссылок не будет, поэтому он мог быть оставлен без имени вообще. При загрузке приведенного выше документа в браузер во фреймах будет отображена информация, содержащаяся в файлах, определяемых параметром SRC. Во фрейм "А" попадет содержимое файла frame_a.htm, а остальные два фрейма получат данные из файла empty.htm, который не имеет отображаемых данных. Еще раз напомним, что HTML-документ, описывающий структуру фреймов, не имеет раздела
.Приведем текст файла с именем frame_a.htm:
D
4. Загрузка документа в новое окноА>
5. Загрузка документа в полное окноА>
6. Загрузка документа в текущий
фреймА>
Этот документ является полным HTML-документом, имеющий разделы Текст файла test.htm крайне прост:
Текст тестового документа
Файл frame_a.htm, содержимое которого загрузилось во фрейм "А", имеет шесть ссылок на один и тот же файл test.htm с различным значением параметра TARGET.
Рассмотрим действия, которые будут происходить при реализации этих ссылок. Первая ссылка со значением TARGET="B" будет загружать файл test.htm во фрейм с именем "в". Заметим, что после реализации любой из шести ссылок браузер Netscape автоматически окрасит в другой цвет все шесть, так как они указывают на один и тот же файл. Microsoft Internet Explorer отмечает только действительно реализованные ссылки.
Вторая ссылка выполнит те же действия для фрейма "C". Изначально во фреймах "B" и "C" ничего нет (точнее загружено содержимое пустого файла empty.htm). Реализация первой и второй ссылок заполнит эти фреймы.
Третья ссылка со значением TARGET=MD" приведет к образованию нового окна браузера с именем "D" и загрузке в него файла test.htm. Заметим, что форма записи этой ссылки ничем не отличается от первых двух. Различие состоит в том, что в первых двух случаях ссылки были даны на существующие фреймы, имена которых были определены в файле со структурой фреймов, а в данном случае ссылка дана на несуществующий объект. Если данная ссылка будет выполнена хотя бы один раз, то окно с именем "D" будет образовано и повторный переход по ссылке лишь перезагрузит данные в существующее теперь окно "D". Конечно, пользователь может в любой момент его закрыть и вновь образовать выбором данной ссылки. На рис. 5.7 показана ситуация после того, как первые три ссылки были реализованы. Напомним, что расположение и размеры окон на экране определяются пользователем.
Рис. 5.7 . Ситуация, полученная после последовательной реализации первых трех ссылок, имеющихся в левом фрейме
Пятая ссылка со значением TARGET="_top" загрузит документ в полное окно вместо всей фреймовой структуры. При таком значении параметра TARGET новое окно не образуется. Возврат к фреймовой структуре возможен нажатием кнопки Back.
Примечание
Имена фреймов или окон браузера не следует путать с названиями загружаемых документов. Имена фреймов при просмотре нигде не видны, они требуются только для организации взаимодействия и поэтому скрыты от пользователя. Увидеть их можно только при просмотре исходного текста HTML-файлов.
Совет
Напомним, что названия загружаемых документов задаются тэгом
Рассмотрим еще один интересный пример организации взаимодействия между фреймами и окнами браузера. Пусть имеется текст основного загружаемого HTML-документа:
Документа, имеющего фреймовую структуру, в новое окноА>
Обратите внимание, что если основной документ является стандартным HTML-документом, то загружаемый по ссылке из основного документа файл frame.htm содержит структуру фреймов и в свою очередь ссылается на файл empty.htm.
После загрузки основного документа окно браузера будет иметь вид, показанный на рис. 5.8 (левое окно). Весь документ состоит из двух ссылок. Выполним переход по первой ссылке. Будет образовано новое окно с именем "D", в котором появится текст файла test.htm (рис. 5.8 , правое окно). Повторение этой ссылки будет лишь перезагружать данные в окне "D".
Рис. 5.8. Пример окон взаимодействующих фреймов
Выполним переход по второй ссылке. Образуется новое окно без имени, в которое загрузится файл frame.htm, определяющий два фрейма с именами "С" и "D" (рис. 5.8, нижнее окно). В обоих фреймах ничего нет (точнее загружен пустой документ empty.htm). Обратим внимание, что теперь имеется открытое окно с именем "D" и окно с фреймами, один из которых также имеет имя "D". Выполним снова переход по первой ссылке. В отличие от первого случая загрузка данных будет осуществляться не в окно "D", а во фрейм с именем "D". Результат всех описанных действий показан на рис. 5.8.
Примечание
Появление открывающихся окон и их содержимое может иногда зависеть даже от порядка действий пользователя. Работа с документами, поведение которых трудно предсказуемо, обычно вызывает справедливое раздражение пользователя и говорит о недостаточной продуманности структуры данных разработчиками.
Если же изменить порядок действий, т. е. сначала выполнить вторую ссылку, а затем первую, то окно с именем "D" вообще не появится! Это произойдет потому, что после реализации второй ссылки образуется фрейм с именем "D" и для первой ссылки не будет нужды открывать новое окно.
Этот пример вовсе не является образцом для подражания, а лишь показывает возможную сложность организации взаимодействия. Напротив, нужно стараться без особой нужды не усложнять организацию данных, тем более не создавать ситуаций, в которых результат меняется в зависимости от порядка действий пользователя.
Совет
Избегайте коллизий в именах фреймов и окон. Хотя формально не запрещено иметь фреймы с одинаковыми именами, однако это может привести к путанице.
Предупреждение
Имена фреймов и окон сравниваются с учетом регистра символов. Так, например, фреймы с именами "frame_1" и "Frame_1" будут различны.
Примеры более сложного взаимодействия между фреймами
Выше были рассмотрены достаточно простые типовые примеры взаимодействия между фреймами. Были рассмотрены задачи создания новых окон, замены содержимого отдельных фреймов, а также выдачи документа в полное окно с разрушением всей структуры фреймов. Даны примеры использования задаваемых имен фреймов, а также зарезервированных имен "_blank", "_self" и "_top". Использование последнего зарезервированного имени "_parent" более сложно и будет описано ниже.
В данном разделе будут рассмотрены более сложные варианты взаимодействия между фреймами. В частности, будет реализована замена содержимого нескольких смежных фреймов.
Одним из наиболее часто встречающихся вариантов применения фреймов, который уже упоминался в данной главе, является случай двух фреймов, один из которых содержит список ссылок, а в другой загружаются сами документы (рис. 5.1).
Попробуем расширить постановку задачи. Пусть необходимо отображать на экране содержимое достаточно большого документа, состоящего из глав, разделенных на разделы. Типичным примером служит техническая литература по какой-либо тематике. Опишем желаемое представление такого документа на экране. Разобьем экран на три фрейма, в одном из которых будет располагаться список глав книги, во втором - перечень разделов выбранной главы, а в третьем - текст выбранного раздела. При выборе ссылки во втором фрейме должно меняться содержимое третьего фрейма. Реализация этого требования тривиальна. При выборе ссылки в первом фрейме должно одновременно изменяться содержимое как второго, так и третьего фрейма. На первый взгляд реализация этой задачи на языке HTML невозможна (без применения программирования на языке JavaScript или др.), так как при выполнении ссылки загружается только один документ, а не два или более. Тем не менее, решение данной задачи вполне возможно.
Покажем возможную схему решения такой задачи на простом примере. Пусть требуется отобразить на экране три фрейма и загрузить в них некоторые документы. Поставим задачу создать в каждом из этих фреймов ссылки, реализация которых, например, меняла местами содержимое двух фреймов. Пусть первый фрейм занимает 50% ширины окна и 100% высоты и располагается с левой стороны окна. Правая половина окна делится по горизонтали также пополам и содержит два других фрейма. Такая структура описывается следующим кодом:
С помощью данного HTML-кода будет создана требуемая структура, однако решение поставленной задачи невозможно. Необходимо вынести вложенную структуру
Созданный файл с вложенной структурой
На первый взгляд совершенно ничего не изменилось. В обоих случаях имеется три фрейма, в которые загружаются документы left.htm, 1.htm и 2.htm соответственно. Однако при взаимодействии фреймов различие проявится. Если в первом случае ни у одного из фреймов нет фрейма-родителя, то во втором случае для двух фреймов родительским будет фрейм с именем "Two_Frames". Поэтому если в любом из двух фреймов применить ссылку со значением параметра TARGET, равным "_parent", то результат будет различным для первого и второго случая. Для первого случая реализация такой ссылки приведет к загрузке документа в полное окно с замещением существующей структуры фреймов. Здесь проявляется свойство значения "_parent", которое при отсутствии фрейма-родителя действует как "_top". Во втором случае будет замещен фрейм с именем "Two_Frames", который занимает правую половину экрана и по существу состоит из двух фреймов.
Второй случай формально отличается от первого также наличием фрейма с именем "Two_Frames", к которому могут быть обращены ссылки. Как раз эта особенность и позволит нам решить поставленную задачу.
Приведем содержимое файла left.htm, который изначально загружается в первый из рассматриваемых фреймов:
документов в двух фреймах, расположенных в правой части окна.
Выберите вариант расположения документов:
1 _2.htm" TARGET="Two_Frames">Вариант 1-2А>
Заметим, что текст файлов 1_2.htm и 2_1.htm отличаются только порядком ссылок на файлы 1.htm и 2.htm.
Рассмотрим теперь построение документа, загруженного в левый фрейм. В нем имеется две ссылки с параметром TARGET="Two_Frames". Реализация любой из этих ссылок создает на месте расположения фрейма "Two_Frames" (это правая половина экрана) два фрейма с загрузкой документов 1.htm и 2.htm в том или ином порядке. Таким образом при выборе варианта 1-2 в верхний правый фрейм загружается документ 1.htm, а в нижний правый - 2.htm. При выборе варианта 2-1 порядок документов меняется. В итоге поочередный выбор вариантов создает впечатление того, что документы в двух фреймах меняются местами. Именно такого эффекта мы и стремились достичь (рис. 5.9).
Содержимое документов 1.htm и 2.htm для описанного примера не имеет значения. Тем не менее, для примера, вместо тривиальных документов создадим документы со ссылками, реализующими те же действия.
Текст файла 1.htm:
Документ 1
Вариант 1 -2
Вариант 2-1
Файл 2.htm отличается от 1.htm только заголовком.
Здесь имеются две ссылки со значением TARGET="_parent", которые обращены к родительскому фрейму. Эти ссылки могли бы быть записаны и с явным указанием имени фрейма-родителя, т. е. TARGET="Two_Frames", однако использование неявного указания имени обычно более удобно. Например, если из левого фрейма (документ left.htm) исключить ссылки, то можно было бы опустить имя фрейма "Two_Frames", заданное при описании основной фреймовой структуры. При этом был бы создан фрейм без имени, но ссылки из документов 1.htm и 2.htm со значением TARGET="_parent" по-прежнему работали бы правильно.
Совет
По возможности используйте неявное указание имен фреймов. Например, " parent"," top"," self" вместо задания конкретных имен.
Рис. 5.9. Окна взаимодействующих фреймов с эффектом смены загружаемых документов
Различие между фреймами и окнами браузера
При работе с фреймами возникает вопрос о принципиальной разнице между организацией фреймовой структуры окна браузера и созданием нескольких окон. На первый взгляд может показаться, что вполне можно было бы обойтись возможностями создания нескольких окон, поскольку работа с окнами и фреймами очень похожа. Каждый фрейм требует загрузки отдельного документа, имеет возможность независимой прокрутки содержимого и может изменяться по командам из других фреймов. Эти свойства фреймов аналогичны свойствам окон браузера. При табличной организации данных добиться такой свободы действий невозможно.
Однако между фреймами и окнами есть существенная разница. При фреймовой организации деление области просмотра на фреймы выполняет сам HTML-документ, указывая размеры и их расположение. Пользователь при просмотре может изменить размеры фреймов, если это не запрещено в описании их структуры. Расположение окон определено общими правилами работы с системой Windows - пользователь может распахнуть любое окно на весь экран, свернуть его в пиктограмму или произвольным образом задать размеры и расположение. Окна, в отличие от фреймов, могут перекрываться. Такое богатство выбора имеет свою оборотную сторону - необходимо каждый раз вручную располагать окна на экране и изменять их размеры для достижения оптимального варианта просмотра. В случае фреймов оптимальный вариант соотношения размеров обычно задается разработчиком в описании фреймовой структуры и часто не нуждается в изменении.
Совет
Хотя фреймы и не могут предоставить всех возможностей работы с отдельными окнами, их рациональная организация создаст для пользователя максимум удобств.
Работе с окнами свойственны и другие недостатки. Создание каждого окна требует немало памяти. По существу в Netscape каждое окно представляет собой еще одну копию браузера и снабжено полным набором кнопок и меню. Та же ситуация характерна и для Microsoft Internet Explorer.
Заметим, что организация отдельных окон в браузерах выполнена по-разному. Создание нового окна с документом приводит к появлению отдельной задачи в системе Windows, в чем можно убедиться при просмотре списка запущенных задач. Поэтому переключение между окнами может выполняться так же, как и переключение между разными задачами, например, нажатием сочетания клавиш
Во многих популярных Windows-приложениях существует понятие окна с документом (document window). В качестве примера можно привести текстовый процессор Microsoft Word или программу работы с графическими изображениями Paint Shop Pro и многие другие. В каждом из таких приложений допустимо одновременное использование нескольких окон с данными и, как правило, существует меню Window, в котором приводится список окон и дается возможность переключения между ними. Образование нового окна в таких приложениях обычно происходит при открытии существующего файла или создании нового. Однако в этих программах при создании нового окна не образуется новая работающая задача.
В Netscape также имеется меню Window, в котором приводится список существующих окон. (В версиях Netscape 4.x эта возможность предоставляется пунктом Window меню Communicator.) Вернемся к рис. 5.8. В этом примере одновременно открыто три окна, каждое из которых по существу является отдельным браузером. Однако для пользователя все они являются окнами одного браузера, которые могут взаимодействовать друг с другом. В любом из этих окон можно открыть меню Window и увидеть список трех окон. На рис. 5.10 показана ситуация, когда это сделано для нижнего окна.
Рис. 5.10. Открытие окон фреймов в браузере Netscape
Каждое из окон может быть закрыто отдельно (командой Close из меню File). Для завершения работы с браузером в любом из окон можно открыть меню File и выполнить пункт Exit (рис. 5.11).
Если при этом было открыто несколько окон, то все они будут закрыты, но перед этим появится предупреждающее сообщение (рис. 5.12).
Каждое окно браузера может иметь свои установки (правда не все). Посмотрите на рис. 5.11. Открыто два окна, одно из которых разбито на три фрейма. В два из трех фреймов, а также в отдельное окно загружен один и тот же документ. Возможность независимой настройки параметров каждого окна позволяет по-разному отобразить один и тот же документ. В приведенном примере размер шрифта документа в одном окне больше, чем в другом. Такой эффект достигнут установкой различных кодировок каждого из окон (пункт Document Encoding меню Options или пункт Character Set меню View для версии 4.x), причем обе кодировки используют один и тот же шрифт, но разного размера. Изменение же любого пункта меню General Preferences воздействует на все окна.
Рис. 5.11. Завершение работы с браузером Netscape
Рис. 5.12. Предупреждение о закрытии окон в браузере Netscape
Дополнительные возможности браузеров
Все перечисленные выше теги описания фреймов с соответствующими параметрами практически одинаково реализованы в браузерах Netscape и Microsoft Internet Explorer, однако каждый из этих браузеров позволяет дополнительно использовать свои уникальные теги или параметры.
Возможности браузера Netscape
Браузер Netscape, начиная с версии 3.0, позволяет использовать три дополнительных параметра: BORDER, FRAMEBORDER и BORDERCOLOR. Параметр BORDER применяется только в тэге
Параметр FRAMEBORDER может применяться как в тэге
Заметим, что параметры BORDER и FRAMEBORDER работают независимо друг от друга. Например, если в качестве значения FRAMEBORDER задано NO, а для BORDER задано значение, отличное от нуля, то рамка между фреймами прорисовываться не будет, но место под нее, определенное значением параметра BORDER, все равно будет отведено.
Параметр BORDERCOLOR может применяться как в тэге
Приведем пример:
Первая строка этого HTML-кода задает три фрейма, между которыми оставлено место под рамку толщиной 10 пикселов (рис. 5.13).
Рис. 5.13. Прорисовка рамок между фреймами в браузере Netscape
Между окнами фреймов "А" и "в" рамка не прорисовывается благодаря значению NO параметра FRAMEBORDER, тем не менее для рамки определен красный цвет (red). Для последнего фрейма "с" значение FRAMEBORDER задано равным Yes и переопределяет значение, установленное в первой строке. Поэтому между фреймами с именами "в" и "С" все-таки будет нарисована рамка красного цвета и толщиной 10 пикселов.
Примечание
Если рамки между фреймами не прорисовываются, то браузер Netscape не позволит изменять размеры фреймов путем перетаскивания рамок мышью даже при отсутствии параметра NORESIZE. Для Microsoft Internet Explorer ситуация иная.
Заметим, что фреймы без рамок используются не так уж и редко. Следует помнить, что отсутствие рамок не запрещает появление полос прокрутки (рис. 5.14).
Рис. 5.14. Полосы прокрутки во фрейме без рамок
Возможности браузера Microsoft Internet Explorer
Браузер Microsoft Internet Explorer разрешает использовать параметр FRAMEBORDER для тех же целей, как было описано выше, но не позволяет задавать цвет и толщину рамок. Однако в качестве значения параметра FRAMEBORDER допустимо использовать только числовое значение "О" для отмены прорисовки рамки или отличное от нуля числовое значение для прорисовки рамки.
Различие в правилах задания значений параметра FRAMEBORDER для разных браузеров весьма неприятно. Попробуйте, например, задать FRAMEBORDER=Yes. Такая запись верна для Netscape, а для Microsoft Internet Explorer приведет к отсутствию рамки. Предыдущий пример (рис. 5.13) при просмотре в Microsoft Internet Explorer будет представлен без рамки.
Совет
Можно рекомендовать всегда записывать значение параметра FRAMEBORDER в числовом виде, например, FRAMEBORDER=0. Это соответствует правилам записи параметра для Microsoft Internet Explorer, но нарушает правила для Netscape (хотя и верно воспринимается последним).
Примечание
Если рамки между фреймами не прорисовываются, то браузер Microsoft Internet Explorer (в отличие от Netscape) при отсутствии параметра NORESIZE позволит "наощупь" изменять размеры фреймов путем перетаскивания рамок мышью. Поймать место, где должна находиться рамка, можно по изменению формы указателя мыши.
Браузер Microsoft Internet Explorer разрешает использовать дополнительный параметр FRAMESPACING, записываемый в тэге
Приведем пример, результат отображения которого приводится на рис. 5.15.
Рис. 5.15. Пустое пространство между фреймами в Microsoft Internet Explorer
Примечание
К сожалению, во многих описаниях языка HTML ошибочно указывается, что параметр FRAMESPACING должен использоваться в тэге . Microsoft Internet Explorer допускает использование этого параметра только в тэге
Плавающие фреймы
Браузер Microsoft Internet Explorer разрешает использовать уникальный тег
Кроме того, для задания расположения и размеров плавающего фрейма в документе можно использовать следующие дополнительные параметры: WIDTH, HEIGHT, HSPACE, VSPACE, ALIGN. Их назначение и порядок использования совпадает с соответствующими параметрами для встроенных изображений, которые задаются тэгом .
Приведем пример использования плавающих фреймов:
Пример использования концепции плавающих фреймов
СЕМТЕК>
Ваш браузер не позволяет отображать плавающие фреймы
Браузер Microsoft Internet Explorer - первый из браузеров (и пока единственный), который поддерживает так называемые "плавающие" фреймы.
Такие фреймы могут размещаться в любом месте экрана так же, как графические изображения и таблицы.
Фрейм справа от данного текста размещен на странице с помощью
специального тега
Результат отображения данного примера браузером Microsoft Internet Explorer показан на рис. 5.16. Браузеры, не поддерживающие концепцию плавающих фреймов, для данного примера вместо отображения содержимого документа float.htm выдадут текст "Ваш браузер не позволяет отображать плавающие фреймы".
Рис. 5.16. Плавающий фрейм в Microsoft Internet Explorer
Отметим, что концепция плавающих фреймов близка по идеологии к встроенным изображениям или таблицам. Здесь в нужное место HTML-документа целиком встраивается другой HTML-документ.
Совет
В настоящий момент применение плавающих фреймов ограничивается единственным браузером - Microsoft Internet Explorer версии 3.0 и выше. Следует помнить, что пользователи других браузеров (в частности, Netscape) не смогут увидеть содержимого плавающих фреймов.
Средства создания документов, содержащих фреймы
HTML-документ, содержащий фреймы, как и любой другой документ, может быть создан или отредактирован вручную при помощи любого доступного текстового редактора. Большинство специализированных HTML-редакторов либо не имеют возможностей визуального создания фреймов, либо обладают весьма ограниченными возможностями. Существует несколько специальных редакторов, которые ориентированы на создание фреймов. Кратко опишем возможности некоторых из них.
Редактор фреймов FrameGang
Одним из таких редакторов является утилита FrameGang, разработанная австралийской фирмой Sausage Software, которая более известна своим популярным HTML-редактором HotDog.
Информацию об этом программном продукте можно получить по адресу http://www.sausage.com , а также из сборника программных продуктов для Интернета (по адресу http://www.tucows.com или любому другому из нескольких десятков серверов-зеркал, разбросанных по всему миру).
Утилита FrameGang является дополнением к любому HTML-редактору или обычному текстовому редактору, работающему в среде Windows, которая позволяет визуально сконструировать необходимую структуру фреймов и затем сгенерировать соответствующий HTML-код. Получаемый HTML-код через буфер обмена Windows (Clipboard) может быть передан в HTML-редактор. Программа FrameGang позволит быстро построить нужную фреймовую структуру.
Рассмотрим возможности программы. После установки данной программы в Windows и ее запуска предлагается выбрать одну из двух возможных структур фреймов первого (верхнего) уровня - поколонное расположение фреймов (Columns) или построчное (Rows), а также определить их количество. В дальнейшем каждый из фреймов первого уровня может при необходимости быть разбит на несколько фреймов второго уровня. Большее количество уровней фреймов не предусмотрено, однако это не является существенным ограничением, так как на практике редко используется более двух уровней.
Пусть для примера выбрано четыре фрейма, расположенных по колонкам. Далее следует создать структуру фреймов второго уровня, что осуществляется разбиением существующих фреймов в противоположном направлении. Для данного примера фреймы могут разбиваться только по горизонтали. Создание фреймов второго уровня выполняется в пункте меню Add, реализация которого добавляет очередной фрейм к текущему.
Заметим, что смешные картинки во фреймах не несут смысловой нагрузки и служат лишь для заполнения пустого пространства. Их прорисовка может быть отменена в меню Options. Также отметим, что само название фирмы-производителя (sausage - сосиски) и название некоторых ее программных продуктов (HotDog - в переводе не нуждается) определило стиль интерфейса данного пакета - во многих пунктах меню встречается изображение сосисок.
После определения структуры фреймов следует задать их размеры. Это выполняется простым перемещением границ фреймов мышью так же, как это делается для изменения размеров окон системы Windows. Установленные размеры для текущего фрейма отображаются в процентах в окнах с названиями Width и Height. При необходимости задать размеры фреймов не в процентах, а в пикселах или относительных единицах, следует изменить получаемый HTML-код вручную вне программы FrameGang.
Далее для каждого фрейма нужно задать его имя (Name), которое может быть опущено, URL-адрес документа, загружаемого в данный фрейм изначально (Frame URL), а также выбрать значение параметра изменяемости размеров фрейма (Resizeable Frame Border) и параметра прокрутки содержимого фрейма (Frame Scrolling).
В любой момент можно посмотреть создаваемую фреймовую структуры в выбранном внешнем браузере, не выходя из программы FrameGang. Для этого служит кнопка Preview. Задание имени браузера производится в меню Options. После задания всех параметров следует сгенерировать HTML-код, соответствующий выбранной структуре фреймов, который будет записан в буфер обмена Windows (кнопка HTML Compile). Полученный код может быть вставлен из буфера обмена в нужное место HTML-файла при работе в любом редакторе.
Кнопки сохранения (Save) и открытия (Open) файла позволяют сохранять и считывать файл только в специальной кодировке, свойственной программе FrameGang и не предназначенной для иного использования.
Ниже представлен HTML-код, сгенерированный программой FrameGang для описанного примера:
Для получения корректного HTML-документа полученный код достаточно заключить между тэгами и . Можно добавить раздел заголовка документа
, в котором определить нужные данные, например, название документа (напомним, что название документа записывается между тэгамиПрограмма FrameGang позволяет визуально проектировать фреймы, достаточна удобна и проста в эксплуатации, однако не лишена отдельных недостатков. В частности, нет возможности уточнить размеры фреймов, записывая нужные числа в окнах Width и Height, так как в них лишь отображаются размеры, устанавливаемые при перемещении границ фреймов мышью. Не задаются общепринятые параметры фреймов MARGINWIDTH и MARGINHEIGHT. Нет возможности записи файла в текстовом формате на диск, что не дает возможности воспользоваться данной программой автономно.
Редактор фреймов Frame-It
Еще одним специализированным редактором фреймов является программа Frame-It, информацию о которой можно получить по адресу:
http://www.iinet.net.au/~bwh/frame-it.html
Работа с этой программой во многом аналогична предыдущей. Сначала требуется определить основную структуру фреймов и их количество. Далее каждый фрейм при необходимости разбивается на несколько, образуя структуры второго уровня. Так же, как и предыдущей программе, количество уровней вложенности фреймов ограничивается двумя.
Для каждого фрейма задаются все необходимые параметры путем заполнения соответствующих полей. В отличие от предыдущей программы здесь предусмотрено задание значений параметров MARGINWIDTH и MARGINHEIGHT. Кроме того, введен флажок Invisible Frame Borders, установка которого обеспечивает генерацию следующего фрагмента кода:
FRAMEBORDER="NO" BORDER="0" FRAMESPACING="0".
После задания необходимых параметров фреймов можно сохранить
сгенерированный HTML-код в файле или записать его в буфер обмена Windows.
Сгенерированный код будет содержать не только описание структуры фреймов, но и
начальный тег , а также пару тегов
Для определенного примера будет сгенерирован следующий код:
FRAMESРАСING="0">
с фреймовой структурой
Если в данном примере сбросить флажок Invisible Frame Borders, то генерируемый код значительно изменится:
scrolling=auto noresize>
scrolling=auto noresize>
scrolling=auto noresize>
scrolling=auto noresize>
scrolling=auto noresize>
Ваш браузер не может показывать документы
с фреймовой структурой
Информация об использовании фреймов на WWW
Для получения информации о фреймах можно обратиться к следующим адресам на WWW:
http://www.spunwebs.com/sites2c/frmtutor.html
http://union.ncsa.uiuc.edu/HyperNews/get/www/html/guides.html
http://cox.asu.edu/Trial/faq/webfaqs/frame/
http://www.netlingo.com/more/framestarget.html
http://www.aubg.bg/beast/students/raduluc/teach/fr/
http://www.as.net/frame/
http://www.cqi.com/~pmurphey/instruction/
http://www.iwaynet.net/~rtyler/htmltutorial/frames.html
http://edbo.com/frames/
http://bela.fei.tuke.sk/netscape/frames/
http://www.newbie.net/frames/2ed/rnenu.htmtfcontents
http://infoserver.etI.vt.edu/coe/COE_Students/laughon/frame.html
http://www.htmlhelp.com/frames/syntax/
http://www.woodhill.co.uk/html/
http://www.htmlhelp.com/design/frames/
Итак, фреймы.. для чего они нужны и какую пользу в себе несут? Об этом я и постараюсь рассказать в этой главе, ну и естественно о том, как их внедрять и работать с ними..
Часто при создании сайта возникает необходимость открывать в одном окне браузера одновременно несколько HTML документов.. так вот фреймы как раз таки и созданы для того чтобы определить рабочие области для каждого документа. Кроме того, фреймы - это хороший инструмент, с помощью которого можно заниматься версткой страницы, они служат достойной "альтернативой" табличному способу верстки страницы.. в кавычки взял слово "альтернатива" потому, что это совершенно иной способ построения сайта со своими достоинствами и недостатками и его достаточно трудно сопоставлять с доселе привычным построением сайта.. но обо всем по порядку..
Ну что, начнем? Допустим нам необходимо в одном окне браузера открыть сразу три HTML документа и расположить их к примеру вот таким способом:
Что нам для этого нужно? Для начала естественно нам необходимо создать три отдельных html документа которые мы собственно и будем открывать в одном окне.. Пусть первый документ будет нести в себе графическое изображение и будет выполнять роль логотипа назовём его logotype.html , вторым документом будет некое содержание.. назовём menu.html , ну и третьим документ с кучей текста. text.html. Конечно Вы можете придумать свои названия, как впрочем и содержание документов, но пока лучше всё же копируйте мои.. так будет удобнее и мне и Вам.
Итак, есть три файла logotype.html, menu.html и text.html.. которые нам необходимо разместить под одной крышей, а крыши у нас как раз таки ещё пока и нет..
Пишем "крышу", главный документ к которому будем подключать наши файлы. Раз он будет главным, присваиваем ему имя index.html.
Вот привычная для нас структура документа которую мы пережевали ещё в самом начале нашего обучения.. Фреймы ломают сложившиеся стереотипы! Структура фрейм документа имеет вот такой вид:
Отсутствие тега
компенсирует новый тег
Тег
В нашем случае нам необходимо горизонтальное размещение фреймов.. значит пишем так:
Проценты после знака равенства - это не что иное, как размеры наших окошек- фреймов в одном большом окне браузера, у нас предполагается размещение трёх окон - следовательно и значений через запятую тоже три. Вспомните как мы задавали размеры ячеек для таблицы, здесь тот же принцип.. Как и в случае с ячейками таблицы, размеры фреймов можно указывать в процентах от общей площади и в пикселях.
Вот несколько примеров написания:
С размещением документов покончили, теперь собственно осталось их подключить и насладится первым результатом..
Тег и его атрибут src укажет браузеру путь к html документу который следует открыть в отведенном для него месте. У нас имеется три отдельных документа logotype.html, menu.html и text.html теперь к каждому нужно прописать путь, что мы собственно и делаем. (предполагаю, что у Вас все четыре файла находятся в одной папке и пути к ним имеют самую простую запись по типу: )
Файл index.html
Файл logotype.html
Файл menu.html
Меню:
Суп из шампиньонов
Бобы в горшочке по-итальянски
Австралийский летний салат
... ... ...
Файл text.html
куча текста..
В данном примере я выложил все четыре HTML документа где index.html является основным, а остальные три, это подключаемые страницы, каждая из которых в принципе может работать автономно и содержать в себе всё что угодно картинки, таблицы, тексты, ссылки.. сделал я это для того что бы дать Вам понять принцип работы с фреймами. В дальнейших примерах я буду выкладывать лишь головной файл с фреймами, (а то уж больно много места на странице они все вместе занимают), а Вы знайте что у меня "где то там" есть все остальные файлы содержащие в себе графику, тексты, может быть ещё что ни будь.. ну и не отставайте за мной потихоньку редактируйте свои собственные странички к будущему тренировочному сайту.. Не знаю про что Вы будите писать свой, а я тут пообещался помочь одной девушке в написании сайта посвящённого кулинарии..)) так что решил так сказать сразу на двух зайцев замахнуться.. на девушку зайку и сайт..)) как-то так..))
В выше изложенном примере мы расположили все окна горизонтально, поменяв атрибут rows на cols можно расположить их в вертикальном порядке. А как быть, если требуется разместить наши окна
вот так?: или так?: или даже так?:
Выход есть. Разберём на примерах.
Начнём с первого случая.. что мы видим? А видим мы две строки, где вторая поделена на два столбца.
A теперь по порядку:
- в первую строку загружаем наш логотип
- в первом будет меню
- а во втором куча текста
Вообще то говорить столбцы и строки неверно, так как фреймы никакого отношения к таблицам не имеют кроме как визуального подобия, правильно говорить горизонтальные и вертикальные фреймы.. ну это я так изрекаюсь что б Вам понятнее было..
Ну да ладно, смотрим пример:
Во втором случае у нас имеется два столбца в котором второй поделен на две строки, значит будем писать так:
- в первом будет содержание
- логотип
- и основной текст
Третий случай немного посложней, но бояться его не стоит.. тем более что именно такое построение лично я выбрал для сайта про кулинарное искусство, чуть ниже объясню почему. Что мы имеем? три столбца причем во второй столбец по сути заключён наш первый случай..
-в первый столбец загружаем html документ который будет выполнять сугубо декоративную функцию
-
-
-
- в третий столбец загружаем всё тот же файл с декорациями
Посмотрите пример, а потом я объясню почему избрал путь с пятью окнами
Так почему пять окон? Помнится мне, я уже писал про то, что у разных пользователей сети Интернет на мониторах выставлены разные разрешения и соответственно на разных экранах наш сайт будет выглядеть по разному.. и если нет конкретных размеров все наши рисунки, тексты, таблицы что называется "поплывут" у тех пользователей, разрешения мониторов которых отлично от Вашего. Когда мы верстали сайт с помощью таблицы, вопрос с размерами страницы решался при помощи присуждения этой таблице конкретной ширины и высоты, к сожалению, с фреймами так поступить нельзя.. даже если указывать ширину фреймов не в процентах, а в пикселях, всё равно последний столбец растянется на оставшеюся ширину окна браузера и страница, что называется, потеряет "товарный вид". Так как же быть? Приходится идти на маленькие хитрости.. Задав центральному столбцу (в котором у нас собственно и размещена вся страница) размер 800 пикселей мы раз и навсегда определи его ширину, а безразмерные первый и третий столбцы помимо декора выполняют роль своего рода "пружин" на которых подвешен центральный столбец.. Так, у людей с маленьким разрешением монитора эти окна/поля будут узкими, а людей с большим разрешением широкими, таким образом центральный столбец никак не пострадает и теперь мы можем с полной уверенностью размещать в нём какие либо объекты, с точной привязкой по месту, не переживая за их дальнейшую судьбу. Сравните первый пример, где три окна и третий, где их уже пять, неправда ли так лучше?
На этом с размещением и размерами фреймов закончим.. и так здесь долго задержались.. идём дальше.
Приводим фреймы в опрятный вид.
В последнем нашем примере первое, что бросается в глаза, это целая куча полос прокруток, которые стоят где надо и не надо.. Давайте от них избавимся, ну можно и оставить кое где.. Делается это при помощи атрибута scrolling - тега , он может иметь одно из трёх значений:
- no
- yes - всегда показывать,
- auto
scrolling="no" >
scrolling="no" >
scrolling="no" >
Поля фреймов или иначе расстояние от границ фрейма до текста или картинки, как в нашем случае, задаются в пикселях при помощи атрибутов marginwidth и marginheight тега
marginwidth="0" marginheight="0" >
marginwidth="10" marginheight="10" >
Поговорим немного о рамках вокруг наших фреймов.
Если Вы обратили внимание, то в последнем примере наведя курсор на границу фрейма он, курсор то бишь, приобретает другой вид (захватить и переместить) и теперь эту границу можно перетащить в какую либо сторону удерживая левой кнопкой мыши. Иногда такая "мобильность" границ фреймов играет на руку веб-мастеру, но чаще всё же мешает.. Для того, чтобы запретить пользователю играться с размерами окон для тега придумали атрибут noresize
noresize >
noresize >
noresize >
noresize >
noresize >
А вот давно нам знакомый атрибут border
задаёт ширину в пикселях этих самых рамок между фрёймами.. пишется он внутри тега
Фреймы и ссылки.
Настало время оживить наш сайт ссылками, да вот беда, знакомая нам обыкновенная ссылка Бобы в горшочке по-итальянски откроет данный документ в том же фрейме где она и находится, в нашем случае непосредственно в фрейме с содержанием, а само содержание в момент перехода по этой ссылки уйдёт в небытие.. можете взглянуть на корявый пример.. кликнете в нём на любую ссылку.. Что бы впредь такого не происходило, необходимо указывать браузеру в каком фрейме следует открывать необходимый нам документ, ну если конечно Вам и в правду не нужно открывать его в этом же фрейме.
Помнится мы уже знакомились, в главе посвящённой ссылкам, с атрибутами name - имя и target - цель, применяются они также и при работе с фреймами механизм немного изменён а так почти тоже самое. первым делом фрейму в котором мы хотели бы открывать какие либо документы необходимо присвоить индивидуальное имя.
пишется так:
name="osnovnoe" > имя можно придумать любое.. главное его не забыть..
Пишется так:
target="osnovnoe" >Бобы в горшочке по-итальянски
Ну я думаю Вам уже не стоит объяснять, что прежде чем ссылаться на какие либо документы, их необходимо создать.. в моём случае файлы (рецепты) имеют имена text.html, text1.html, text2.html…
Посмотрите пример:
Файл index.html
name="osnovnoe" marginwidth="10" marginheight="10" noresize>
Файл menu.html
Меню:
target="osnovnoe" >Суп из шампиньонов
target="osnovnoe" >Бобы в горшочке по-итальянски
target="osnovnoe" >Австралийский летний салат
... ... ...
Так же как и раньше документ можно открыть в отдельном окне. Напомню, пишется так:
target="_blank" >Бобы в горшочке по-итальянски
Или же присвоив атрибуту target значение _top открыть его в этом же окне браузера, но на весь экран.. "обнулив" при этом всё что бы там не находилось.. пишется так:
target="_top" >Бобы в горшочке по-итальянски
Такой вот сайтик получился.. конечно над ним ещё работать и работать.. к тому же по моёй задумке он будет иметь несколько иную структуру в плане навигации по сайту, в нем будет ёщё целая куча страниц, красивое меню, но что касается фреймовой структуры, думаю она останется прежней..
Плавающий фрейм
Иногда в страницу содержащую в себе не фреймовую структуру необходимо в отдельном окне вставить другой HTML документ или даже ряд таковых документов. Для выполнения этой цели существует тег
Данный тег имеет ряд атрибутов:
src - обязательный атрибут, указывающий путь к открываемой страницеwidth - ширина плавающего фрейма в пикселях или процентах
height - высота плавающего фрейма
scrolling - показ полосы прокрутки
- no - никогда не показывать полосу прокрутки,
- yes - всегда показывать,
- auto - показывать в том случае если она необходима.
- left - слева
- right - справа
- top - выше
- bottom - ниже
- 1 - включить рамку
- 0 - выключить рамку
Всё вместе пишется так:
Пример документа с плавающим фреймом:
Плавающий фрейм
В эту страницу введён так называемый "плавающий фрейм".
В отдельном окне он открывает для показа другой документ html.
… … …
Noframes
Некоторые браузеры не поддерживают фреймовую структуру документа или неправильно её интерпретируют, кроме того зачастую пользователи в настройках своих браузеров умышленно отключают поддержку фреймовой структуры html документа. И хотя процент таких браузеров и пользователей невелик, но тем не менее они есть.
Теперь представьте что Вы построили свой сайт с помощью фреймовой структуры и вот некоторые посетители, может быть сами не подозревая в чем проблема, пытаются открыть Ваш сайт, а их браузер выдает ошибку! Что они подумают о Вашем сайте? я думаю, что то типа: "Фу.. ерунда какая то.. больше сроду сюда не зайду!".
Для того что бы дать понять пользователю, что его браузер/настройки браузера не поддерживают фреймы существует тег
Тег
Результат примера будет заметен, если Ваш браузер и в правду не поддерживает фреймы (тут я надолго задумался.. :) если это так, то зачем вообще читать эту главу?) или же Вы в качестве эксперимента выключили поддержку фреймов в своём браузере.
Тег
С плавающим фреймом всё ещё более просто, достаточно написать нужный текст между
Перед тем как начать создавать страницу с использованием фрёймовой структуры проанализируйте её макет, размеры каждого окна, наличие или отсутствие в них полос прокруток и т. д. После этого можно создавать подключаемые HTML файлы особо не переживая за их взаимное расположение относительно друг друга..
Используйте тег
Здравствуйте, уважаемые читатели блога сайт. Сегодня речь пойдет о фреймах в языке Html. Понятное дело, что начнем мы сначала, а именно с того, что это такое за зверь. Так же поговорим о настоящем (Frame) и будущем (Iframe) этих элементов в языке гипертекстовой разметки текущей версии и в новом стандарте Html 5 при .
В конце статьи, после детального описания процесса создания встроенных фреймов и их классической структуры в Html коде (уже редко используется), мы затронем вопрос актуальности построения сайта на них, а так же обсудим возможные способы их применения в текущий период времени на примере моего блога.
Что это такое и чем отличается Iframe от Frame
Что же это такое? Оказывается, что они могут использоваться не только на сайтах, но и в каких-либо приложениях к программам, но отличаются тем, что окно web страницы или же приложения будет разделено на несколько областей, в каждую из которых загружен какой-то отдельный документ. Причем, эти области фреймов ведут себя не зависимо друг от друга.
Наверное, самый наглядный пример их использования, с которым сталкивались практически все из вас, это так называемые файлы помощи (хелпы), которые имеются у многих программ установленных на вашем компьютере.
В левое окно загружен файл с меню хелпа, а в правом выводится соответствующий выбранному пункту меню документ. Примечательно, что такая структура позволяет не подгружать в левое окно повторно файл с меню при открытии нового документа в правом. Именно в этом и состоит основное преимущество использования фреймов в Html.
Собственно, само название этих элементов следует трактовать именно как самостоятельное окно. С помощью фреймов у нас появляется возможность разбить одно большое окно на несколько фрагментов, которые в свою очередь могут служить приемниками для отдельных независимых друг от друга документов (страниц, текстов, изображений, видео и т.п.).
Как создается фреймовая структура в языке гипертекстовой разметки? Если говорить про стандарт Html 4.01 (по классификации ), который является основным на текущий момент времени, то для этого используются три элемента — Frame, Frameset и Noframes.
Iframe — встроенный фрейм в стандарте Html 5
Если же говорить про стандарт Html 5 (наше будущее, некоторые элементы которого уже поддерживаются многими браузерами), то там тегов Frame, Frameset и Noframes, а равно и классической фреймовой структуры уже не будет, вместо них предусмотрен один единственный тэг Iframe (встроенный фрейм), о котором мы и поговорим в начале, а потом уже все внимание обратим на классическую схему из версии 4.01, которая сейчас, собственно, и используется.
Iframe в отличии от классики, которая рассмотрена ниже, не требует замены тега Body на теги Frameset. Т.е. этот тег можно будет вставлять на обычные страницы, например, внутри параграфа или в любом другом месте. По своей сути этот элемент очень похож уже на рассмотренный нами тег Img.
Он является строчным с замещаемым контентом, потому что ведет себя в точности как строчный элемент, но вот внутри него отображается посторонний внешний контент . Таких элементов в языке Html всего четыре — Img, Iframe, Object и Embed. Поэтому наш герой подразумевает наличие внешнего файла, который будет подгружаться в область, размер которой задается с помощью атрибутов этого тега.
Т.о. Iframe является сточным элементом, в который загружается внешний объект (например, видеоролик). А для указания пути до этого файла, который должен подгружаться на странице, служит специальный атрибут Src. Но в отличии от Img элемент Iframe парный, т.е. имеется еще и закрывающий тег :
В данном примере показан вывод на странице видеоролика с Youtube с помощью Iframe. Для того, чтобы ограничить область фрейма (окна), куда будет подгружаться внешний файл, предусмотрены атрибуты Width и Height , значения которых задаются в пикселах:
Т.е. этот тег создает область, в которую загружается какой-то внешний объект (не важно, с вашего ли сайта или же с другого ресурса). Ширина и высота области задаются с помощью Width и Height, а в атрибуте Src указывается путь до этого объекта.
Все эти атрибуты элемент Iframe унаследовал от подобных ему строчных тегов с замещаемым контентом (типа уже упомянутого выше Img). Ну, и еще у картинок он взял и атрибуты Hspace и Vspace , которые позволяют задать отступы от границ фрейма до обтекающего его текста.
Так же показательно, что выравнивание встроенного фрейма осуществляется абсолютно так же, как мы это могли видеть при изучении картинок в Html — . Все тот же Align , но уже для тега Iframe с возможными значениями Bottom, Top, Middle, Left и Right.
Но этот элемент взял так же и несколько атрибутов от тэга Frame из классической фреймовой структуры, о которой мы очень и очень подробно поговорим ниже по тексту. К таким атрибутам относится Name, значение которого можно использовать в качестве значения для того, чтобы нужный вам документ при переходе по ссылке открывался именно в окне этого фрейма (подробности читайте ниже).
Так же в Iframe из тега Frame перекочевал атрибут Frameborder, который имеет только два значения — либо 0 (рамка вокруг фрейма не отображается), либо 1 (рамка видна). По умолчанию используется значение Frameborder=1, поэтому для ее удаления вам потребуется прописать Frameborder="0":
Из Frame в этот элемент перешел еще и атрибут Scrolling, имеющий по умолчанию значение Auto — полосы прокрутки во фрейме будут появляться по мере необходимости, когда контент будет больше по размеру окна, предназначенного для его отображения.
Ну, и атрибуты Marginwidth и Marginheight тоже перешли из элемента Frame. Они будут подробно рассмотрены ниже по тексту, но в двух словах — они позволяют задать отступ по ширине и высоте от краев фрейма до контента, который в него помещается.
Как я уже упоминал, наглядным примером использования Iframe является :
Вставив Iframe напрямую в web страницу, вы получите вывод ролика с ютуба. Делаем вывод, что этот элемент является помесью строчных элементов с замещаемым контентом и, собственно, классических фреймов, о которых сейчас и пойдет речь.
Фреймы на основе тегов Frame и Frameset — их структура
Итак, создание классической фреймовой структуры начинается с того, что вы прописываете в Html коде вместо открывающего и закрывающего тега Body, который обычно должен присутствовать в любом документе, заменяющий его контейнер на основе элементов Frameset .
Принципиальным моментом является как раз то, что элемент Body в этом случае использовать нельзя — либо Body (для обычного документа), либо Frameset (при создании фреймовой структуры документа):
Каждый фрейм, который мы с вами формируем внутри главного, создается с помощью отдельного элемента Frame . Этот тег является одиночным и в нем мы задаем путь до того документа, который должен будет подгружаться в это окно.
Третий элемент, который мы еще с вами не затронули — это Noframes . Он парный и позволяет написать внутри себя какой-то текст, который будет обработан браузером и отображен на web странице только в том случае, если этот самый браузер (или другое устройство отображения) не поддерживает фреймы. Это может произойти, например, в случае использования какого-нибудь обозревателя для мобильных устройств.
Обычно в Noframes добавляют не только информацию о сложившейся ситуации с невозможностью обработки фреймовой структуры, но и добавляют так же возможность перейти на другие страницы, где можно будет продолжить работу без их использования. Сказать о нем что-то еще трудно, поэтому продолжим.
Получается так, что элемент Frameset, используемый заместо тега Body, занимает все место, которое отведено для области просмотра, а уже внутри этой области будут создаваться фреймы с помощью отдельных элементов Frame. В связи с этим возникает вопрос — как делить область просмотра между отдельными окнами или, другими словами, как задать размер каждого из них.
Делается это с помощью добавления соответствующих атрибутов к элементу Frameset. Их имеется целых два — Cols и Rows . Cols задает разделение большого окна на вертикальные фреймы или же колонки, а Rows позволяет разделить его на горизонтальные окна или же строки.
Создание структуры на основе Frameset и его атрибутов Cols и Rows
В качестве значений для Cols и Rows Html тега Frameset выступают числа, проставленные через запятую (без пробелов). Эти числа задают пропорции тех окон, которые мы с вами хотим получить в результате. Следовательно, сколько будет написано чисел через запятую в Cols или в Rows, столько у нас фреймов и должно будет получиться в результате.
Например, с помощью такой записи мы получим три вертикальных колонки, которые по ширине будут соответствовать пропорциям 2:5:3.
Раз мы задали пропорции для трех фреймов, то мы должны будем обязательно прописать между открывающим и закрывающим тегом Frameset три элемента Frame, хотя бы и без указания дополнительных атрибутов:
В результате наша фреймовая структура, состоящая из трех пустых окон, будет выглядеть так:
В данном примере размеры окон (Frame) мы задавали с помощью процентов, которые берутся от ширины области просмотра (это в случае использования Cols) или от ее высоты (Rows). При изменении области просмотра процентное соотношение между размерами фреймов будет сохраняться. Но вместо процентов можно использовать и просто числа, которые будут означать . Тут, думаю, тоже никаких трудностей в понимании возникнуть не должно.
Но есть в обозначениях размеров и довольно необычный вариант, который выглядит как звездочка «*» . Причем, может стоять как просто «*», так и звездочка с цифрой впереди, например, так «3*». Хитрая штуковина, очень похожая на проценты и означающая, что мы делим пространство для Frame пропорционально.
Давайте посмотрим на примере. Теперь выберем деление области просмотра на горизонтальные строки с помощью Rows:
Что означает эта запись? Вся область просмотра, доступная нам по вертикали, будет разделена на три строки. Высота первой будет взята в 200 пикселей, второй — в 500, а вот третья строка будет занимать все оставшееся пространство по высоте, т.к. в качестве ее размера использовалась «*».
Что примечательно, значение «*» и «1*» означают одно и то же — все оставшееся пространство мы делим на один и эту одну часть отдаем данному фрейму (ну, то есть все оставшееся пространство).
А вот посмотрите что получится, если использовать значение «*» с цифрой для деления в пропорции:
Как вы думаете, каковы должны будут получиться размеры Frame в этом случае? Понятно, что вторая строка будет однозначно иметь высоту в 100 пикселей. Но как поделится оставшееся пространство по высоте между третьей и первой строкой?
Это довольно просто сосчитать — достаточно прибавить к двум (2*) четыре (4*) и разделить на этот знаменатель (помните дроби из школьной программы) двойку и четверку. Т.е. мы получим, что первая колонка с фреймом займет одну треть от оставшегося пространства по высоте, а третья колонка — две трети. Или же, другими словами, третья будет в два раза выше первой:
Можно использовать все три способа задания размеров окон фреймов в одном атрибуте, например:
В результате мы получим первую колонку Frame шириной в десять процентов от всей доступной области, вторую — 100 пикселей, а три оставшихся будут иметь ширину в пропорциях четыре, три и две девятых от оставшегося пространства по ширине. Вот так вот все просто и наглядно.
Если вы хотите разбить основное окно не только на горизонтальные и вертикальные фреймы, а, например, на их комбинации, то можно будет для этого использовать вложенную структуру элементов Frameset отдельно для колонок и отдельно для строк. Например, чтобы получить структуру показанную на скриншоте чуть ниже, то достаточно использовать такую конструкцию:
Т.е. сначала мы разбиваем с помощью «frameset cols=»20%,80%"« все доступное пространство на две колонки по вертикали и задаем тегом „frame“ содержимое правой колонки, а вот вместо того, что добавить элемент „frame“ для левой колонки, мы открываем новый „frameset rows=“10%,*»".
И уже с помощью него разбиваем правую колонку на две строки с фреймами, содержимое которых задаем с помощью двух тегов «frame», после чего закрываем оба контейнера «frameset». Все просто и логично.
Указываем путь в атрибуте Src элемента Frame
Но это мы все говорили про элемент Frameset и его атрибуты Cols и Rows, с помощью которых формируем структуру и задаем их размеры. Теперь давайте разберемся с тем, как выводить в нужных фреймах нужные документы и как настроить взаимодействие между их окнами.
Итак, как же мы управляем внешним видом создаваемых окон? Все это заложено в атрибутах тега Frame. Первый из них, о котором стоит упомянуть — это Src . Мы уже встречали его в теге Img, когда рассматривали вставку изображений в Html код. Суть его не изменилась и он по-прежнему позволяет указать путь до того документа, который должен быть загружен во фрейм.
Путь до документа в Src может быть указан в виде . Относительные пути обычно используются для документа, который расположен на вашем же ресурсе, а вот абсолютные вам понадобятся, когда вы захотите загрузить в окно фрейма документ с другого сайта.
Если не будет прописан атрибут Src с указанием пути до нужного документа, то в окно будет загружен пустой документ. Лично я когда-то делал подобную вещь для своего блога (как дополнительный элемент навигации) и при этом создавал на сервере хостинга отдельную папку для него и помещал туда не только Html файлик с фреймовой структурой (который назвал index.html), но и все подгружаемые в различные окна документы, а так же файлы изображений, которые использовались в качестве фона.
Поэтому мне было проще всего использовать именно относительные ссылки в атрибуте Src тега Frame:
Что примечательно, если вы замените все приведенные в этом коде ссылки с относительных на абсолютные (типа https://сайт/navigator/joomla.html) и откроете этот файл в браузере, то указанные во Frame документы будут подгружены с моего сервера и вы увидите аналогичную картинку в своем браузере. Причем не важно, где будет лежать ваш файл с фреймовой структурой (index.html) — на вашем компьютере или же на хостинге.
В приведенном на рисунке примере, в окно левого фрейма у меня загружается страничка с неким меню, которое представляет из себя обычный . Но не суть важно как формируется меню, а важно то, что произойдет после нажатия на любую из его ссылок.
Если вы проделаете это, то все произойдет именно так, как надо — документ откроется в правом нижнем окне. Но для этого мне пришлось применить одну небольшую хитрость, ибо в варианте по умолчанию документ открывался на весь размер окна, заменяя собой фреймовую структуру, что мне было вовсе не нужно, ибо исчезало навигационное меню в левом и верхнем фреймах.
Как открывать документы по ссылке во фрейме
Итак, когда мы говорили про гиперссылки, то упоминали такой атрибут тега «A», как Target=_blank. Помните для чего он нужен? Правильно, чтобы открывать документ, на который проставлена ссылка, в новом окне. По умолчанию же, он должен открываться в том же самом окне, что эквивалентно target="_self".
Но этим возможности Target не ограничиваются. Оказывается можно добавлять в него значение в виде названия фрейма , которое предварительно указывается в специальном атрибуте Name тега Frame. Тогда документ по этой ссылке будет открываться не в том же окне, занимая все его пространство, а в указанном вами Frame. Понятно? Если не совсем, то сейчас будет понятно при разборе примера.
Итак, вернемся к нашему примеру приведенному на расположенном чуть выше рисунке. Нам нужно открывать страницы по ссылкам из левого окна в правом нижнем (большом) фрейме. Следовательно, для начала нужно этому большому окну дать имя с помощью атрибута Name в теге Frame.
Сделали и назвали его «ktona». Теперь можно смело открывать тот файл, что подгружается в качестве меню в левое окно и добавлять ко всем тегам A в нем атрибут Target="ktona":
История появления Joomla и компонента VirtueMart
Конечно же, с помощью инструмента поиска и замены в проставить его для всех гиперссылок будет не трудно, но зачем же излишне загружать код, когда у нас есть прекрасная возможность использовать специальный тег Base , о котором мы уже упоминали все в той же статье про гиперссылки, когда говорили про использование Target blank.
Достаточно лишь поставить между открывающим и закрывающим тегами Head элемент base target="ktona" и все ссылки в Html коде этого документа будут открывать новые страницы в указанном фрейме под названием «ktona»:
Кстати, если рассматривать мой когда-то существовавший инструмент в качестве примера, то нужно еще сделать так, чтобы все ссылки из верхнего горизонтального окна открывали бы свои страницы именно в левом вертикальном фрейме, которое служит у меня левым меню. Что нужно для этого сделать?
Ну, во-первых, нужно дать имя левому вертикальному фрейму:
А в файле, который загружается в верхнее окно (gor.html), нужно добавить элемент base target="gor":
Все, теперь мы сделали все как надо. Все документы по ссылкам из верхнего фрейма открываются в левом окне, а все ссылки уже из него будут открывать документы в центральном и самом большом Frame. По-моему, все просто и логично.
Атрибуты тега Frame для настройки внешнего вида окон
Давайте теперь посмотрим, какие атрибуты кроме Src и Name можно использовать в теге Frame для настройки внешнего вида фреймов. Начнем с Scrolling . С помощью него мы можем настроить отображение полос прокрутки для каждого окна вашей фреймовой структуры в отдельности.
Scrolling имеет значение по умолчанию Auto — браузер будет автоматически решать, на основе размера подгружаемого во фрейм документа, отображать полосу прокрутки или нет. Если документ не будет полностью помещаться в окно, то появится полоса прокрутки, позволяющая просмотреть его весь до конца.
Так же в качестве значений для Scrolling можно использовать значения Yes (полосы прокрутки в окне будут отображаться всегда, даже если документ полностью влезает в него) и No (полосы прокрутки вообще никогда появляться не будут, даже если часть документа не влезет).
Я в своем, когда-то существовавшем инструменте, использовал значение по умолчанию Auto и полосы прокрутки во фреймах появлялись по мере необходимости:
Следующий атрибут тега Frame — Noresize — является одиночным (у него нет значений). Прописав его, вы тем самым запретите изменение его размеров, которое по умолчанию осуществляется простым перетаскиванием границы фреймов мышью.
При подведении курсора мыши к границе вы увидите, что курсор превратится в двунаправленную стрелку и теперь, нажав на левую кнопку мыши, можно передвигать границу по вашему желанию. Noresize накладывает на это своеволие запрет (при подведении курсора мыши к границе окон, двунаправленную стрелочку вы уже не увидите).
Еще один визуальный атрибут — Frameborder . C помощью него вы можете указать — рисовать рамку (границу) между фреймами или же не рисовать. Frameborder может иметь только два возможных значения — либо 0 (рамку не рисовать), либо 1 (границу отображать). По умолчанию, естественно, используется значение 1.
Есть одна тонкость. Если вы хотите убрать видимую рамку, то вам придется добавить Frameborder=0 во все теги Frame тех фреймов, видимые границы между которыми вы хотите убрать.
Ну, и еще нам осталось рассмотреть пару атрибутов тега Frame — Marginwidth и Marginheight , которые задают отступы по ширине (справа и слева) и высоте (сверху и снизу) от границ окна до контента загруженного в него (число означает количество пикселов отступа):
Почему нельзя делать сайт на фреймах?
Давайте посмотрим в чем заключается принципиальный недостаток классических структур, который по сути ставит крест на их использовании при создании сайта. Он состоит в том, что по этой фреймовой структуры невозможно отследить ее состояние .
У сложных структур могут быть тысячи различных состояний (варианты документов открытых в различных окнах фреймов), но при этом Url адрес этой самой структуры не меняется. Из-за этого будет невозможно пользоваться закладками браузера или же отправлять ссылки на понравившиеся страницы другим пользователям. Почему?
Потому что адрес остается неизменным и при открытии его из закладок браузера, или же из письма электронной почты, вы получите страницу со стартовым состоянием фреймовой структуры, а не то ее состояние, которое вы хотели бы сохранить.
Хотя, конечно же, эта проблема решаема, но уже не средствами Html, а с помощью серверных (например, Php) или клиентских языков (ДжаваСкрипт) программирования, и решения эти будут работоспособными не на все сто процентов. Такие решения, по сути, позволяют дописывать к Url адресу фреймовой структуры дополнительные данные о ее текущем состоянии, но сделать это не просто, а надежность будет не абсолютной.
Это первый минус использования фреймов для создания сайтов и очень весомый, но есть и еще один огромный минус. Поисковики, конечно же, уже давно научились индексировать их и извлекать из них адреса тех документов, которые подгружаются в их окна. Проблема в другом.
Когда пользователь переходит из поисковой выдачи Яндекса или Google на ваш сайт, построенный на базе фреймовой структуры, то откроется только тот документ, который загружался в один из фреймов, а не вся структура. Понимаете, о чем я говорю?
Пользователь увидит документ и не увидит навигации по вашему сайту , ибо она будет зашита в других окнах, а они подгружаются только в составе всей структуры.
В итоге сайт, построенный на фреймах, становится просто не юзабельным. Хотя опять же есть решения этой проблемы на базе серверных скриптов, когда будет осуществляться редирект с адресов отдельных документов на фреймовую структуру находящуюся в нужном состоянии, но это опять же очень сложно и не всегда надежно.
В общем, вывод можно сделать однозначный — создавать сайты на фреймах не нужно . Но зато они постоянно используются для создания хелпов для различных приложений, ну и еще где-то по мелочи могут пригодиться.
Например, я создал фреймовую структуру, которую обозвал «Навигатор» (сейчас ее временно убрал) и которая стала своеобразным развернутым внешним меню для моего блога, которое, как мне кажется, должно упростить работу с ресурсом и , а следовательно и улучшить , которые сейчас «без балды» очень и очень сильно влияют на продвижение сайта.
Но, правда, во избежании каких-либо проблем с поисковыми системами, я закрыл от всю эту фреймовую структуру, а так же добавил на всякий случай во все ее Html файлы мета тег Rodots с запретом их индексации:
Но все эти ограничения касаются только структур на тегах Frame и Frameset, а встроенные фреймы на тегах Iframe не имеют никаких видимых недостатков, и их вполне можно и даже нужно использовать на своих проектах, хотя бы для вставки видеороликов с Ютуба.
Удачи вам! До скорых встреч на страницах блога сайт
посмотреть еще ролики можно перейдя на");">
Вам может быть интересно
Директивы комментариев и Doctype в Html коде, а так же понятие блочных и строчных элементов (тэгов)
Embed и object - Html теги для отображения медиа контента (видео, флеш, аудио) на веб страницах
Img - Html тег для вставки картинки (Src), выравнивания и обтекание ее текстом (align), а так же задания фона (background)
В html есть один интересный тег, с помощью которого можно на свою веб-страничку вставить другую, причем она будет выглядеть так, как будто вшита в вашу. Это заметка о том, как вставить в html iframe.
Вставка iframe
Итак, с помощью этого парного тега можно вставить в свою статью страницу с любого веб-сайта в интернете. Давайте рассмотрим вот такой фрагмент кода:
Как видите, все параметры вставки задаются в атрибутах тега. О первых двух, я думаю, вам объяснять ничего не надо – это ширина и высота нашего фрейма, в котором будет находиться нужная страничка. Размеры нужно подбирать исходя из ширины вашего контентного блока.
Адрес нужной страницы задается в атрибуте src . В нем нужно написать полный адрес до сайта/веб-страницы. Следующий атрибут – имя фрейма. Тут можно написать произвольное значение. Наконец, scrolling отвечает за появление полос прокрутки, а его значение auto делает так, что прокрутка появится только при необходимости. Также тут можно задать значение no . В этом случае полосы прокрутки не будут появляться, но тогда и прокрутить страницу нельзя будет — вы сможете только просмотреть ее фрагмент, на сколько хватит заданной высоты.
Остальные параметры при необходимости вы можете задать через css. Например, это могут быть отступы или рамка.