Позиционирование элементов Web-страницы
Одним из наиболее используемых преимуществ DHTML является возможность
точно позиционировать элементы оформления Web-страницы. Как мы помним,
в самом HTML у нас отсутствует возможность четкого позиционирования каких-либо
элементов Web-страниц. Технология DHTML исправляет этот недостаток. Более
того, DHTML позволяет не только четко устанавливать место отбражения того
или иного элемента, но и перемещать его в окне просмотра браузера. Подобная
возможность обычно называется "динамическим позиционированием ".
Всего используется три типа позиционирования. Различают статическое позиционирование,
относительное и абсолютное. Статическое позиционирование — это порядок
размещения элементов Web-страниц самим браузером, исходя из обычных стандартов
HTML. Относительное позиционирование позволяет изменять расположение элемента,
опираясь на его исходное расположение. То есть, его смещение отсчитывается
от исходных координат. На основе относительного позиционирования обычно
создают различные эффекты анимации текста. А абсолютное позиционирование
позволяет нам указывать кооцдинаты элементов, относительно окна браузера.
То есть, мы можем точно знать в каждый момент времени, в какой точке окна
просмотра находится тот или иной элемент. Чаще всего для эффектов динамического
позиционирования используется именно эта разновидность.
Необходимо осознавать, что статическое позиционирование полностью опирается
на порядок расположения элементов, который указан в HTML-коде и умолчаниях
браузера. Но если мы для какого-либо элемента установим абсолютное позиционирование,
то он уже не будет учитываться браузером при размещении остальных элементов.
Он как будто вынимается из процедуры статического позиционирования и не
оказывает никакого влияния на соседние элементы.
Теперь от теории перейдем к практике. Попробуем создать HTML-документ,
в котором текстовый абзац мог бы изменять свое расположение в тот момент,
когда пользователь наводит на него курсор мыши. Код подобного документа
приведен в листинге 7.6.
Листинг 7.6
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http: //www.w3.org/TR/html4/strict.dtd">
<html> <head>
<1;11:1е>Динамическое позиционирование</1:^1е>
<script language="javascript">
<! —
function moving()
{
pi. style.position="relative";
pi.style.top="10px";
pi.style.left="10px";
}
function reverse ()
{
pi.style.position="static";
}
II —>
</script>
</head>
<body>
<p><font з1ге=5>Первый a63au</fontx/p>
<p id="pl" onmouseover="moving()" onmouseout="reverse()"xfont
з1ге=5>Второй a63au</fontx/p>
</body>
</html>
Рис. 7.6. Окно браузера с результатом отображения файла,
приведенного в листинге 7.6, в тот момент, когда пользователь навел курсор
мыши на второй абзац
При загрузке в браузер этого файла будет видно, что при попадании курсора
мыши на второй абзац, тот сдвигается вправо и вниз, а после того, как
курсор мыши покидает его, абзац возвращается к своему исходному положению
(рис. 7.6).
Теперь рассмотрим код, чтобы узнать, за счет чего мы можем добиться подобного
эффекта. Как видно, мы установили идентификатор для второго абзаца, и
две функции, выполняемые при наступлении событий
onmouseover И onmouseout.
Событие onmouseover, наступающее в тот момент, когда пользователь наводит
курсор мыши на второй абзац, мы обрабатываем при помощи функции moving.
В этой функции мы изменяем некоторые свойства объекта style для элемента
с идентификатором pi. Использование объекта style мы обсуждали в предыдущем
разделе этой главы. Сейчас нас интересует именно механизм перемещения
содержимого абзаца. Мы использовали три свойства: position, top и left.
Свойству position мы придали значение relative, которое позволяет нам
смещать расположение элемента относительно его начального размещения.
После того достаточно было изменить значения свойств top и left, и абзац
изменил бы свое расположение. В нашем примере мы использовали для этих
свойств одно и то же значение — Юрх. Это позволяет смещать абзац вниз
и влево одновременно на десять пикселов.
Но после того, как мы сместили абзац, было бы неплохо вернуть его на место.
Возврат осуществляется при пернмещении пользователем курсора мыши с территории,
занимаемой выбранным текстовым абзацем. Следовательно, необходимо обрабатывать
событие onmouseout. Для этих целей мы внесли в наш
скрипт функцию reverse. Она также работает с объектом style. Но для того,
чтобы вернуть абзац к его начальному положению, достаточно всего лишь
придать свойству position значение static. Мы уже знаем, что при помощи
этого значения мы задаем статическое позиционирование для элемента. Следовательно,
он будет отображаться именно так, как это было при начальной загрузке
страницы. Проще говоря, он вернется на исходное место.
Мы рассмотрели динамическое позиционирование элементов, которое основано
на применении относительного типа позиционирования. Но ведь есть еще и
абсолютное позиционирование. Оно обычно применяется для создания эффектов
позиционирования элементов, не привязанных к их расположению на Web-странице
по умолчанию.
В качестве примера мы можем создать страницу, на которой некое слово будет
постоянно отображаться в верхнем левом углу окна просмотра браузера, вне
зависимости от того, как пользователь прокручивает содержимое документа.
Также мы разместим это слово под основным содержимым Web-страницы, применив
для этого свойство z-index. В общем случае подобный документ может создаваться
при помощи кода, приведенного в листинге 7.7.
Листинг 7.7
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html> <head>
е>Абсолютное позиционирование<^^1е> <script language="javascript">
<!--
function freezetextO {
freeze.style.posTop=document.body.scrollTop; freeze.style.posLeft=document.body.scrollLeft;
}
//--> </script> </head> <body onScroll="freezetext()">
<div id="freeze" style="position:absolute; z_index:-l;
top:lpx; left:lpx">
<р>3амороженный текст</р>
</div>
<p><font з!ге=5>Первый a6aau</font></p>
<pxfont size=5>Bтopoй a6aau</font></p>
<pxfont з!ге=5>Третий a63au</font></p> <p><font
з!ге=5>Четвертый a63au</fontx/p> <p><font з1ге=5>Пятый
a63au</font></p>
</body>
</html>
Рис. 7.7. Окно браузера с результатом отображения файла,
приведенного в листинге 7.7, в тот момент, когда пользователь прокрутил
содержимое документа вверх
На рис. 7.7 видно, что при прокрутке содержимого "замороженный
текст" все равно остается прикрепленным к верхнему левому углу окна
браузера. Попробуем разобраться, за счет чего это происходит.
В листинге данный текст мы заключили в контейнер, создаваемый тегами <div>
и </div>. И уже для этого блока-контейнера
мы создали стилевое оформление, воспользовавшись параметром style.
В объявлении стиля мы установили для блока абсолютное позиционирование
блока, задали его координаты и вертикальное псевдопозиционирование при
помощи свойства z-index, которому придали значение
-1. Это заставит браузер при прокрутке содержимого Web-страницы в окне
просмотра всегда отображать наш "замороженный текст" под основным
содержимым, так как все остальные элементы офомления Web-страницы имеют
по умолчанию нулевое значение этого же свойства, а, следовательно, будут
отображаться над "замороженным текстом".
Исходя из условий поставленной задачи, необходимо, чтобы наш текстовый
блок постоянно отображался в одном и том же месте — в левом верхнем углу
окна просмотра. Координаты, которые мы установили для текстового блока
в его определении, указывают его расположение на Web-странице без учета
того, какая ее часть помещается в окне просмотра. Поэтому, когда пользователь
воспользуется полосами прокрутки, текстовый блок может выйти за пределы
окна просмотра. Следовательно, нам необходимо реагировать именно на использование
полос прокрутки пользователем. Для этого мы будем обрабатывать событие
onscroil для всего содержимого документа. То есть, нас будет интересовать
тег <body>. Поэтому, в коде нашего документе
мы и использовали следующее объявление этого тега:
<body onScroll="freezetext()">
Итак, нам необходимо при прокрутке содержимого окна просмотра принудительно
отображать текстовый блок в левом верхнем углу окна просмотра браузера.
Для этих целей мы пользуемся абсолютным позиционированием. Но для того,
чтобы позиционировать блок текста, нам необходимо знать, какие координаты
документа соответствуют верхнему левому углу окна просмотра. И здесь следует
вспомнить о свойствах scrollTop и scrollLeft элемента body, которые содержат
координаты этого верхнего левого угла окна просмотра в системе координат
самого документа. Эти координаты мы и присвоили значениям posiop и posLeft,
соответственно, которые задают координаты верхнего левого угла текстового
блока.
Естественно, подобную технологию мы можем применять не только к текстовым
блокам, но и практически к любым элементам наполнения Web-страниц, в том
числе и к графическим изображениям, и к их более продвинутой версии —
видеовставкам.
|