Главная страница
Навигация по странице:

  • Наложение элементов

  • Скрытие частей страницы

  • Эффективные стратегии позиционирования

  • Позиционирование внутри элемента

  • Книга css3 3е издание Серия Бестселлеры OReilly


    Скачать 20.28 Mb.
    НазваниеКнига css3 3е издание Серия Бестселлеры OReilly
    АнкорTheBigBookofCSS33rdedition.pdf
    Дата08.08.2018
    Размер20.28 Mb.
    Формат файлаpdf
    Имя файлаTheBigBookofCSS33rdedition.pdf
    ТипКнига
    #22630
    страница51 из 62
    1   ...   47   48   49   50   51   52   53   54   ...   62


    и хотите, чтобы оно появилось в правой части заголовка. Если вы просто поместите изображение в кон- кретном месте в окне браузера в левой части заголовка, то рискуете потерять его из виду. Если заголовок будет перемещен, абсолютно расположенное изображение ос- танется «приклеенным» к назначенному ему месту. Вместо этого лучше определить изображение относительно тега


    так, что, когда заголовок будет перемещен, изоб- ражение передвинется вместе с ним (две веб-страницы внизу рис. 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-тегов

    и

    :

    A picture of a hat


    Здесь к тегу
    применяется класс hat
    , поэтому стиль можно применить только к этому одному изображению.
    ПРИМЕЧАНИЕ
    Как уже упоминалось во врезке «Обходной прием. Как заставить Internet Explorer 8 понимать HTML5» в разделе «Дополнительные теги в HTML5» гл. 1, Internet Explorer 8 и более ранние версии не применяют
    CSS к элементам HTML5 без небольшой помощи со стороны кода JavaScript. Если вам не хочется возиться с этим кодом, можно просто воспользоваться вместо тегов
    и
    тегами
    .
    2. Укажите позицию для надписи.
    Для помещения надписи поверх изображения используется абсолютное позици- онирование. Чтобы поместить надпись относительно тега

    , нужно установить для его родительского тега

    относительное позиционирование, а также задать параметры ширины и высоты, соответствующие размерам фотографии.
    .hat {
    position: relative; width: 100px;
    height: 100px;
    }
    .hat figcaption {
    position: absolute;
    bottom: 0
    left: 0;
    right: 0; background-color: white;
    }
    Надпись помещается в нижней части изображения (
    bottom: 0
    ). За счет установ- ки нулевых значений для его свойств left и right надпись займет всю ширину рисунка.
    3. Скройте надпись.
    При использовании данного кода браузер покажет надпись поверх изображе- ния, но вам нужно, чтобы это происходило только при прохождении указателя чьей-либо мыши над изображением. Чтобы скрыть надпись, добавьте к стилю
    .hat figcaption либо visibility: hidden
    , либо display: none
    .hat figcaption {
    display: none;
    position: absolute;
    bottom: 0
    left: 0;
    right: 0;

    512
    Часть 3. Макет страницы background-color: white;
    }
    4. Сделайте так, чтобы надпись появлялась, когда посетитель проводит указатель мыши над изображением.
    Для этого воспользуйтесь псевдоклассом
    :hover
    . Нужно сделать надпись види- мой при прохождении над изображением указателя мыши посетителя. К со- жалению, нет способа создания стиля, влияющего на надпись при прохождении указателя мыши над изображением. Но так как надпись находится внутри тега

    , можно создать селектор потомка, влияющий на надпись при прохо- ждении указателя мыши над изображением:
    .hat:hover figcaption {
    display: block;
    }
    Этот селектор потомка предписывает следующее: «Нужно нацелиться на любой тег

    , который находится внутри элемента с классом hat
    , но только когда указатель мыши располагается над элементом». Данный селектор рабо- тает только потому, что тег figcaption является потомком элемента, над которым проходит указатель мыши.
    Эту идею можно использовать для создания основанных на коде CSS появля- ющихся подсказок. Чтобы ознакомиться с основным CSS-методом добавления появляющихся подсказок — дополнительной информации, возникающей при про- хождении указателя чьей-либо мыши над ссылкой, — обратитесь к сайту по адресу www.menucool.com/tooltip/css-tooltip
    . Есть также множество JavaScript-вариантов на выбор: полноценным и простым в использовании JavaScript-средством для созда- ния появляющихся подсказок, основанным на применении среды jQuery, является дополнительный jQuery-модуль aTip2: http://craigsworks.com/projects/qtip2/
    Как уже упоминалось, для скрытия и показа элемента можно также воспользо- ваться свойством opacity
    , а для анимации эффекта можно воспользоваться свойством transition
    . Для этого можно изменить предыдущие стили следующим образом:
    .hat figcaption {
    opacity: 0;
    -webkit-transition: opacity .5s ease-in;
    -moz-transition: opacity .5s ease-in;
    -o-transition: opacity .5s ease-in;
    transition: opacity .5s ease-in;
    position: absolute;
    bottom: 0
    left: 0;
    right: 0; background-color: white;
    }
    .hat:hover figcaption {
    opacity: 1;
    }

    Глава 15. Позиционирование элементов на веб-странице
    513
    Это действие можно увидеть в обучающем уроке в конце главы. Но необходимо помнить, что свойство transition не работает в Internet Explorer 9 и более ранних версиях. Однако в данном случае ничего страшного не произойдет. Ваши посетите- ли все равно увидят надпись, но только без ее плавного появления и исчезновения.
    Рис. 15.7. Элемент с абсолютным позиционированием можно поместить над другим элементом, но скрыть его (слева), пока посетитель не наведет указатель мыши на родительский элемент (справа)
    Эффективные стратегии позиционирования
    Как говорилось в начале этой главы, если вы попытаетесь использовать CSS-пози- ционирование для размещения каждого элемента страницы, то можете столкнуть- ся с проблемой. Поскольку просто невозможно предсказать все мыслимые комби- нации браузеров и параметров настройки, используемые вашими посетителями, позиционирование под управлением CSS работает лучше всего в качестве «такти- ческого оружия». Используйте его аккуратно, чтобы обеспечить точное размеще- ние определенных элементов.
    Из этого раздела вы узнаете, как применять абсолютное позиционирование, чтобы добавлять маленькие, но важные детали к дизайну своей страницы, как аб- солютно позиционировать определенные элементы разметки и закреплять важные элементы страницы в одном месте, в то время как остальное содержимое будет прокручиваться.
    Позиционирование внутри элемента
    Один из самых эффективных способов использования позиционирования состоит в том, чтобы размещать маленькие элементы относительно других объектов на стра- нице. Абсолютное позиционирование может повторять тип выравнивания по пра- вому краю, которое вы задаете с плавающей разметкой. На рис. 15.8,1, дата на верх- нем заголовке кажется высоко расположенной, но с CSS вы можете переместить ее к правому краю нижнего заголовка.
    Чтобы поместить дату отдельно от остальной части заголовка, вам нужно заклю- чить ее в HTML-тег. Тег

    (см. врезку «Информация для новичков. HTML-теги
    и » в разделе «Селекторы классов: точное управление» гл. 3) — рас- пространенный выбор при использовании класса для расположенного в линию текста, чтобы определить его отдельно от остальной части абзаца.

    1   ...   47   48   49   50   51   52   53   54   ...   62


    написать администратору сайта