Наложение и порядок слоёв
На веб-странице расположены три изображения игральных карт (рис. 3.51). Пока они лежат рядом, их порядок значения не имеет, но если применить к ним позиционирование и сместить изображения так, чтобы они накладывались друг на друга, одна карта будет находиться выше другой (рис. 3.52).
Рис. 3.51. Карты рядом друг с другом
Рис. 3.52. Карты одна на другой
Если представить веб-страницу в виде трёхмерного пространства (рис. 3.53), то видно, что карты располагаются также по оси Z. Значения по этой оси и определяют, какая карта к нам ближе, какая дальше, иными словами порядок их наложения друг на друга. В коде документа (пример 3.38) порядок определяется автоматически на основе потока документа. Чем элемент ниже в коде, тем он выше по оси Z, поэтому изображение с тузом, как самое нижнее, располагается поверх остальных карт.
Рис. 3.53. Воображаемые координаты веб-страницы
Пример 3.38. Обычный порядок карт
XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx
Порядок карт .card IMG < position: relative; >.seven < left: -120px; top: 25px; >.ace
В CSS за положением по Z-оси отвечает свойство z-index , которое определяет, «ближе» к нам элемент находится или «дальше». В качестве значений принимается целое число, чем оно больше, тем выше располагается элемент по отношению к другим. Элементам автоматически присваивается значение 0, так что даже z-index : 1 заставит элемент перекрывать все нижележащие. Доработаем пример 3.38 так, чтобы порядок карт поменялся на противоположный, причём только редактируя стиль, оставляя HTML-код прежним.
.card IMG < position: relative; >.three < top: 50px; left: 55px; z-index: 5; >.seven < left: -120px; top: 25px; z-index: 2; >.ace
Свойство z-index для класса three специально установлено как 5 для демонстрации, что последовательность значений z-index роли не играет. Главное, чтобы одно число было больше другого.
Свойство z-index работает только для элементов, у которых значение position задано как absolute , fixed или relative .
Когда требуется расположить элемент поверх всех остальных на странице, ему ставят очень большое значение z-index , например 9999. Это гарантирует, что даже если в стилях и применяется z-index , он будет меньше указанного. В примере 3.39 у карт при наведении на них курсора меняется z-index на 10. Никаких скриптов здесь не понадобится, всё делается через псевдокласс :hover .
Пример 3.39. Изменение z-index при наведении на карту
XHTML 1.0 CSS 2.1 IE Cr Op Sa Fx
Порядок карт .card IMG < position: relative; >.three < top: 50px; left: 55px; z-index: 5; >.seven < left: -120px; top: 25px; z-index: 2;>.ace < left: -295px; z-index: 1; >.card IMG:hover
Наложение объектов
Очень важный момент, состоит в том, что z-index работает корректно только для элементов на одном уровне и с одинаковым набором свойств. Например элементы position:static и position:absolute имеют разную иерархию z-index Отдельные иерархии у элементов с float и opacity
Хак: Как переместить вложенный блок под родительский? По умолчанию вложенный блок всегда над. Но это можно изменить
.wrapper < position: relative; > .child < position: relative; z-index: -1; >
Обратите внимание, что для родителя z-index в этой ситуации ставить не нужно!
transition для z-index
Для z-index работает плавное изменение с помощью transition. Это можно использовать для появления элементов с разной скоростью.
opacity — задает полупрозрачность блока. 0 — полностью прозрачный блок, 1 — не меняет прозрачность блока, то есть непрозрачный блок остается непрозрачным.
div < opacity: 0.5; >
Непрозрачность у вложенных элементов нельзя восстановить. То есть, если родитель полностью прозрачный, то и ребенок тоже всегда будет прозрачным.
То есть, если у нас два блока, один из которых вложен в другой, например так
div class="parent"> div class="child"> div> div>
и если мы зададим стили следующим образом
.parent < opacity:0.5; width:200px; height:200px; background-color:darkolivegreen; > .child < opacity:1; width:200px; height:200px; background-color:orange; >
То у вложенного блока opacity всё-равно будет 0.5, то есть opacity вложенных блоков перемножаются.
Но если opacity больше единицы, то оно приводится к единице. То есть пример ниже будет аналогичен по внешнему виду примеру выше.
.parent < opacity:0.5; width:200px; height:200px; background-color:darkolivegreen; > .child < opacity:2; width:200px; height:200px; background-color:orange; >
visibility — определяет будет ли показываться элемент visible — элемент виден hidden — элемент скрыт
Отличие visibility:hidden от display:none в том, что блок будет попрежнему занимать место, хотя мы его не будем видеть. При display:none блок просто исчезнет со страницы
overflow — определяет что именно будет происходить с контентом, выходящим за пределы блока.
По умолчанию у объектов стоит значение visible
hidden — скроет все выступающие элементы
scroll — добавит в блок скроллинг. Не самое популярное решение, так как скроллинг уменшит область под контент.
div < width: 150px; height: 150px; overflow: scroll; >
Хак: Если у Вас margin-top вложенного блока переходит на родительский, то overflow:hidden у родительского блока, блокирует выход margin’a за пределы блока, и всё начинает работать так, как Вы этого ожидаете.
Хак: Если родительский блок «не замечает» вложенные float элементы, например высота height:auto у родительского элемента преобразуется в 0, то overflow:hidden у родительского блока также решает эту проблему.
Оверлеи
Оверлей — это блок, который накладывается на весь экран. Все знакомы с оверлеями по раздражающему затемнению экрана, на котором выводится рекламный банер.
Рассмотрим один из способом создания оверлея
.overlay < width:100%; height:100%; background-color:rgba(0,0,0,0.5); position:fixed; top:0px; left:0px; z-index:10; >
Нам нужно, чтобы затемнение закрыло весь экран, соответственно выставляем ширину и высоту во весь экран.
height:100%; width:100%;
Фоновый цвет делаем черным, но полупрозрачным.
background-color:rgba(0,0,0,0.5)
Поскольку мы хотим, чтобы затемнение было в любом месте экрана, даже если пользователь проскролил вниз, выставляем позиционирование фиксированным.
position:fixed; top:0px; left:0px;
Наш оверлей всегда должен быть поверх всего остального, поэтому выставляем z-index большим.
z-index:10
Ромб с фоновой картинкой
Поворачиваем квадрат с помощью трансформации на 45 градусов.
Вложенную картинку поворачиваем на -45 градусов
Фильтры
Полезное чтиво:
- Четыре техники создания оверлеев http://tympanus.net/codrops/2013/11/07/css-overlay-techniques/
Практика:
- Два блока пересекаются. Сделать два варианта наложения одного блока на другой
- Создание блока с полупрозрачным фоном и непрозрачным текстом. Фон — фотография
- Создать оверлей поверх сайта
- При наведении на блок, на нем последовательно появляются блоки(transition для z-index)
- Наводим на блок и из него плавно выезжает меню
- При наведении на гиперссылку, вокруг нее возникает выделение. Выделение должно собираться из окружающегося пространства. Пример http://bradfrost.com/blog/post/7-habits-of-highly-effective-media-queries/
- Верстка сайта с контентом в виде ромбиков (используем трансформации и position)
- Сделать слайдер. Картинки меняются при наведении на навигационные кружочки
- При наведении мышки на блок, фон, на котором он стоит размывается.
- Есть фотография цветного товара, на однородном сером фоне. И есть цветные квадратики. При наведении на квадратик, товар окрашивается в цвет квадрата.
- К низу сайта добавлен ярлык. При наведении на ярлык, всплывают пункты меню(подобно интерфейсу на мак)
results matching » «
No results matching » «
Как сделать чтобы элемент был поверх всего html
Подскажите как это сделать ?
Подобное не помогает ..
автор: GeorgeIV (02.07.2009 в 15:45) письмо автору
его z-Index должен быть больше z-Index других контейнеров, и неважно где он будет располагаться (естественно не после