и хотите, чтобы оно появилось в правой части заголовка. Если вы просто поместите изображение в кон- кретном месте в окне браузера в левой части заголовка, то рискуете потерять его из виду. Если заголовок будет перемещен, абсолютно расположенное изображение ос- танется «приклеенным» к назначенному ему месту. Вместо этого лучше определить изображение относительно тега
так, что, когда заголовок будет перемещен, изоб- ражение передвинется вместе с ним (две веб-страницы внизу рис. 15.5). Рассмотрим представленный рисунок. На верхней веб-странице видно, что круг- лая графическая кнопка помещена внутри тега
(см. рис. 15.5, вверху). На второй странице к кнопке применено абсолютное позиционирование: right: -35px; top: -35px; , которое перемещает ее за пределы области тега
и определяет в верхнем правом углу окна браузера (на самом деле кнопка находится немного за пределами окна благодаря отрицательным значениям позиционирования) (см. рис. 15.5, вто- рая страница сверху). В коде третьей веб-страницы к тегу
добавлено свойство position: relative , которое создает новую среду позиционирования для тега
. Те же самые значения top и right перемещают тег
к верхнему правому углу заголовка (см. рис. 15.5, третья страница сверху). Когда вы передвигаете заголовок ниже, графика также пе- редвигается (см. рис. 15.5, внизу). ПРИМЕЧАНИЕ Используйте свойство background-image (см. раздел «Добавление фоновых изображений» гл. 8), чтобы поместить изображение в фон тега
. Однако если изображение будет выше, чем тег
, или вы хотите, чтобы оно появилось за пределами границ заголовка (см. третью сверху веб- страницу на рис. 15.5), встройте изображение с помощью тега и воспользуйтесь относитель- ным позиционированием, рассматриваемым в данном разделе. Чтобы установить изображение на странице, вы могли использовать значение relative свойства position , но здесь также есть недостатки. Когда вы задаете отно- сительное позиционирование для элемента, а затем размещаете его (возможно, используя свойства left и top ), элемент перемещается на определенное расстояние от того места, где он появился бы в потоке HTML. Другими словами, он переме- щается относительно своего текущего положения. В результате на его исходном месте остается пустое пространство, где элемент находился бы без вашего позицио- нирования (см. рис. 15.1, внизу).
Глава 15. Позиционирование элементов на веб-странице 507 Рис. 15.5. Пример использования относительного позиционирования применительно к изображению Лучший способ использовать относительное расположение состоит в том, что- бы создать новую среду позиционирования для вложенных тегов. Например, тег
в примере в начале этого раздела является владельцем тега
, который находится внутри него. При установке относительного позиционирования тега
любое абсолютное позиционирование, которое вы примените к тегу
, будет определено относительно четырех сторон заголовка
, а не окна браузера. Код CSS выглядит следующим образом: h1 { position: relative; } h1 img { position: absolute;
508 Часть 3. Макет страницы top: 0; right: 0; } Установка свойствам top и right изображения значения 0 перемещает его в верх- ний правый угол заголовка, а не окна браузера. В CSS термин «относительный» (relative) означает не совсем то же самое, что в реальном мире. Все же, если вы хотите поместить тег
относительно тега
, вашей первой мыслью может быть определение для изображения относительного позиционирования. На самом деле элемент, который вы хотите разместить, — изо- бражение — получает абсолютное позиционирование, в то время как элемент, от- носительно которого вы хотите определить изображение, — заголовок — получает значение relative . Представьте, что relative означает «относительно меня». Когда вы применяете относительное позиционирование для тега, это означает, что «все элементы, заданные внутри него, должны размещаться относительно его местопо- ложения». ПРИМЕЧАНИЕ Поскольку вы будете часто применять относительное позиционирование просто для задания новой среды расположения вложенных тегов, вам даже не нужно использовать значения top, bottom, left и right. У тега
есть свойство position: relative, но нет значений top, bottom, left и right. Наложение элементов Как вы можете видеть на рис. 15.6, абсолютно позиционированные элементы распо- ложены на переднем плане веб-страницы и могут даже находиться спереди (или сзади) других позиционированных элементов. Такое наложение определяется ин- дексом позиционного уровня (z-index). Если вы знакомы с понятием слоев в Photoshop, Fireworks или Adobe InDesign, то знаете, как работает индекс позиционного уровня: он представляет порядок, в котором элементы накладываются на верхнюю поверх- ность страницы. Когда вы используете индекс позиционного уровня, чтобы управлять порядком наложения элементов, родительские элементы определяют порядок наложения для своих детей. В двух верхних примерах на рис. 15.6 текстовый блок не позицио- нирован: он разделяет индекс позиционного уровня самой страницы непосред- ственно, для которой значение z-index равно 0 . Таким образом, кнопки в этих двух текстовых блоках накладываются поверх страницы. Однако для текстового блока в нижнем изображении задано абсолютное позиционирование с z-index , рав- ным 1000 . Тег
, содержащий текстовый блок, становится отправной точкой для укладки в него изображений. Так что, хоть z-index области
равен 1000 , его вложенные дети (с более низкими значениями z-index ) появятся сверху, в то время как сам текстовый блок находится над страницей. Чтобы сказать это другими словами, подумайте о веб-странице, как о листе бу- маги, а об абсолютно размещаемом элементе, как о записке, приклеиваемой сверху. Каждый раз, когда вы добавляете на страницу абсолютно позиционированный элемент, вы «приклеиваете» на нее записку. Конечно, если вы делаете это, то ри- скуете закрыть что-нибудь уже написанное на странице.
Глава 15. Позиционирование элементов на веб-странице 509 Рис. 15.6. Веб-страница имеет многослойную структуру Обычно порядок наложения элементов следует их порядку в HTML-коде стра- ницы. На странице с двумя абсолютно позиционированными тегами
второй тег из HTML появится выше другого тега
. Однако вы можете управлять по- рядком, в котором накладываются элементы, используя CSS-свойство z-index Свойство получает числовое значение: z-index: 3; Чем больше значение, тем ближе к вершине набора появится элемент. Скажем, у вас есть три абсолютно позиционированных изображения и части каждого из них в некоторой степени перекрываются. Изображение, имеющее больший индекс по- зиционного уровня, появится над другими (см. рис. 15.6, вверху). Когда вы меня ете индекс позиционного уровня одного или нескольких изображений, вы изменяете порядок их наложения (см. рис. 15.6, посередине). Для z-index можно даже использовать отрицательные числа, которые могут пригодиться, если нужно позиционировать элемент ниже его родительского эле- мента или любого из его предков. Например, на рис. 15.6, вверху, тег
имеет относительное позиционирование. Если нужно поместить одно из изображений за
-контейнером, можно воспользоваться отрицательным значением z-index : z-index: -1; Отрицательные значения z-index поддерживаются большинством браузеров, кро- ме Internet Explorer 7 и более ранних версий, поэтому, если нужна поддержка Internet Explorer 7, то отрицательные значения для z-index лучше вообще не использовать.
510 Часть 3. Макет страницы СОВЕТ Промежутки в значениях индекса позиционного уровня вполне допустимы. Другими словами, значения 10, 20, 30 определяют то же самое, что и 1, 2, 3. В действительности разрыв в числовых значениях дает возможность последующей вставки в набор дополнительных элементов. Если нужно обеспечить, чтобы над размещаемым элементом больше ничего не появлялось, задайте ему очень большой индекс позиционного уровня, например z-index: 10 000;. Но не переусердствуйте, поскольку максимальное значение, которое обрабатывают некоторые браузеры, равно 2 147 483 647. Скрытие частей страницы Другое CSS-свойство, часто используемое с абсолютно позиционированными эле- ментами, — свойство visibility . Оно позволяет скрыть часть страницы (или пока- зать ее). Скажем, вы хотите, чтобы над изображением внезапно появлялось всплы- вающее сообщение, когда пользователь передвигает над ним указатель мыши. Вы делаете заголовок невидимым, когда страница загружается впервые ( visibility: hidden ), и переключаетесь на режим видимости ( visibility: visible ), когда указа- тель передвигается над изображением. Значение hidden свойства visibility подобно значению none свойства display , но между ними есть существенное различие. Когда вы устанавливаете свойству display элемента значение none , он буквально исчезает со страницы, не оставляя следов. Однако задание свойству visibility значения hidden предотвращает показ браузером содержимого элемента, но оставляет пустое пространство в том месте, где должен был быть элемент. При использовании с абсолютно позиционированными элемен- тами, которые уже удаляются из потока страницы, свойства visibility: hidden и display: none ведут себя одинаково. Большинство разработчиков просто приме- няют метод display: none , и вообще не пользуются свойством visibility Есть и другой способ скрытия элемента — установка для его свойства непро- зрачности opacity нулевого значения: opacity: 0; Чтобы элемент снова появился на экране, его свойству opacity можно вернуть значение 1 : opacity: 1; Преимущество использования свойства opacity заключается в том, что это свой- ство является одним из CSS-свойств, которые браузер может анимировать. Это означает, что вы можете использовать CSS-переходы, рассмотренные в гл. 10, для анимации изменений непрозрачности. Например, элемент можно сделать постепенно появляющимся в поле зрения, изменяя его непрозрачность от 0 до 1 и добавляя переход. Самый распространенный способ переключать режим элемента от скрытого к видимому и наоборот — через JavaScript. Однако вам не нужно изучать про- граммирование на JavaScript, чтобы использовать свойство visibility (или display ). Вы можете использовать псевдокласс :hover (см. раздел «Псевдоклассы и псевдоэлементы» гл. 3), чтобы сделать невидимый элемент видимым. Предпо- ложим, например, что вам нужно поместить надпись поверх изображения, но при этом она должна появляться только при прохождении указателя мыши посети- теля над изображением (рис. 15.7). Для получения результата выполните следу- ющие дей ствия.
Глава 15. Позиционирование элементов на веб-странице 511 1. Создайте HTML-код для изображения и надписи. Один из способов предполагает использование HTML5-тегов