Iframe и Frame — что это такое и как лучше использовать фреймы в Html. Использование фреймов в HTML Использование фреймов
Чтобы сделать сайт более функциональным, разместить большое количество информации и ссылок в наиболее удобной для посетителя форме, вовсе необязательно использовать flash-технологии. Все это возможно силами языка html, на котором можно создать фреймы.
Говоря обывательским языком, фреймы – это дополнительные полосы прокрутки в одном окне. Попадая на сайт, посетитель видит на одной и той же странице как бы сразу два окна – один, как правило, с пунктами меню или иной важной информацией, а другой – с контентом (текстом, ценами и т.д.). В этом случае посетитель может с большим удобством просматривать достаточно объемные страницы и иметь перед глазами самую важную информацию одновременно.
Если углубиться в детали, то страница с фреймами состоит, как минимум, сразу из трех html-страниц – двух видимых пользователю и одной служебной (координирующей показ фреймов). Видимые страницы и являются фреймами, на которые можно попасть и по отдельности, и одновременно.
Несомненно, важным преимуществом использования фреймов является высокое качество юзабилити. Интерфейс страницы становится в разы удобнее, чем при использовании стандартных способов разметки.
В свое время, 5-6 лет назад, фреймы завоевали популярность среди многих вебмастеров. Сегодня они используются только на тех сайтах, где без них обойтись просто невозможно, так как, к сожалению, фреймы имеют существенные недостатки в плане продвижения.
Фреймы - хорошо или плохо?Рассматривать полезность фреймов можно с трех позиций – с позиции пользователя, с позиции seo-специалиста и вебмастера.
В первом случае отношение к фреймам неоднозначное. С одной стороны, без них иногда просто не обойтись, и они с успехом заменяют открывающиеся в других окнах служебные страницы. Да и юзабилити больших по размеру страниц фреймы делают только лучше, ведь пользователь может в любой момент воспользоваться меню в другом окне.
С другой стороны, они не очень-то и улучшают дизайн страницы. Довольно сложно добиться хорошего внешнего вида, если используются фреймы. И, конечно, далеко не все браузеры поддерживают фреймы, что может оттолкнуть целую армию потенциальных покупателей, клиентов или просто посетителей.
С позиции вебмастера использование фреймов облегчает составление страниц и доведение до ума интерфейса. Ведь куда проще создать одну страницу со всем меню и другой важной информацией, чем вмещать этот контент на каждую страницу сайта. Впрочем, на этом упрощения заканчиваются и начинаются сложности, о которых неспециалисту знать необязательно. Тем более, что сейчас уже почти никто с чистым html не работает – CMS позволяют делать все автоматически.
Позиция seo-специалиста куда более жесткая. Фреймы просто не пропускают поисковых роботов дальше главной страницы. Конечно, существуют некоторые хитрости, которые позволяют индексировать и внутренние страницы сайта, однако все же это именно «хитрости», которые не одобряет ни одна поисковая система .
Влияние фреймов на раскрутку сайта.Каким бы опытным ни был специалист по раскрутке сайтов , он не сможет дать никаких гарантий в продвижении, если на ресурсе используются фреймы. К сожалению, данная технология входит в «черный список» элементов, усложняющих поисковое продвижение, наряду с flash и ворованным контентом. Но последний еще может быть не замечен, а вот о фреймах такого не скажешь.
Итак, как и чем влияет использование фреймов на раскрутку?
Влияние это серьезное. Дело в том, что именно на фреймах расположены все важные ссылки на внутренние страницы сайта. И для того, чтобы их прописать, верстальщику не нужно использовать теги …. А именно по этому тегу поисковой робот и определяет, что перед ним – ссылка, по которой можно зайти на другую страницу и проиндексировать ее (либо добавить к ее ссылочному весу еще пару «хлебных крошек»).
Поисковыми роботами индексируется только первая – главная – страница, на которую они попадают с посторонних ресурсов. Другие страницы остаются закрытыми для Яндекса и Гугла – ведь даже с других сайтов на них невозможно поставить ссылку из-за того, что фреймы скрывают истинные адреса страниц.
Продвигать эффективно одну главную страницу сегодня уже невозможно – на ней невозможно указать все запросы , да и ПС будет куда подозрительнее относиться к такому «одностраничнику».
Конечно, «народные умельцы» уже придумали способ проиндексировать внутренние страницы, поставив ссылки на них в установочный документ фреймов, да и адреса все-таки можно узнать, открыв страницу фрейма отдельно. Но нужны ли все эти сложности, если, отказавшись от таких технологий, можно добиться большего?
Несмотря на то, что сайты с фреймами встречаются все реже, изучение HTML было бы неполным без рассмотрения темы о фреймах. К тому же фреймы в каком-то смысле заняли свою нишу и применяются для систем администрирования и справки. Там, где недостатки фреймов не имеют особого значения, а преимущества наоборот, активно востребованы.
Для создания фрейма используется тег , который заменяет тег в документе и применяется для разделения экрана на области. Внутри данного тега находятся теги , которые указывают на HTML-документ, предназначенный для загрузки в область (рис. 13.1).
Рис. 13.1. Пример разделения окна браузера на два фрейма
При использовании фреймов необходимо как минимум три HTML-файла: первый определяет фреймовую структуру и делит окно браузера на две части, а оставшиеся два документа загружаются в заданные окна. Количество фреймов не обязательно равно двум, может быть и больше, но никак не меньше двух, иначе вообще теряется смысл применения фреймов.
Рассмотрим этапы создания фреймов на основе страницы, продемонстрированной на рис. 13.1. Нам понадобится три файла: index.html — определяет структуру документа, menu.html — загружается в левый фрейм и content.html — загружается в правый фрейм. Из них только index.html отличается по структуре своего кода от других файлов (пример 13.1).
Пример 13.1. Файл index.html
Фреймы
В случае использования фреймов в первой строке кода пишется следующий тип документа.
Данный указывает браузеру, что он имеет дело с фреймами, эта строка кода является обязательной. Контейнер содержит типовую информацию вроде кодировки страницы и заголовка документа. Вот только учтите, что заголовок остается неизменным, пока HTML-файлы открываются внутри фреймов.
В данном примере окно браузера разбивается на две колонки с помощью атрибута cols , левая колонка занимает 100 пикселов, а правая — оставшееся пространство, заданное символом звездочки. Ширину или высоту фреймов можно также задавать в процентном отношении, наподобие таблиц.
В теге задается имя HTML-файла, загружаемого в указанную область с помощью атрибута src . В левое окно будет загружен файл, названный menu.html (пример 13.2), а в правое — content.html (пример 13.3). Каждому фрейму желательно задать его уникальное имя, чтобы документы можно было загружать в указанное окно с помощью атрибута name .
Пример 13.2. Файл menu.html
Навигация по сайту
В данном примере серый фон на странице задается с помощью стилей, о которых речь пойдет далее.
Пример 13.3. Файл content.html
Содержание сайта
СОДЕРЖАНИЕ
Рассмотрим более сложный пример уже с тремя фреймами (рис. 13.2).
Рис. 13.2. Разделение страницы на три фрейма
В данном случае опять используется тег , но два раза, причем один тег вкладывается в другой. Горизонтальное разбиение создается через атрибут rows , где для разнообразия применяется процентная запись (пример 13.4).
Пример 13.4. Три фрейма
Фреймы
Как видно из данного примера, контейнер с атрибутом rows вначале создает два горизонтальных фрейма, но вместо второго фрейма подставляется еще один , который повторяет уже известную вам структуру из примера 13.1. Чтобы не появилась вертикальная полоса прокрутки, и пользователь не мог самостоятельно изменить размер верхнего фрейма, добавлены атрибуты scrolling="no" и noresize .
Фреймы – это прямоугольные области экрана, каждая из которых содержит свой собственный HTML-документ. Фреймы прекрасно подходят для оформления следующих документов:
Обычные фреймы на данный момент считаются устаревшей технологией и не поддерживаются в HTML5. Не используйте обычные фреймы в своих проектах! В HTML5 тегов frame , frameset и noframes уже просто нет, вместо них предусмотрен один единственный тег iframe (встроенный или плавающий фрейм).
ТегТег - заменяет тег и используется для разделения экрана. Имеет закрывающий тег.
АтрибутыВ отдельном теге имеет смысл использовать только один из атрибутов – COLS или ROWS. Это означает, что фреймовая структура будет состоять или только из столбцов, или только из строк. Чтобы создать строки внутри столбцов или столбцы внутри строк, вам потребуется вложенные контейнеры ….
Пример
Результат:
Обратите внимание также на различие в порядке нумерации фреймов.
ТегТег , помещенный в контейнер …, определяет, что именно должно отображаться в конкретном фрейме. Не имеет закрывающего тега.
Атрибуты
В следующем примере экран разбивается на две вертикальные области. В меньшей левой части находится оглавление, а в правую будут загружаться все остальные HTML-документы. В файле оглавления находятся простые текстовые гиперссылки на соответствующие разделы. Чтобы все работало, необходимо создать HTML-документы в файлах cosm.htm, eat.htm, perf.htm, massage.htm и manic.htm.
Пример Оглавление- Товары
- Косметика
- Пищевые добавки
- Парфюмерия
- Услуги
- Массаж
- Маникюр
Тег избавит вас от необходимости повторять атрибут TARGET в каждой отдельной гиперссылки, если все они указывают на одно и то же окно фрейма. Для этого надо поместить тег с атрибутом TARGET в контейнер ….
Использование тега даст возможность уменьшить размер файла оглавления left.htm предыдущего примера.
Пример Оглавление- Товары
- Косметика
- Пищевые добавки
- Парфюмерия
- Услуги
- Массаж
- Маникюр
Атрибут TARGET каждой конкретной ссылки замещает одноименный атрибут тега .
Пример Оглавление- Товары
- Косметика
- Пищевые добавки
- Парфюмерия
- Услуги
- Массаж
- Маникюр
Как уже упоминалось, имена фреймов не могут начинаться с символа подчеркивания, так как с него начинаются служебные имена, передающие броузеру особую информацию. Ниже перечислены специальные имена, каждое из которых используется для достижения определенного эффекта.
В основном эти служебные имена предназначены для того, чтобы тем или иным способом "вырваться" из текущей фреймовой структуры. Поэкспериментируйте с ними, чтобы понять, как можно загружать документы в различные окна.
ТегВ HTML 4.0 появились плавающие (или встроенные) фреймы. С помощью тега можно поместить один фрейм в обычный HTML-документ. Причем контейнер … здесь не нужен.
Закрывающий тег обязателен!
АтрибутыОпределяет, что будет показано в окне браузера если он не поддерживает фреймы.
Ваш браузер не поддерживает плавающие фреймы!
Как загрузить фрейм без дополнительных файлов?Чтобы загрузить фрейм без использования внешних файлов, необходимо положить в переменную HTML-код фрейма, а затем в качестве SRC тега указать "javascript:parent.имя переменной ".
var varFrame = " HTML-код "; ...
Проблема адресной строки при фреймовой структуре сайтаПри использовании фреймов на сайте используется одна страница, которая указывает местоположение фреймов.
Приведём пример такой страницы:
...
После загрузки этой страницы происходит загрузка информации во фреймы. Внутри этих фреймов происходят все переходы пользователя по страницам сайта. В адресной строке всегда отображается только путь к начальной странице, который не изменяется при переходах. Посетитель не знает, где он находится в данный момент.
Если посетитель сразу попадает не на главную страницу сайта (например, из поисковика), то это не приводит к воссозданию общей структуры фреймов. Это является причиной того, что владелец сайта не может указать адрес на внутреннюю страницу сайта.
Есть несколько решений этой проблемы
Ранее бал рассмотрен пример фреймовой структуры. Будем рассматривать различные способы решения этой проблемы именно на нём.
Идея заключается в следующем: при загрузке страницы, содержащей информационную часть, будем проверять окружение страницы и, если требуемая фреймовая структура отсутствует - создадим её при помощи скрипта.
Возможны три случая:
В первом случае после выполнения проверки никаких действий не требуется. Второй и третий практически идентичны, поэтому далее будем рассматривать только второй случай.
И так, посетитель попадает "куда не надо". В самое начало страницы вставляем скрипт, который будет создавать фреймовую структуру.
Реализация решения возможна как на стороне клиента, так и на стороне сервера. Основной недостаток реализации на стороне клиента очевиден - зависимость от возможностей и настроек клиента. Например, на компьютере пользователя запрещено выполнение скриптов. Второй вариант не будет работать, если на сервере нет поддержки PHP .
JavaScript-решение.При таком подходе есть ограничение - не все браузеры поддерживают JavaScript , а в ряде случаев пользователи сами отключают скрипты.
Вначале проверяем окружение страницы, а затем, в случае отсутствия требуемой фреймовой структуры, создаём её.
Создадим файл frame.js :
If (window.name != "main") { window.name="root"; document.write(""); document.write(""); document.write(""); document.write(""); }
Вначале мы проверяем название окна, в который загружается страница: if (window.name != "main") . Если имя окна и название фрейма не совпадают, значит надо создать фреймовую структуру. Это делается динамически с использованием метода write объекта document .
К каждой странице сайта подключаем файл frame.js . Теперь страницы сайта будут иметь такую структуру:
... ...
При таком подходе к решению данной задачи исчезает необходимость в файле, содержащем фреймовую структуру.
PHP-решениеПри таком подходе сайт станет доступным большему числу посетителей.
Проверять окружение страницы будем по другому (не так, как при использовании JavaScript ). Загрузку документа во фрейм будем выполнять с параметром frames=yes . При открытии страницы проверяем этот параметр, и в случае необходимости динамически создаём фреймовую структуру. Ниже приведён код, который за это отвечает.
Помещаем код в файл frames.php . Теперь необходимо подключить его к каждой странице сайта. Ниже приведён пример такой страницы.
frames ...
В данном случае, как и при реализации на стороне клиента нет необходимости отдельно создавать HTML документ, описывающий фреймовую структуру.
.
Как мы знаем, в одном окне просмотра браузера мы не можем одновременно загрузить два HTML-документа. Таким образом, если у нас на всех страницах есть одинаковое меню навигации, то абсолютно одинаковый фрагмент кода пользователь будет загружать каждый раз, когда будет переходить с одной Web-страницы сайта на другую. Даже если само меню невелико, это не самый удобный вариант, так как те каналы связи, которые есть у российских пользователей, не слишком велики, и загрузка меню может занять как минимум несколько секунд. Можем ли мы сделать так, чтобы неизменяемые элементы сайта всегда оставались в окне просмотра пользователя без перезагрузки? Можем.
Мы можем создать документ, который разобьет одно окно просмотра на несколько прямоугольных областей, в каждой из которых будет отображаться один HTML-документ. Эти прямоугольные области, каждая из которых является, по сути, отдельным окном просмотра, и называются фреймами.
Таким образом, мы можем оставить левое и/или верхнее меню навигации постоянно находиться в окне просмотра, а перезагружать только ту часть сайта, которая необходима.
Как любое окно просмотра, фреймы могут обладать полосами прокрутки, которые позволяют пользователю увидеть все содержимое фрейма, если оно не умещается полностью в видимой зоне. Именно эта особенность фреймов и вызывает постоянные споры между Web-мастерами. Кто-то утверждает, что подобные элементы управления не должны находиться во внутреннем пространстве основного окна просмотра, так как они занимают бесценное пространство и рассеивают внимание пользователя. Кто-то утверждает, что эти недостатки не слишком большая цена за облегчение перезагрузки Web-страниц в условиях медленных каналов связи. Так или иначе, вопрос о возможности применения фреймов каждый должен решать самостоятельно.
В HTML предусмотрено два вида фреймов: обычные, и, так называемые, "плавающие". Если мы применяем обычные фреймы, то создается документ, который все окно просмотра разбивает на фреймы, и в них уже отображаются те или иные HTML-документы. Если же мы используем плавающий фрейм, то его можно включать в обычный HTML-документ без каких-либо особых ухищрений. Разницу между двумя этими типами фреймов мы увидим на примере.
Документ с фреймовой структурой создается при помощи тега и его закрывающего близнеца . Внутри этих двух тегов размещаются конструкции объявления отдельных фреймов и информация, отображаемая в окне просмотра браузера, если тот не распознает фреймы. Отдельные фреймы создаются при помощи пары тегов и . А информация, отображаемая, когда браузер не поддерживает фреймы, закладывается в HTML-документ при помощи тега . Но все по порядку.
Основой тега является разбиение окна просмотра на несколько частей. Для этого у тега есть два основных параметра: rows и cols, которые указывают количество и размеры фреймов по вертикали и горизонтали. При этом задается прямоугольная табличная структура. Если нам необходимо сделать более детальное разбиение, например, один фрейм в левой части окна по вертикали и два фрейма, отделенных друг от друга горизонтальной границей в правой части окна, то можно создать два тега , один внутри другого. Но все-таки, рассмотрим параметры тега более детально.
- Параметр cols предназначен для указания количества и размеров фреймов по горизонтали в окне просмотра. В качестве значения параметра используется список размеров фреймов, разделенных запятыми. Как обычно, для указания размера мы можем использовать абсолютные и кратные величины, а также процентные соотношения. По умолчанию используется значение 100%, т. е. основное окно просмотра по вертикали не разбивается.
- Параметр rows позволяет указывать количество и размеры фреймов по вертикали в окне просмотра, Специфика задания значений полностью совпадает с параметром cols.
Но рассмотрим на примере, как будет выглядеть создание HTML-документов с фреймовой структурой. Предположим, что нам необходимо один фрейм слева выделить под навигационное меню, а оставшееся пространство использовать для отображения информации с основных страниц Web-сайта. В этом случае, мы разделим окно просмотра на две части. Для меню мы выделим фрейм шириной в сто пятьдесят пикселов, а оставшееся пространство должен занять второй фрейм. Подобная структура Web-страницы реализуется при помощи кода, приведенного в листинге 1.31.
Листинг 1.31