Контекст наложения (stacking context) — CSS
Контекст наложения (stacking context) это концепция трёхмерного расположения HTML-элементов вдоль оси Z по отношению к пользователю, находящемуся перед экраном. HTML-элементы занимают это место по порядку, основанному на атрибутах элемента.
« CSS « Understanding CSS z-index (en-US)
В предыдущем примере Добавляем z-index (en-US), порядок отображения определённых DIVs элементов зависел от их z-index значения. Это возникает благодаря тому, что у этих элементов есть специальные свойства, которые заставляют их формировать контекст наполнения ( stacking context ).
Контекст может формироваться в любом месте документа, любым элементом, у которого выполняется одно из следующих условий:
- является корневым элементом (HTML),
- позиционирован абсолютно (position:absolute) или относительно (position:relative) с z-index значением отличным от «auto»,
- flex элемент с z-index отличным от «auto», чей родительский элемент имеет свойство display: flex|inline-flex,
- элементы с
opacity
меньше чем 1. (См. the specification for opacity), - элементы с
transform
отличным от «none», - элементы с
mix-blend-mode
значением отличным от «normal», - элементы с
filter
значением отличным от «none», - элементы с
isolation
установленным в «isolate», position: fixed
- если мы указываем элементу атрибут
при этом не обязательно присваивать ему значения (См. this post)will-change
- элементы с
-webkit-overflow-scrolling
(en-US) установленным в «touch»
Внутри контекста наложения дочерние элементы расположены в соответствии с правилами, описанными ранее. Важно заметить, что значения свойства z-index для дочерних элементов формирующих контекст наложения, будут учитываться только в рамках родительского элемента. Контекст наложения обрабатываются атомарно, как единое целое в контексте наложения родителя.
Суммируем:
- Позиционирование и присваивание HTML-элементам свойства z-index создаёт контекст наложения, (так же как и присваивание элементу opacity меньше 1).
- Контексты наложения могут быть частью других контекстов наложения и вместе создавать иерархию контекстов наложения.
- Каждый контекст наложения абсолютно независим от своего соседа: только подчинённые элементы учитываются при обработке контекста наложения.
Примечание: Иерархия контекстов наложения является подмножеством иерархии HTML-элементов, потому что только определённые элементы создают контексты наложения. Можно сказать, что элементы, которые не создают собственного контекста наложения, используют контекст наложения родителя.
В примере каждый позиционированный элемент создаёт свой контекст наложения, так как имеет свойства position и z-index. Иерархия контекстов наложения выглядит следующим образом:
- Root
- DIV #1
- DIV #2
- DIV #3
- DIV #4
- DIV #5
- DIV #6
Важно отметить, что DIV #4, DIV #5 и DIV #6 являются дочерними для DIV #3, поэтому они полностью располагаются в DIV#3. Once stacking and rendering within DIV #3 is completed, the whole DIV #3 element is passed for stacking in the root element with respect to its sibling’s DIV.
Примечание:
- DIV #4 отрисовывается под DIV #1, потому что z-index (5) DIV #1 действителен внутри контакта наложения корневого элемента, в то время как z-index (6) DIV #4 действителен внутри контекста наложения DIV #3. Поэтому, DIV #4 находиться ниже DIV #1, потому что DIV #4 принадлежит DIV #3, который в свою очередь имеет меньший z-index(по сравнению с .DIV #1).
- По этим же причинам DIV #2 (z-index 2) отрисовывается под DIV#5 (z-index 1), так как DIV #5 принадлежит DIV #3, чей z-index больше( чем z-index DIV #2).
- У DIV #3 есть свойство z-index 4, но это значение независимо от z-index’ов DIV #4, DIV #5 и DIV #6, потому что принадлежат они разным контекстам наложения.
- An easy way to figure out the rendering order of stacked elements along the Z axis is to think of it as a «version number» of sorts, where child elements are minor version numbers underneath their parent’s major version numbers. This way we can easily see how an element with a z-index of 1 (DIV #5) is stacked above an element with a z-index of 2 (DIV #2), and how an element with a z-index of 6 (DIV #4) is stacked below an element with a z-index of 5 (DIV #1). In our example (sorted according to the final rendering order):
- Root
- DIV #2 — z-index is 2
- DIV #3 — z-index is 4
- DIV #5 — z-index is 1, stacked under an element with a z-index of 4, which results in a rendering order of 4.1
- DIV #6 — z-index is 3, stacked under an element with a z-index of 4, which results in a rendering order of 4.3
- DIV #4 — z-index is 6, stacked under an element with a z-index of 4, which results in a rendering order of 4.6
- DIV #1 — z-index is 5
- Root
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1. 0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>Understanding CSS z-index: The Stacking Context: Example Source</title> <style type="text/css"> * { margin: 0; } html { padding: 20px; font: 12px/20px Arial, sans-serif; } div { opacity: 0.7; position: relative; } h2 { font: inherit; font-weight: bold; } #div1, #div2 { border: 1px dashed #696; padding: 10px; background-color: #cfc; } #div1 { z-index: 5; margin-bottom: 190px; } #div2 { z-index: 2; } #div3 { z-index: 4; opacity: 1; position: absolute; top: 40px; left: 180px; width: 330px; border: 1px dashed #900; background-color: #fdd; padding: 40px 20px 20px; } #div4, #div5 { border: 1px dashed #996; background-color: #ffc; } #div4 { z-index: 6; margin-bottom: 15px; padding: 25px 10px 5px; } #div5 { z-index: 1; margin-top: 15px; padding: 5px 10px; } #div6 { z-index: 3; position: absolute; top: 20px; left: 180px; width: 150px; height: 125px; border: 1px dashed #009; padding-top: 125px; background-color: #ddf; text-align: center; } </style> </head> <body> <div> <h2>Division Element #1</h2> <code>position: relative;<br/> z-index: 5;</code> </div> <div> <h2>Division Element #2</h2> <code>position: relative;<br/> z-index: 2;</code> </div> <div> <div> <h2>Division Element #4</h2> <code>position: relative;<br/> z-index: 6;</code> </div> <h2>Division Element #3</h2> <code>position: absolute;<br/> z-index: 4;</code> <div> <h2>Division Element #5</h2> <code>position: relative;<br/> z-index: 1;</code> </div> <div> <h2>Division Element #6</h2> <code>position: absolute;<br/> z-index: 3;</code> </div> </div> </body> </html>
Division Element #1
position: relative; z-index: 5;
Division Element #2
position: relative; z-index: 2;
Division Element #3
position: absolute; z-index: 4;
Division Element #4
position: relative; z-index: 6;
Division Element #5
position: relative; z-index: 1;
Division Element #6
position: absolute; z-index: 3;
- Stacking without z-index (en-US) : Default stacking rules
- Stacking and float (en-US) : How floating elements are handled
- Adding z-index (en-US) : Using z-index to change default stacking
- Stacking context example 1 (en-US) : 2-level HTML hierarchy, z-index on the last level
- Stacking context example 2 (en-US) : 2-level HTML hierarchy, z-index on all levels
- Stacking context example 3 (en-US) : 3-level HTML hierarchy, z-index on the second level
Last modified: 000Z»>7 нояб. 2022 г., by MDN contributors
Фиксированное позиционирование | CSS: Позиционирование элементов
Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером
Тема позиционирования не заканчивается только на относительном и абсолютном. Их вполне достаточно для большинства возникающих ситуаций — это очень мощные и гибкие инструменты.
Но бывают ситуации, где нелегко обойтись каким-то одним из этих двух видов позиционирования. Представьте, что нам необходимо сделать шапку сайта, которая будет перемещаться вместе с тем, как пользователь скролит страницу. Ни относительное, ни абсолютное позиционирование здесь не подойдёт по одной простой причине: блок не будет перемещаться при прокрутке. Он застынет на том месте в документе, где было указано.
Для решения такой проблемы существует фиксированное позиционирование. Оно очень похоже на абсолютное:
- элемент также выдёргивается из нормального потока документа, а его место занимают другие элементы;
- мы можем управлять расположением с помощью правил
top
,right
bottom
,left
.
Отличительной чертой фиксированного позиционирования является то, что элемент позиционируется относительно видимой области браузера. То есть, если установить координаты 0 по верхней границе и 0 по левой границе, то элемент всегда будет в этой позиции, вне зависимости от того, прокручивает пользователь сейчас страницу или нет.
<style> .fixed { position: fixed; top: 0; left: 0; } </style> <div>Блок с фиксированным расположением. Его координаты относительно видимой области браузера всегда будут одни и те же.</div>
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Электронная почта *
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»
Наши выпускники работают в компаниях:
Рекомендуемые программы
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.
Профессия
с нуля
Фронтенд-разработчик
Разработка фронтенд-компонентов для веб-приложений
5 января 10 месяцев
Профессия
Новый с нуля
Онлайн-буткемп. Фронтенд-разработчик
Интенсивное обучение профессии в режиме полного дня
9 февраля 4 месяца
Профессия
с нуля
Fullstack-разработчик
Разработка фронтенд- и бэкенд-компонентов для веб-приложений
5 января 16 месяцев
Профессия
с нуля
Верстальщик
Верстка с использованием последних стандартов CSS
в любое время 5 месяцев
Для перемещения по курсу нужно зарегистрироваться
1. Введение ↳ теория
2. Поток документа ↳ теория / тесты
3. Относительное позиционирование ↳ теория / тесты / упражнение
4. Абсолютное позиционирование ↳ теория / тесты / упражнение
5. Относительное и абсолютное позиционирование ↳ теория / тесты / упражнение
6. Фиксированное позиционирование ↳ теория / тесты / упражнение
7. Плавающие элементы ↳ теория / тесты / упражнение
8. Наложение элементов ↳ теория / тесты / упражнение
Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как
Не понятна формулировка, нашли опечатку?
Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку
Что-то не получается в уроке?
Загляните в раздел «Обсуждение»:
- Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
- Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
- Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!
Подробнее о том, как задавать вопросы по уроку
Изучите CSS: Шпаргалка по отображению и расположению
CSS
z-index
свойство CSS свойство z-index
указывает, насколько далеко назад или вперед будет отображаться элемент на веб-странице, когда он перекрывает другие элементы.
Свойство z-index
использует целые значения, которые могут быть положительными или отрицательными. Элемент с наибольшим значением z-index
будет на переднем плане, а элемент с наименьшим z-index 9Значение 0004 будет сзади.
//элемент 1 будет перекрывать элемент 2
.element1 {
position: absolute;
z-индекс: 1;
}
.element2 {
позиция: абсолютная;
Z-индекс: -1;
}
Фиксированное позиционирование CSS
Позиционирование в CSS предоставляет дизайнерам и разработчикам возможности для позиционирования HTML-элементов на веб-странице. Позиция CSS
может быть установлена на статический
, относительный
, абсолютный
или фиксированный
. Когда позиция CSS имеет значение fixed
, она устанавливается/прикрепляется к определенному месту на странице. Фиксированный элемент остается неизменным независимо от прокрутки. Панель навигации — отличный пример элемента, который часто имеет значение position:fixed;
, что позволяет пользователю прокручивать веб-страницу и по-прежнему получать доступ к панели навигации.
панель навигации {
позиция: фиксированная;
}
Свойство CSS
display
Свойство CSS display
определяет тип блока рендеринга для элемента. Наиболее распространенными значениями этого свойства являются block
, inline
и inline-block
.
Элементы уровня блока занимают всю ширину своего контейнера с разрывами строк до и после, а их высота и ширина могут регулироваться вручную.
Рядный 9Элементы 0082 занимают как можно меньше места, располагаются горизонтально, и их ширина или высота не могут регулироваться вручную.
Элементы встроенного блока могут располагаться рядом друг с другом, а их ширина и высота могут регулироваться вручную.
.container1 {
display: block;
}
.container2 {
display: inline;
}
.container3 {
display: inline-block;
}
CSS
position: absolute
Значение absolute
для свойства CSS position
позволяет элементу игнорировать одноуровневые элементы и вместо этого позиционироваться относительно ближайшего родительского элемента, который расположен с относительно
или абсолютно
. Абсолютное значение
полностью удаляет элемент из потока документов. Используя атрибуты позиционирования сверху
, слева
, снизу
и справа
, элемент может располагаться где угодно, как и ожидалось.
.element {
позиция: абсолютная;
}
Позиция CSS
: относительная
Значение относительная
свойства позиции CSS позволяет расположить элемент относительно того места, где он изначально находился на веб-странице. Свойства смещения можно использовать для определения фактического положения элемента относительно его исходного положения.
Без свойств смещения это объявление не повлияет на его позиционирование, оно будет действовать как значение по умолчанию
static
свойства position
.
.element {
позиция: относительная;
}
Свойство CSS
float
Свойство CSS float
определяет, насколько далеко влево или вправо должен перемещаться элемент внутри своего родительского элемента. Значение left
помещает элемент в левую часть его контейнера, а значение right
перемещает элемент в правую сторону его контейнера. Для собственности float
, необходимо указать ширину
контейнера, иначе элемент примет полную ширину содержащего его элемента.
/* Содержимое будет плавать в левой части контейнера. */
.left {
float: left;
}
/* Содержимое будет перемещаться по правой стороне контейнера. */
.right {
float: right;
}
CSS
clear
свойство CSS 9Свойство 0003 clear указывает, как элемент должен вести себя, когда он сталкивается с другим элементом в том же содержащем элементе. clear
обычно используется в сочетании с элементами, имеющими свойство CSS float
. Это определяет, с каких сторон плавающие элементы могут плавать.
/*Определяет, что никакие другие элементы внутри одного содержащего элемента не могут плавать слева от этого элемента. */
.element {
очистить: слева;
}
/* Это определяет, что никакие другие элементы внутри одного и того же содержащего элемента не могут располагаться справа от этого элемента.*/
.element {
clear: right;
}
/*Определяет, что никакие элементы внутри одного и того же содержащего элемента не могут плавать по обе стороны от этого элемента.*/
.element {
clear: Both;
}
/*Определяет, что другим элементам внутри одного содержащего элемента разрешено плавать по обе стороны от этого элемента.*/
.element {
очистить: нет;
}
Mini Arrow Left Iconprevious
NextMini Arrow Arrow Right Icon
Курс
Learn CSS
Floodner,
. и GitHub Pages
Подходит для начинающих,
18 Уроки
Подробное руководство по свойству position в CSS — Soshace • Soshace
By Dillion Megida Отслеживание Отменить отслеживание 6,241 15 февраля 2021 г. Отслеживание Отменить отслеживание
Категория:
CSS
Подробное руководство по свойству позиции CSS
Позиции часто используются в CSS для описания элементов помещается в документ. Кроме того, они описывают поведение элементов со свойствами top
, left
, bottom
и right
. В CSS есть пять свойств позиционирования, а именно: статический
, относительный
, фиксированный
, абсолютный
и липкий
. Эти свойства ведут себя особым образом. В этой статье мы узнаем больше о свойстве position
и типах.
Свойство
position
Свойство position
элемента определяет отношение между элементом и документом в отношении позиционирования. Для некоторых элементов они ограничены своим родительским элементом, а для других они напрямую связаны с областью просмотра. То, как расположены элементы, определяет, как они работают с сверху
, слева
, снизу
и справа
. Когда применяется значение 0, эти свойства могут размещать элементы либо на краю родительского элемента, либо на краю области просмотра.
Прежде чем мы перейдем к пяти свойствам положения — static
, относительный
, absolute
, fixed
и sticky
— давайте посмотрим, что такое позиционированные элементы и как они работают со свойством top
.
Позиционированные элементы и свойство
top
В CSS некоторые элементы можно позиционировать, а некоторые нельзя. Термин «позиция» означает, что элементы могут иметь сдвиг позиции, не затрагивая окружающие элементы. Для непозиционированных элементов любой сдвиг положения повлияет на элементы вокруг них. Вот что я имею в виду:
Скриншот двух блоков внутри контейнера
На скриншоте выше у нас есть два блока внутри контейнера. Теперь давайте посмотрим, что означает изменение позиции элемента.
Снимок экрана, показывающий расположение одного из блоков
На приведенном выше снимке экрана показано расположение первого блока. Как вы можете заметить, блок под ним не затрагивается.
Скриншот, показывающий, как один из блоков смещается и разрушает следующий. На том же расстоянии сдвига первый блок толкает второй блок. Вы заметите, что следующий блок теперь имеет уменьшенную высоту, так как он немного выдвинут из контейнера. На первом изображении расположен первый блок. Это означает, что такие свойства, как сверху
и снизу
(которые используются для позиционирования элементов) могут размещать блок, не затрагивая его окружение. Но такие свойства, как top
, нельзя использовать для непозиционированных элементов. Как вы видели во втором блоке, блок не перемещается. Вместо этого он проталкивается, тем самым воздействуя на элемент после него. Эти примеры приводят к следующей сводке: top
и bottom
являются свойствами, используемыми для изменения положения элементов, а margin-top
и margin-bottom
используются для выталкивания элементов. На первом изображении показан позиционированный блок с использованием top
и слева
, а на втором изображении показан непозиционированный блок с использованием margin-top
и margin-left
.
Однако не смущайтесь, если вы используете свойство margin-*
для позиционированного блока, он все равно будет протолкнут. top
как свойство позиционирования ведет себя по-разному для разных типов позиций. Кроме того, в этой статье вы узнаете, что представляют собой эти свойства положения и как они себя ведут.
статическая
позиция Свойство статическая
является значением позиции по умолчанию для каждого элемента. Для таких элементов они размещаются в том порядке, в котором они расположены в документе. Как ни странно, такие элементы не рассматриваются как позиционированные элементы. Это потому, что они размещаются в соответствии с потоком документа и не могут покинуть этот поток. Это означает, что такие свойства, как top
, не могут работать с ними. Если вы примените такое свойство как объявление стиля, вы ничего не увидите. Однако такие свойства, как 9Для них можно использовать 0003 margin-* , и, как мы уже видели в нескольких абзацах выше, такие свойства только толкают элемент, тем самым влияя на окружающие элементы.
относительная
позиция Для относительных
позиционированных элементов они сохраняют свой порядок в документе. Это означает, что они ограничены пространством, которое занимают в документе.
Снимок экрана, показывающий границу относительно расположенного синего блока
Как видно на изображении выше, первый блок занимает всю ширину (поскольку это блочный элемент). Но это еще не все, что касается относительной собственности. Как вы уже догадались, их можно переставить с помощью топ
свойство. Когда вы применяете значение 100px
к свойству top
и left
, оно перемещает элемент с верхним расстоянием 100px, начиная с верхней границы, и левым расстоянием 100px от левой границы, как показано ниже:
Снимок экрана, показывающий расстояние между текущим положением и предыдущим положением относительно расположенного синего блока
абсолютная
позиция An абсолютная 9Значение 0004 определяет элемент как позиционированный. Разница между этим и
относительной позицией
заключается в следующем:
- граница для абсолютных элементов отличается
- абсолютные элементы удаляются из потока документа
Абсолютные элементы могут быть ограничены родительским элементом или окно просмотра. Область просмотра является границей по умолчанию. Родительский элемент может стать границей только тогда, когда он имеет относительное положение. Помните, что статические (положение по умолчанию) элементы нельзя позиционировать. Поэтому они не могут служить границей. Но когда вы применяете позицию относительно
элемента, он может служить границей для абсолютных
позиционированных элементов. Допустим, синий блок имеет абсолютную позицию
с левым
из 100px
, правым
из 100px
и относительным
родителем, вот иллюстрация, показывающая его границу:
09 . граница абсолютных элементов, если есть относительные родители или нет
Как вы заметили, зеленый блок перемещается в верхнюю часть родительского элемента. Это связано с тем, что синий блок удален из потока. Окружающие элементы больше не уважают блок, поскольку он кажется невидимым. Однако в DOM синий блок предшествует зеленому элементу. Он только визуально теряет свой порядок. Синий блок рассматривает ближайший относительный родитель, который он может найти, в качестве своей границы, в противном случае — область просмотра в качестве границы. Если значение 100px
применяется к верхнему свойству, подобно относительному значению , перемещается на расстояние
100px
от верхней границы границы.
фиксированные
позиции фиксированные
позиционированные элементы аналогичны абсолютным
элементам. Они удаляются из потока документа, но, в отличие от последнего, не признают относительных
родителя в качестве границ. У них есть только одна граница — окно просмотра. Когда вы применяете значение 100px
в свойство top
, элемент перемещается на 100px
из верхней части области просмотра.
липкие
position липкие
позиционированные элементы немного сложны. Они представляют собой комбинацию фиксированной позиции
и относительной позиции . Элемент ведет себя как относительно позиционированный элемент и в какой-то момент становится фиксированным. Эта точка должна быть указана явно, иначе она будет вести себя как относительный элемент. Липкий элемент ограничен родительским элементом. Чтобы лучше понять это свойство, давайте предположим, что элемент имеет следующее объявление стиля:
.элемент { позиция: липкая; сверху: 0; }
.element { position: закреплено; сверху: 0; }
|
В приведенном выше объявлении элемент рассматривается как относительный по положению, но как только элемент достигает верхней границы, он ведет себя как фиксированный элемент. Он остается фиксированным до тех пор, пока родительский элемент больше не будет виден в окне просмотра.
Это означает:
- относительный при установке
- фиксированный при соблюдении заданного условия положения (например,
top: 0
) - относительный, когда родитель больше не виден
CSS-трюки, которые показывают, как работает свойство sticky. Чтобы увидеть его в действии, прокрутите демонстрационную веб-страницу вниз и посмотрите, как элементы прикрепляются к верхней части, когда родительский элемент находится в поле зрения.
Резюме
Позиция 9Свойство 0004 используется для определения того, как элемент помещается в документ. Позиция по умолчанию для каждого элемента —
static
, и ирония в том, что статических
элементов не считаются позиционированными
. Статические элементы размещаются так, как они появляются в DOM, и поэтому top
не оказывает на них никакого влияния. Другие типы позиции делают элементы «позиционированными», что позволяет использовать для них такие свойства, как , нижняя
.
В этой статье мы увидели подробное объяснение позиции, используемой в CSS, с 5 типами позиции. static
— единственное свойство без позиционирования. Другие есть, но они ведут себя по-разному со свойствами позиционирования, такими как сверху
, снизу
, слева
и справа
.
Примечания
- Статическое свойство
- Свойство
absolute
ограничивает элемент ближайшим родительским элементом или областью просмотра, а также визуально удаляет элемент из потока - Свойство
fixed
ведет себя какabsolute
, но ограничивает элемент только областью просмотра. все это, пока родитель виден.
Также обратите внимание, что свойства margin-*
ведут себя одинаково для sticky
, static
и relative
элементов — перемещайте их из текущей позиции в другую, воздействуя на окружающие элементы — так как они сохраняют свое расположение в документе.