Свойство позиционирования z-index в CSS

Здравствуйте, уважаемые читатели блога Goldbusinessnet.com! Время от времени я позволяю себе добавлять материалы в копилку уроков CSS и сегодня мы поговорим о свойстве z-index, которое влияет на позиционирование элементов на вебстранице.

Надо понимать, что данное правило работает только в отношении позиционированных тегов, для которых прописано свойство position со значениями absolute, relative и fixed. То есть для стандартного потока документа (где позиционирование не задано или его параметр определен как static) оно действовать не будет. Ниже я продемонстрирую работу z-index на конкретном примере.

Как z-index определяет позиции элемента

Итак, для каждого элемента в CSS находится свое место на вебстранице в соответствии с прописанными для него стилями. Местоположение всех блоков относительно друг друга определяется с помощью системы координат.

В общем случае точка отсчета находится в левом верхнем углу области просмотра (окна браузера). При этом оси X и Y определяют местоположение элементов в плоскости экрана монитора. А вот ось Z, как вы, наверное, догадались, позволяет смоделировать уже пространственную систему координат.

Она расположена перпендикулярно плоскости, образованной X и Y, и направлена прямо на нас. Само собой разумеется, что точкой отсчета по оси Z является ноль. В нулевой точке расположены все статические элементы, для которых определено свойство position static (нормальное позиционирование).

По умолчанию, если position вовсе не прописан, то такая ситуация абсолютно равнозначна той, как если бы был указан параметр static. В этом случае отображение всех HTML элементов страницы происходит в стандартном потоке. Таким образом, position, как, например, и float (в этой статье о создании плавающих элементов в CSS информация) дает возможность изменять обычный вариант очередности для решения специальных задач верстки.

Несмотря на то, что для статических вебэлементов значение z равно нулю, то есть они располагаются в плоскости X-Y, для них определены правила в том случае, если они начинают наезжать друг на друга.

Основное правило гласит: вебэлемент, определяемый тегом, который расположен ниже в HTML коде страницы, будет находится ближе к нам. То есть он будет перекрывать сверху блок, код которого находится выше.

А вот явно позиционированные (динамические) элементы (со значениями relative, absolute, fixed) находятся выше всех статических. В отношениях между динамическими вэбэлементами будет действовать все тот же закон: тот, что расположен ниже в коде, находится ближе к нам (выше других).

Вот здесь и может сказать решающее слово свойство z-index. Чем больше его значение в числовом выражении, тем выше будет находиться соответствующий элемент вебстраницы. Но все это работает, как я уже сказал, только в отношении элементов с абсолютным (absolute), относительным (relative) или фиксированным (fixed) позиционированием. Синтаксис параметров z-index является следующим:

z-index: число|auto|inherit

Числовые значения могут быть какими угодно: как отрицательными, так и положительными, включая ноль. Параметр auto предопределяет автоматический порядок расположения вэбэлементов в соответствии с их очередностью в коде HTML, учитывая принадлежность к родителю. Значение inherit показывает, что z-index наследуется дочерними элементами у родительских.

Теперь настало время направить наши изыскания в практическое русло, чтобы подтвердить теоретические выкладки. Я возьму для примера три относительно позиционированных контейнера DIV (с указанным свойством position: relative). Для наглядности пропишу для каждого цветовой оттенок, рамку, а также укажу отступы слева (left) и сверху (top), ширину (width) и высоту (height):

<div style="position:relative; border:solid 1px #000; background:#C0FFC0; width:150px; height:150px;"></div>
<div style="position: relative; border:solid 1px #000; width:150px; height:150px; background:#FFC0C0; left:75px; top:-75px;"></div>
<div style="position:relative; border:solid 1px #000; width:150px; height:150px; background:#CBCBED; left:150px; top:-150px;"></div>

На вебстранице после интерпретации HTML кода браузером эти три блока будут выглядеть так:

Обратите внимание, что контейнеры располагаются в полном соответствии с озвученным выше правилом: нижний синий перекрывает располагающийся чуть выше красный и тот, в свою очередь, находящийся еще выше зеленый. А теперь добавим свойство z-index со значением 1 красному блоку:

<div style="position:relative; border:solid 1px #000; width:150px; height:150px; background:#FFC0C0; left:75px; top:-75px; z-index:1;"></div>

Картина изменится:

Как видим, получает преимущество красный контейнер и он теперь находится выше других. Далее попробуем добавить z-index уже зеленому блоку, но уже со значением 2:

<div style="position:relative; border:solid 1px #000; background:#C0FFC0; width:150px; height:150px;z-index:2;"></div>

Результат будет таким:

Совершенно очевидно, что теперь выше прочих находится зеленый контейнер, который получил наибольшее значение z-index. Таким образом, все приведенные вначале рассуждения полностью подтверждены практическими опытами. Главное помнить, что свойство z-index работает только с явно позиционированными вебэлементами.

Еще статьи по данной теме:
Самые интересные публикации из рубрики: Учебник CSS

5 отзывов

  1. Макс

    Побольше бы таких статей! Всё очень понятно написано. Автору спасибо!

  2. Игорь Горнов

    Спасибо за спасибо, Макс.

  3. Виктор

    Скрипты Light box используют полупрозрачное PNG-изображение, для затемнения фона, в то время как новый элемент, похожий на окно div , отображается на переднем плане.

  4. Александр

    б. Если это невозможно, поможет ли разрешение создавать элемент, промежуточный в иерархии между родителем и детьми?

  5. Игорь Горнов

    Александр, не понял. Конкретизируйте.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Чтобы ввести любой код, вставьте его между [php] и [/php]. Ссылка (URL), помещенная в текст комментария, не будет активной. C целью ее выделения и более удобного копирования можно заключить ее между тегами <pre> и </pre>.