Фреймы + JavaScript
(непрофессиональные заметки "чайника")

"...фреймы использовать нельзя...
Профессиональные web-дизайнеры никогда не используют фреймы..."
(Станислав Жарков, "Сломанные рамки", IZone 91)

 

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

Создавать свой сайт я начал в декабре 1999 года. Тогда вопрос "использовать фреймы или не использовать?" у меня даже и не возникал. Просто опыта в вэб-строительстве было маловато (т.е. вообще отсутствовал) и преимущества использования фреймов казались неподлежащими сомнению. Со временем, конечно, я "вкусил" и все минусы фреймов. Но даже сейчас, спустя год с лишним, я не могу полностью отказаться от использования фреймов. Да и нужно ли решать этот вопрос столь радикально? Почему бы не поискать компромисс?

После длительных раздумий, изучения чужого опыта и экспериментов над собственным сайтом, я пришел к выводу, что в большинстве случаев можно (и даже лучше) обойтись без фреймов, но на своем сайте я их пока оставлю. Оставлю ровно три – ни больше, ни меньше – жутко вспомнить, но в самом первом варианте верстки сайта я использовал шесть(!) фреймов.

В этих заметках я не настаиваю на профессионализме – я просто делюсь своими соображениями. Если кому-то эта информация принесет пользу, буду рад. В противном случае считайте меня "чайником" :о)
 

Плюсы и минусы фреймов...

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

Основных плюсов я бы выделил три:

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

А основных минусов, на мой взгляд, всего два и при разработке большого сайта с множеством страниц они весьма ощутимы:

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

Хотел оставить без комментариев, но решил все же добавить пару слов. Я не призываю вас использовать фреймы, но и говорить "табу" не предлагаю. Вполне можно найти оптимальное использование фреймам, если не бросаться в крайности. Ведь "если звезды зажигают, значит кому-то это надо..."
 

Я остановился на цифре "три"

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

Если верить статистике от SpyLog (http://www.spylog.ru/), то чуть больше половины всех пользователей смотрят на экран с разрешением 800x600, примерно треть "ловит удовольствие" на 1024x768, остальных (с разрешением 640х480), уж извините, я в расчет не беру. Логично в этом случае верстать свой сайт в расчете на 800 пикселей. Но и при большей ширине экрана хотелось бы смотреться достаточно эстетично. Поэтому я использую следующую структуру фреймов:

<HTML><HEAD></HEAD>
<FRAMESET framespacing=0 border=0 frameborder=0 cols="*,800,*">
<frame name="LEFT" src="left.html" scrolling=no>
<frame name="MAIN" src="main.html" scrolling=auto>
<frame name="RIGHT" src="right.html" scrolling=no>

</HTML>

При описанной структуре основное содержание сайта (фрейм MAIN) всегда будет обозримо на двух наиболее популярных "разрешенках". А фреймы LEFT и RIGHT будут видны при разрешении, превышающем 800х600.

Вы считаете, что в данном случае можно было обойтись без фреймов? Конечно, можно использовать отцентрованную таблицу шириной 800 пикселей. Но в этом случае, если таблица окажется "короче" высоты экрана, то фоновый цвет (или узор) будет не слишком эстетично "обтекать" таблицу снизу:

Неудачный вид при невысокой таблице

Вы спросите: "А что, на большую таблицу фантазии не хватило?" Ну что ж, всякое бывает. Так почему бы не воспользоваться услугами фреймов? Они с этой проблемой справляются.
 

Так как все содержимое сайта содержится в среднем фрейме (MAIN), то с адресацией внутри сайта проблем не возникает. Один раз создав три фрейма, я больше о них не вспоминаю и дальше работаю только с MAIN, как будто фреймов вовсе и нет.

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

Впрочем, можно и создать необходимые фреймы. И для этого хватит всего одного дополнительного файла, обвязанного JavaScript-ами:

<HTML><HEAD></HEAD>

<script language="JavaScript">
<!-- 
function SubSearch() {
  var s, ss;
  var s = window.location.search;
  ss = s.substr(1);
  return(ss);
}

document.write("<FRAMESET framespacing=0 border=0 frameborder=0 cols='*,800,*'>");
document.write("<frame name='LEFT' src='left.htm' scrolling=no>");
document.write("<frame name='MAIN' src='"+SubSearch()+".html' scrolling=auto>");
document.write("<frame name='RIGHT' src='right.htm' scrolling=no>");
document.write("</FRAMESET>");
//-->
</script>
</HTML>

С помощью функций document.write() будет динамически создан файл, аналогичный приведенному в первом примере. Исключение составляет фрейм MAIN. Для него в качестве параметра src будет подставлено значение, возвращаемое функцией SubSearch(). А данная функция возвращает подстроку адреса, следующую после вопросительного знака ? (используется свойство window.location.search)

Ну вот, теперь чтобы попасть, к примеру, на страницу page1.html, окруженную фреймами LEFT и RIGHT, достаточно в письме почтовой рассылки указать адрес http://адрес_вашего_сайта/nav.html?page1. После открытия файла nav.html (структура которого приведена в примере) с помощью JavaScript будет динамически созданы три фрейма: LEFT, RIGHT, MAIN и в последний будет загружен файл page1.html
 

Игорь Голинский

http://igr.narod.ru
 

 


Используются технологии uCoz