Объяснить,
что такое фреймы и для чего они нужны, лучше всего на примере. Страница,
которую вы сейчас читаете, состоит из двух фреймов: левого, в нем перечислены
все уроки, и правого с собственно самими уроками. Вы можете прокручивать
содержимое правого фрейма, в то время как левый остается неподвижным. Это
позволяет вам в любой момент легко перейти на любой урок, не разыскивая ссылку
внизу или вверху страницы. Словом, разумное использование фреймов
позволяет существенно упростить навигацию по сайту и улучшить его дизайн.
Суть фреймов
в принципе проста: страница делится на несколько окон, в каждое из которых
загружается своя страничка (или картинка), со своим собственным адресом. К
примеру, в левом окне - "vasja.html", а в правом -
"pupkin.html" (которая физически может находиться где-нибудь на другом
сервере). Как и любые страницы в Интернете, они могут ссылаться на другие
страницы и друг на друга. Кроме этих двух страниц вы должны написать третью, в
которой и будут определяться размеры и свойства этих окон. Для этого
используются только два тега - <FRAMESET> и <FRAME>.
Чтобы их объяснить, рассмотрим пример:
Во-первых,
создадим два файла - vasja.html и pupkin.html:
<html> <head> <title>фрейм</title> </head> <body> Меня зовут Вася! </body> </html> |
<html> <head> <title>фрейм</title> </head> <body> А фамилия моя Пупкин. Это звучит круто! </body> </html> |
Теперь
делаем третий файл, назовем его index.html (назвать можно и по другому):
<html>
<head>
<title>Страница с фреймами!</title>
</head>
<frameset cols="50%,50%">
<frame src="vasja.html">
<frame src="pupkin.html">
</frameset>
</html>
Вот
его-то мы и рассмотрим подробнее. Во-первых, в нем отсутствуют теги <body>
и </body>. Можно сказать, их роль выполняет тег <frameset>,
хотя это не совсем верно. Тег <frameset> (переводится как
"набор фреймов") с аттрибутом cols="50%,50%"
указывает браузеру, что страница должна быть поделена на два окна (фрейма),
каждый шириной в 50% от ширины страницы. Тег <frame> определяет
содержимое и свойства каждого фрейма (заметьте, что он не имеет закрывающего
тега). В данном случае указано, что содержимым первого фрейма является файл
vasja.html, второго - файл pupkin.html (фреймы считаются слева направо и сверху
вниз. Здесь - этот пример в действии (откроется в новом окне).
Все просто! Еще несколько примеров:
|
Три фрейма разной ширины. <frameset cols="20%,30%,50%"> <frame src="page1.html"> <frame src="page2.html"> <frame src="page3.html"> </frameset> |
|||
|
Фреймы можно расположить рядами так же легко, как и
столбцами. Просто меняем аттрибут cols на rows: <frameset rows="25%,75%"> <frame src="page1.html"> <frame src="page2.html"> </frameset> |
Значения
аттрибутов cols и rows могут выражаться не только в процентах. cols="150,*,100"
- страница разделена на три столбца, где ширина левого 150 пикселов, правого -
100 пикселов, а средний столбец - это все оставшееся между ними место (знак *).
Если вы будете размеры фреймов устанавливать в пикселах, то желательно ширину
(или высоту) одного из них определить значком *. Можно, например, написать cols="150,550,100",
и все будет выглядеть отлично на вашем мониторе с разрешением 600*800. Но стоит
только изменить разрешение, и картина полностью изменится. Потому-то и
рекомендуется использовать "звездочку".
|
Пример: <frameset cols="200,*,100"> <frame src="page1.html"> <frame src="page2.html"> <frame src="page3.html"> </frameset> |
|||
|
Можно устанавливать пропорции для окон. В этом примере
левый фрейм будет шириной в 150 пикселов, а остальную часть страницы поделят
между собой 2-й и 3-й фреймы, причем третий фрейм будет в 2 раза шире
первого. <frameset cols="150,*,2*"> <frame src="page1.html"> <frame src="page2.html"> <frame src="page3.html"> </frameset> |
|||
|
То же, но для рядов: 2-й фрейм занимает 15% от высоты
окна, а 1-й и 3-й - все остальное в пропорции 1:3. <frameset rows="*,15%,3*"> <frame src="page1.html"> <frame src="page2.html"> <frame src="page3.html"> </frameset> |
Фреймы
могут быть вложенными друг в друга. Это позволяет создавать более сложные
конструкции страниц. Рассмотрим несколько примеров:
|
<frameset rows="25%,*"> <frameset cols="40%,60%"> <frame src="page1.html"> <frame src="page2.html"> </frameset> <frame src="page3.html"> </frameset> |
В
этом примере окно разбито на два фрейма: верхний занимает 25% высоты, нижний -
все остальное. В свою очередь верхний фрейм разбит еще на два, где левый фрейм
занимает 40% от ширины окна, а правый - 60 процентов.
Еще один
пример. Предположим, мы хотим сделать такую страницу: окно, состоящее из левого
фрейма шириной 200 пикселов, содержащего меню, и правого с каким-то текстом.
Причем в левом фрейме вверху должен быть логотип высотой в 150 пикселов, размещенный
в отдельном фрейме, а в правом внизу - баннер, который при скроллинге правого
окна все время будет оставаться на месте. Должно получиться следующее:
|
<frameset cols="200,*"> <frameset rows="150,*"> <frame src="logo.html"> <frame src="menu.html"> </frameset> <frameset rows="*,70"> <frame src="text.html"> <frame src="banner.html"> </frameset> </frameset> |
Рассмотрим
аттрибуты тегов <frameset> и <frame>. Первый из них, <frameset>
- парный тег, т.е. он обязательно должен иметь закрывающий тег. Может включать
следующие аттрибуты:
Тег <frame>
может включать следующие аттрибуты:
Как
указывалось выше, аттрибут name тега <frame> позволяет
присвоить каждому фрейму свое имя, что позволяет управлять содержимым одного
фрейма из другого (т.е. как в этих уроках - вы кликаете по ссылке в левом
фрейме, а меняется содержимое правого). Как это сделать, рассмотрим на примере:
|
В левом фрейме у нас меню, а в правом - урок первый: <frameset cols="200,*"> <frame src="menu.html"> <frame src="urok1.html" name="content"> </frameset> |
Правому
фрейму мы присвоили имя "content" (можно любое другое). Теперь
создадим файл menu.html, это будет меню для левого фрейма:
<html>
<head>
<title>menu</title>
</head>
<body>
<a href="urok1.html" target="content">Урок 1</a>
<br>
<a href="urok2.html" target="content">Урок 2</a>
<br>
<a href="urok3.html" target="content">Урок 3</a>
<br>
<a href="urok4.html" target="content">Урок 4</a>
<br>
</body>
</html>
Теперь
клик по ссылке "Урок 2" вызовет загрузку страницы "urok2.html"
в фрейме с именем "content" (т.е. в правом фрейме). При
отсутствии аттрибута target (перводится с английского как
"цель") загрузка произошла бы в левом фрейме, где находится сама
ссылка. Этот аттрибут в данном примере можно указать только один раз - как
аттрибут тега <base>, т.е. все ссылки по умолчанию будут
загружаться в фрейме с именем "content". В таком случае текст
будет выглядеть так:
<html>
<head>
<title>menu</title>
</head>
<body>
<base target="content">
<a href="urok1.html">Урок 1</a>
<br>
<a href="urok2.html">Урок 2</a>
<br>
<a href="urok3.html">Урок 3</a>
<br>
<a href="urok4.html">Урок 4</a>
<br>
</body>
</html>
Кроме имени
фрейма значением аттрибута target может быть одно из следующих
зарезервированных слов:
Все
вышеперечисленные значения должны начинаться с символа подчеркивания и
набираться только прописными буквами.
Используя на
своем сайте фреймы, нельзя забывать о том, что некоторые браузеры могут не
поддерживать фреймы - старые браузеры, речевые и др. Специально для них
существует тег noframes, в котором можно сделать "нефреймовую"
версию сайта, или хотя бы просто перечислить ссылки на страницы сайта. Пример:
<html>
<head>
<title>Уроки HTML</title>
</head>
<frameset cols="200,*">
<frame src="menu.html">
<frame src="urok1.html" name="content">
</frameset>
<noframes>
<body>
<p>Эта страница использует фреймы.
Поскольку Ваш браузер не может просматривать такие страницы,
воспользуйтесь следующими ссылками:
<p><a href="urok1.html">Урок 1</a>
<p><a href="urok2.html">Урок 2</a>
<p><a href="urok3.html">Урок 3</a>
<p><a href="urok4.html">Урок 4</a>
</body>
</noframes>
</html>
В результате
браузер, поддерживающий просмотр фреймов, отобразит на эране только фреймы с их
содержимым и проигнорирует все, что находится между <noframes> и
</noframes>. Остальные браузеры не обратят никакого внимания на
содержимое контейнера <frameset>, но воспоизведут содержимое <noframes>.
Еще одна причина, по которой следует обращать внимание на тег <noframes>
- далеко не все поисковые роботы понимают фреймы. Поэтому без <noframes>
ваша страница рискует остаться непроиндексированной.
Придерживайтесь
следующего порядка размещения: сперва контейнер <frameset>, а потом -
<noframes> (т.е. как в примере). В противном случае возможна ошибка
Netscap'а.
Существует
еще одна разновидность фреймов - встроенный фрейм (inline frame). Он может быть
вставлен непосредственно в текст страницы и выглядит следующим образом:
Ваш браузер не
поддерживает фреймы. Здесь должен быть размещен пример встроенного фрейма.
Для
встраивания такого фрейма используется тег <iframe>. Наличие
закрывающего тега обязательно. Между ними можно вставлять любой текст для
браузеров, не поддерживающих фреймы. Аттрибуты:
Для
примера выше был использован следующий код:
<iframe src="examples/iframe.htm" width="300" height="70"
scrolling="auto" frameborder="1">
Ваш браузер не поддерживает фреймы.
Здесь должен быть размещен пример
встроенного фрейма.
</iframe>
Размеры
такого фрейма не могут изменяться пользователем. Поэтому аттрибут noresize
не используется.
И в
заключение совет. Если ваш сайт будет построен с использованием фреймов, то
часто посетители будут к вам приходить с поисковиков, и чаще всего они будут
попадать на одну из внутренних страниц сайта. Естественно, сайт они увидят
совсем не в том виде, как это задумывалось вами. Чтобы этого не происходило,
вставьте в текст страниц такой код:
<SCRIPT LANGUAGE="JavaScript">
<!--
if (self.parent.frames.length == 0)
document.writeln("Эту страницу лучше просматривать во фрейме.");
document.writeln("Если ваш браузер поддерживает фреймы, то");
document.writeln("<A HREF=\"index.html\">кликните здесь.</A>");
// -->
</SCRIPT>
Или такой:
<SCRIPT LANGUAGE="JavaScript">
<!--
if (self.parent.frames.length == 0)
self.parent.location="index.html";
// -->
</SCRIPT>
Первый
скрипт выводит предложение перезагрузить страницу, если она была загружена не в
фрейме. Второй делает то же самое, но без предупреждения.
[Предыдущий урок]   [В начало]