margin-left | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS | |
6.0+ | 8.0+ | 1.0+ | 3.5+ | 1.0+ | 1.0+ | 1.0+ | 1.0+ |
Краткая информация
Версии CSS
Описание
Устанавливает величину отступа от левого края элемента. Отступом является расстояние от внешнего края левой границы текущего элемента до внутренней границы его родительского элемента (рис. 1).
Рис. 1. Отступ от левого края элемента
Синтаксис
margin-left: значение | auto | inherit
Значения
Величину левого отступа можно указывать в пикселах (px), процентах (%) или других допустимых для CSS единицах. Значение может быть как положительным, так и отрицательным числом.
- auto
- Указывает, что размер отступов будет автоматически рассчитан браузером.
- inherit
- Наследует значение родителя.
Пример
HTML5CSS2.1IECrOpSaFx
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>margin-left</title> <style> .layer1 { background-color: #D36037; /* Цвет фона */ } .layer2 { margin-left: 20%; /* Отступ слева */ background-color: #ccc; /* Цвет фона */ padding: 10px; /* Поля вокруг текста */ } </style> </head> <body> <div> <div> Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat. Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. </div> </div> </body> </html>
Результат данного примера показан на рис. 2.
Рис. 2. Применение свойства margin-left
Объектная модель
[window.]document.getElementById(«elementID»).style.marginLeft
Браузеры
Браузер Internet Explorer 6 удваивает значение левого или правого отступа для плавающих элементов, вложенных в родительские элементы. Удваивается тот отступ, который прилегает к стороне родителя. Проблема обычно решается добавлением display: inline для плавающего элемента.
Internet Explorer до версии 7.0 включительно не поддерживает значение inherit.
padding-left | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS | |
6.0+ | 8.0+ | 1.0+ | 3.5+ | 1.0+ | 1.0+ | 1.0+ | 1.0+ |
Краткая информация
Версии CSS
Описание
Устанавливает значение поля от левого края содержимого элемента. Полем называется расстояние от внутреннего края рамки элемента до воображаемого прямоугольника, ограничивающего его содержимое (рис. 1).
Рис. 1. Поле слева от текста
Синтаксис
padding-left: значение | проценты | inherit
Значения
Величину левого поля можно указывать в пикселах (px), процентах (%) или других допустимых для CSS единицах. Значение inherit указывает, что оно наследуется у родителя.
Пример
HTML5CSS2.1IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>padding-left</title>
<style>
.layer {
background: #fc3; /* Цвет фона */
border: 2px solid black; /* Параметры рамки */
padding: 5px; /* Поля вокруг текста */
}
.layer p {
margin: 0; /* Убираем отступы вокруг */
padding-left: 10%; /* Поле слева */
}
</style>
</head>
<body>
<div>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem
nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.
Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit
lobortis nisl ut aliquip ex ea commodo consequat.</p>
</div>
</body>
</html>
Результат данного примера показан на рис. 2.
Рис. 1. Применение свойства padding-left
Объектная модель
[window.]document.getElementById(«elementID»).style.paddingLeft
Браузеры
Internet Explorer до версии 7.0 включительно не поддерживает значение inherit.
position — CSS | MDN
Свойствоcss
position
указывает, как элемент позиционируется в документе. top
, right
, bottom
и left
(en-US) определяют конечное местоположение позиционированных элементов.Исходный код этого интерактивного примера хранится в GitHub репозитории. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на перенос.
Типы позиционирования
- Позиционируемый элемент — это элемент, у которого
вычисленное значение
position
являетсяrelative
,absolute
,fixed
либоsticky
. (Другими словами, это все, кромеstatic
.) - Относительно позиционируемый элемент является элементом,
вычисленное значение
position
которого являетсяrelative
. Свойстваtop
иbottom
определяют смещение по вертикали от его нормального положения; свойстваleft
(en-US) иright
задают горизонтальное смещение. - Абсолютно позиционируемый элемент — это элемент, чьё
вычисленное значение
position
являетсяabsolute
илиfixed
.top
,right
,bottom
иleft
(en-US) задают смещения от краёвсодержащего блок элемента
. (Содержащий блок является предком, относительно которого расположен элемент.) Если элемент имеет поля, они добавляются к смещению. Элемент устанавливает новый контекст форматирования блока (BFC) для своего содержимого. - Элемент с липкой позицией — это элемент, у которого
значение вычисленного
position
являетсяsticky
. Он рассматривается как относительно позиционированный до тех пор, пока
не пересечёт указанный порог (например, установкаtop
в значение, отличное отauto
) внутри его корня потока (или в контейнере, в котором он прокручивается), после чего он обрабатывается как «застрявший» до тех пор, пока не встретит противоположный крайсодержащего его блока
.
В большинстве случаев абсолютно позиционированный элементы, которые имеют height
и width
установленные в auto
, имеют размер, соответствующий их содержимому. Тем не менее, незамещаемые, абсолютно позиционированный элементы можно сделать такими, чтобы они заполнили доступное вертикальное пространство, указав как top
, так и bottom
, и оставляя height
неопределённым (то есть , auto
). Ими также можно заполнить доступное горизонтальное пространство, указав как left
(en-US), так и right
, и оставляя width
как auto
.
За исключением только что описанного случая (абсолютно позиционированных элементов, заполняющих доступное пространство):
- Если указаны
top
иbottom
(технически, неauto
) — приоритет будет уtop
. - Если указаны
left
иright
: приоритет будет уleft
, когдаdirection
ltr
(английский язык, горизонтальный японский и т. д.), приоритет будет уright
, когдаdirection
являетсяrtl
(персидский , Арабский, иврит и т. д.).
Свойство position
указывается как одно ключевое слово, выбранное из списка значений ниже.
Значения
static
- Это значение позволяет элементу находиться в обычном его состоянии, расположенном на своём месте в документе. Свойства
top
,right
,bottom
,left
иz-index
не применяются к данному элементу. Это значение по умолчанию. relative
- Элемент позиционируется в соответствии с нормальным потоком документа, а затем смещается относительно себя на основе значений
top
,right
,bottom
иleft
. Смещение не влияет на положение любых других элементов; таким образом, пространство, заданное для элемента в макете страницы, такое же, как если бы позиция былаstatic
. - Это значение создаёт новый
контекст наложения
, когда значениеz-index
неauto
. Его влияние на элементыtable-*-group
,table-row
,table-column
,table-cell
иtable-caption
не определено. absolute
- Элемент удаляется из обычного потока документов, и для элемента в макете страницы не создаётся пробела. Он расположен относительно его ближайшего относительно позиционированного предка, если таковой имеется; в противном случае он помещается относительно исходного
содержащего блока
. Его конечная позиция определяется значениямиtop
,right
,bottom
, иleft
. - Это значение создаёт новый
контекст наложения
, когда значениеz-index
неauto
. Поля абсолютно позиционированных коробок несворачиваются
с другими полями. fixed
- Элемент выбивается из обычного потока документа, и для элемента в макете страницы не создаётся пространство. Он позиционируется относительно исходного
содержащего блока
, установленного viewport, за исключением случаев, когда один из его предков имеет свойствоtransform
,perspective
, илиfilter
, установленное на что-то иное, кромеnone
(см. CSS Transforms Spec), и в этом случае этот предок ведёт себя как содержащий блок. (Обратите внимание, что существуют несогласованности браузера с
иfilter
, способствующими содержанию формирования блоков.) Его конечная позиция определяется значениямиtop
,right
,bottom
иleft
. - Это значение всегда создаёт новый
контекст наложения
. В печатных документах элемент помещается в одно и то же положение на каждой странице. sticky
- Элемент позиционируется в соответствии с нормальным потоком документа, а затем смещается относительно его ближайшего прокручивающего предка и
содержащего блока
(ближайший родительский уровень блока), включая элементы, связанные с таблицей, на основе значенийtop
,right
,bottom
, иleft
. Смещение не влияет на положение любых других элементов. - Это значение всегда создаёт новый
контекст наложения
. Обратите внимание, что липкий элемент «прилипает» к его ближайшему предшественнику, имеющему «механизм прокрутки» (созданный приoverflow
равномhidden
,scroll
,auto
илиoverlay
), даже если тот не является ближайшим фактически прокручивающим предком. Это эффективно препятствует любому «липкому» поведению (см. Github issue on W3C CSSWG).
Формальный синтаксис
Относительное позиционирование
Относительно позиционированные элементы смещены на определённую величину от их обычной позиции в документе, но без смещения, влияющего на другие элементы. В приведённом ниже примере обратите внимание, как размещаются другие элементы, как если бы «Two» занимало пространство своего обычного расположения.
HTML
<div>One</div>
<div>Two</div>
<div>Three</div>
<div>Four</div>
CSS
.box { display: inline-block; width: 100px; height: 100px; background: red; color: white; } #two { position: relative; top: 20px; left: 20px; background: blue; }
Абсолютное позиционирование
Элементы, расположенные относительно друг друга, остаются в нормальном потоке документа. В противоположность этому, элемент с абсолютным позиционированием, выбивается из потока; таким образом, другие элементы располагаются без учёта абсолютных. Абсолютно позиционируемый элемент располагается относительно его ближайшего предка (который не является static
). Если такого предка не существует, то абсолютный элемент позиционируется относительно ICB (начальный содержащий блок — см. также определение W3C), который содержит блок корневого элемента документа.
Простой пример:
<h2>Абсолютное позиционирование</h2>
<p>Я базовый элемент уровня блока. Мои соседи сидят на новых строках ниже меня.</p>
<p>По умолчанию моя ширина 100% ширины родителя и я достиг такого же высокого уровня, как и весь дочерний контент. Наша общая ширина и высота - это наш контент+заполнение+ширина/высота границы.</p>
<p>Мы отделены нашей маржой. Из-за развала края мы отделены шириной одного из наших полей, а не обоих.</p>
<p>встроенные элементы <span>как этот</span> и <span>вот этот</span> будут сидеть в одной строке друг с другом и соседними текстовыми узлами, если в ней есть место. Переполнение встроенных элементов <span>перейдёт на новую строку, если это возможно, - как содержимое этого текста</span>, или просто перейдёт к новой строке, а если нет, то встанет, как это изображение:<img src="https://mdn.mozillademos.org/files/13360/long.jpg"></p>
body {
width: 500px;
margin: 0 auto;
}
p {
background: aqua;
border: 3px solid blue;
padding: 10px;
margin: 10px;
}
span {
background: red;
border: 1px solid black;
}
.positioned {
position: absolute;
background: yellow;
top: 30px;
left: 30px;
}
Фиксированное позиционирование
Фиксированное позиционирование аналогично абсолютному, за исключением того, что блок, содержащий элемент, является начальным содержащим блоком, установленным в окне просмотра, если только у какого-либо предка не было transform
, perspective
, или свойства filter
, отличное от none
(см. CSS Transforms Spec), из-за чего этот предок занимает место элементов, содержащих блок. Это можно использовать для создания «плавающего» элемента, который остаётся в том же положении независимо от прокрутки. В приведённом ниже примере окно c id="one"
фиксируется в 80 пикселях от верхней части страницы и в 10 пикселях слева. Даже после прокрутки оно остаётся в том же месте относительно окна просмотра.
HTML
<div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortor eget pulvinar lobortis.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam ac dolor augue.
Pellentesque mi mi, laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit.
Aliquam mollis interdum libero. Sed sodales placerat egestas. Vestibulum ut arcu aliquam purus viverra dictum vel sit amet mi.
Duis nisl mauris, aliquam sit amet luctus eget, dapibus in enim. Sed velit augue, pretium a sem aliquam, congue porttitor tortor.
Sed tempor nisl a lorem consequat, id maximus erat aliquet. Sed sagittis porta libero sed condimentum.
Aliquam finibus lectus nec ante congue rutrum. Curabitur quam quam, accumsan id ultrices ultrices, tempor et tellus.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortor eget pulvinar lobortis.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam ac dolor augue.
Pellentesque mi mi, laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit.
Aliquam mollis interdum libero. Sed sodales placerat egestas. Vestibulum ut arcu aliquam purus viverra dictum vel sit amet mi.
Duis nisl mauris, aliquam sit amet luctus eget, dapibus in enim. Sed velit augue, pretium a sem aliquam, congue porttitor tortor.
Sed tempor nisl a lorem consequat, id maximus erat aliquet. Sed sagittis porta libero sed condimentum.
Aliquam finibus lectus nec ante congue rutrum. Curabitur quam quam, accumsan id ultrices ultrices, tempor et tellus.
</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam congue tortor eget pulvinar lobortis.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nam ac dolor augue.
Pellentesque mi mi, laoreet et dolor sit amet, ultrices varius risus. Nam vitae iaculis elit.
Aliquam mollis interdum libero. Sed sodales placerat egestas. Vestibulum ut arcu aliquam purus viverra dictum vel sit amet mi.
Duis nisl mauris, aliquam sit amet luctus eget, dapibus in enim.
Sed velit augue, pretium a sem aliquam, congue porttitor tortor. Sed tempor nisl a lorem consequat, id maximus erat aliquet.
Sed sagittis porta libero sed condimentum. Aliquam finibus lectus nec ante congue rutrum.
Curabitur quam quam, accumsan id ultrices ultrices, tempor et tellus. </p>
<div>One</div>
</div>
CSS
.box {
background: red;
width: 100px;
height: 100px;
margin: 20px;
color: white;
}
#one {
position: fixed;
top: 80px;
left: 10px;
}
.outer {
width: 500px;
height: 500px;
overflow: scroll;
padding-left: 150px;
}
Липкое позиционирование
Липкое позиционирование можно рассматривать как гибрид относительного и фиксированного позиционирования. Липкий позиционированный элемент обрабатывается как относительно позиционированный до тех пор, пока он не пересечёт заданный порог, после чего он будет считаться фиксированным, пока не достигнет границы его родителя. Например…
#one { position: sticky; top: 10px; }
… позиционирует элемент с id «one» относительно до тех пор, пока видовой экран не будет прокручен таким образом, чтобы элемент был меньше 10 пикселей от вершины. Помимо этого порога элемент будет зафиксирован на 10 пикселей сверху.
Общее использование для липкого позиционирования — для заголовков в алфавитном списке. Заголовок «B» появится чуть ниже элементов, начинающихся с «A», пока они не будут прокручиваться за кадром. Вместо того, чтобы скользить за кадром с остальной частью содержимого, заголовок «B» затем останется фиксированным в верхней части окна просмотра, пока все элементы «B» не будут прокручиваться на экране, и в этот момент он будет закрыт «C», заголовок и т. д.
Вы должны указать порог с по крайней мере одним из top
, right
, bottom
, или left
(en-US) для того, чтобы липкое позиционирование могло вести себя так, как ожидалось. В противном случае он будет неотличим от относительного позиционирования.
HTML
<div>
<dl>
<dt>A</dt>
<dd>Andrew W.K.</dd>
<dd>Apparat</dd>
<dd>Arcade Fire</dd>
<dd>At The Drive-In</dd>
<dd>Aziz Ansari</dd>
</dl>
<dl>
<dt>C</dt>
<dd>Chromeo</dd>
<dd>Common</dd>
<dd>Converge</dd>
<dd>Crystal Castles</dd>
<dd>Cursive</dd>
</dl>
<dl>
<dt>E</dt>
<dd>Explosions In The Sky</dd>
</dl>
<dl>
<dt>T</dt>
<dd>Ted Leo & The Pharmacists</dd>
<dd>T-Pain</dd>
<dd>Thrice</dd>
<dd>TV On The Radio</dd>
<dd>Two Gallants</dd>
</dl>
</div>
CSS
* {
box-sizing: border-box;
}
dl {
margin: 0;
padding: 24px 0 0 0;
}
dt {
background: #B8C1C8;
border-bottom: 1px solid #989EA4;
border-top: 1px solid #717D85;
color: #FFF;
font: bold 18px/21px Helvetica, Arial, sans-serif;
margin: 0;
padding: 2px 0 0 12px;
position: -webkit-sticky;
position: sticky;
top: -1px;
}
dd {
font: bold 20px/45px Helvetica, Arial, sans-serif;
margin: 0;
padding: 0 0 0 12px;
white-space: nowrap;
}
dd + dd {
border-top: 1px solid #CCC;
}
Убедитесь, что элементы, расположенные с absolute
или fixed
значением, не затеняют другой контент при увеличении страницы, увеличивая размер текста.
Производительность и доступность
Элементы прокрутки, содержащие fixed
или sticky
контент, могут вызвать проблемы с производительностью и доступностью. Когда пользователь прокручивает страницу, браузер должен перерисовать sticky
или fixed
контент в новом месте. В зависимости от содержимого, которое необходимо перерисовать, производительности браузера и скорости обработки устройства, браузер может не справиться с перерисовкой со скоростью 60 кадров в секунду, что вызывает проблемы с доступностью для людей с чувствительностью и раздражением для всех. Одним из решений является добавление will-change: transform
к позиционированным элементам для визуализации элемента на его собственном уровне, повышения скорости перерисовки и, следовательно, повышения производительности и доступности.
BCD tables only load in the browser
Изменяем свойствами left, top, right и bottom положение элемента — Позиционирование — codebra
Введение
Сместить элемент по условным осям координат можно при помощи свойств left
, top
, right
и bottom
. Для их использования, необходимо, чтобы элемент был позиционированным, т.е. значение свойства position
для него было отлично от static
. Что делают эти свойства:
left
– отображает расстояние, на которое будет смещен элемент от левого края, в сторону правого.top
– отображает расстояние, на которое будет смещен элемент от верхнего края, в сторону нижнего.right
– отображает расстояние, на которое будет смещен элемент от правого края, в сторону левого.bottom
– отображает расстояние, на которое будет смещен элемент от нижнего края, в сторону верхнего.
В случае если задано отрицательное число, то элемент будет смещаться в противоположную сторону. Далее рассмотрим синтаксис:
Код CSS
left: размер | проценты | auto
top: размер | проценты | auto
right: размер | проценты | auto
bottom: размер | проценты | auto
Размер может быть задан в любых единицах измерения, разрешенных в CSS. Теперь рассмотрим, как влияет значение, заданное в свойстве position
.
Если для элемента свойство position задано как absolute
В данном случае родительским элементом является окно браузера, т.е. отсчет начинается от его краев. Если для свойства top
задать 10%
, то элемент сместится на 10%
вниз от окна браузера.
Если для элемента свойство position задано как relative
В таком случае элемент будет смещаться относительно своего исходного положения. Если для свойства right
задать 25px
, то элемент сместится влево на 25 пикселей, относительного того места, на котором он находился.
Если для элемента свойство position задано как absolute, а для родителя – relative
Теперь элемент будет изменять свое положение относительно родительского блока.
CSS позиционирование (CSS position) // «Фрилансер по жизни»
StaticПо умолчанию
Relative +top,left
Relative +z-index
Absolute+ position: relative; у родителя +top,left
Absolute+top,left
Fixed+width: 100%;+top,left
Sticky*
.block-1
.block-2
.block-3
Элементы отображаются как обычно. Использование свойств left, top, right, bottom и z-index не приводит к каким-либо результатам.
CSS код:
.mainblock{
background-color: #eee; position: static;}
.block-1{
position: static;}
.block-2{
position: static;}
.block-3{
position: static;}
.block-1
.block-2
.block-3
Положение элемента устанавливается относительно его исходного положения в коде. Добавление свойств left, top, right и bottom изменяет позицию элемента и сдвигает его в ту или иную сторону от первоначального расположения.
CSS код:
.mainblock{
background-color: #eee;}
.block-1{
}
.block-2{
position: relative; top: 30px; left: 20px;}
.block-3{
}
.block-1
.block-2
.block-3
Каждый элемент может находиться как ниже, так и выше других объектов веб-страницы, их размещением по z-оси и управляет z-index. Это свойство работает только для элементов, у которых значение position задано как absolute, fixed или relative.
CSS код:
.mainblock{
background-color: #eee;}
.block-1{
}
.block-2{
position: relative; top: 30px; left: 20px;}
.block-3{
position: relative; z-index: 2;}
.block-1
.block-2
.block-3
Элемент якобы вырывается из кода и зависайт в воздухе. Он перестает влиять на остальные элементы. Добавление свойств left, top, right и bottom изменяет позицию элемента и сдвигает его в ту или иную сторону относительно родителя у колого задан параметр position: relative;
CSS код:
.mainblock{
background-color: #eee; position: relative;}
.block-1{
}
.block-2{
position: absolute; top: 30px; left: 20px;}
.block-3{
}
.block-1
.block-2
.block-3
Элемент якобы вырывается из кода и зависайт в воздухе. Он перестает влиять на остальные элементы. Добавление свойств left, top, right и bottom изменяет позицию элемента и сдвигает его в ту или иную сторону относительно родителя у колого задан параметр position: relative; Если такого нет то элемент позиционируется относительно окна браузера.
CSS код:
.mainblock{
background-color: #eee;}
.block-1{
}
.block-2{
position: absolute; top: 30px; left: 20px;}
.block-3{
}
.block-1
.block-2
.block-3
Элемент якобы вырывается из кода и зависайт в воздухе. Фиксируется, то есть не скролится вместе с содержимым. Он перестает влиять на остальные элементы. Добавление свойств left, top, right и bottom изменяет позицию элемента и сдвигает его в ту или иную сторону относительно окна браузера.
CSS код:
.mainblock{
background-color: #eee;}
.block-1{
}
.block-2{
position: fixed; width: 100%; top: 0px; left: 0px;}
.block-3{
}
.block-1
.block-2
.block-3
Это гибридное сочетание значений static и fixed. Изначально єлемент ведет себя как static но после того как скролл доходит до его границы он становиться fixed и прилипает к указанной позиции top или bottom.
* Смотри поддержку браузерами
** Для демонстрации работы нужно проскролить контент внутри блока
CSS код:
.mainblock{
background-color: #eee;}
.block-1{
}
.block-2{
position: sticky; top: 0px;}
.block-3{
}
Учебное пособие по расширенному позиционированию| HTML и CSS — это сложно
Абсолютное позиционирование
«Абсолютное позиционирование» аналогично относительному позиционированию, но смещение относится ко всему окну браузера, а не к исходному положение элемента. Поскольку больше нет отношений с статический поток страницы, считайте, что это самый ручной способ разметки элемент.
Давайте посмотрим, добавив в нашу таблицу стилей следующее правило:
.item-absolute {
позиция: абсолютная;
верх: 10 пикселей;
слева: 10 пикселей;
}
Наша структура HTML такая же, как и в предыдущем примере, но
прикрепите фиолетовое изображение в верхнем левом углу окна браузера. Ты можешь
также попробуйте установить значение снизу
или справа
, чтобы получить
более четкое представление о том, что происходит.
Другой интересный эффект absolute
заключается в том, что он полностью
удаляет элемент из обычного потока страницы. Это легче увидеть с
элементы, выровненные по левому краю, поэтому давайте временно изменим justify-content
в нашем .пример
правило:
.example {
дисплей: гибкий;
justify-content: гибкий старт;
}
В нашем примере относительного позиционирования (первая строка) все еще есть
пространство, где раньше был позиционированный элемент, но с абсолютным позиционированием,
это пространство исчезло. Это как если бы .item-absolute
не существует даже для своих родительских и окружающих элементов. Будь уверен
измените justify-content
обратно на space-around
прежде чем двигаться дальше.
В большинстве случаев такое поведение не очень полезно, потому что оно
будет означать все, что на вашей странице должно быть абсолютно
позиционируется — иначе мы получим непредсказуемое перекрытие статических
элементы с абсолютными элементами. Итак, почему абсолютный
даже
существовать?
(относительно) Абсолютное позиционирование
Абсолютное позиционирование становится более практичным, когда оно выполняется относительно какой-то другой элемент, — это в статическом потоке страницы.К счастью, есть способ изменить систему координат абсолютно позиционированный элемент.
Координаты для абсолютных элементов всегда относительно ближайшего
контейнер, который является позиционированным элементом. Он только возвращается к тому, чтобы относиться к
браузер, когда ни один из его предков не позиционируется. Итак, если мы изменим .item-absolute Родительский элемент
должен быть относительно позиционирован,
он должен появиться в верхнем левом углу , этот элемент вместо
окно браузера.
.absolute {
положение: относительное;
}
Div .absolute
размещается в обычном потоке страницы,
и мы можем вручную перемещать наш .item-absolute
, где бы мы ни
нужно. Это здорово, потому что если мы хотим изменить нормальный поток
контейнера, например, для мобильного макета, любые абсолютно позиционированные элементы будут
автоматически двигаться вместе с ним.
Обратите внимание, что мы не указали координаты смещения для Абсолютный
.Мы используем относительное позиционирование подошвы
цель — позволить нашему абсолютному элементу вернуться в нормальный поток
страница. Вот как мы безопасно комбинируем абсолютное позиционирование со статическим
позиционирование.
Почему перемещение элементов с помощью translate () лучше, чем pos: abs top / left
В наши дни у нас есть два основных варианта перемещения элемента по экрану:
- с использованием преобразований CSS 2D и
translate ()
- с использованием положения
: абсолютное
иверхнее
/левое
Криса Койера спросили, почему вам следует использовать переводчик.Прочтите его ответ, который хорошо объясняет, почему более логично перемещать элементы для целей проектирования (с преобразованием в
) независимо от макета вашего элемента (с положением
).
Я хотел ответить на этот вопрос с помощью Chrome и получить убедительные доказательства того, что происходит. В итоге я записал видео по опыту:
Это хорошие часы, в которых подробно рассказывается о временной шкале Chrome DevTools, компоновке, стоимости рисования, ускоренных слоях и многом другом … но если вам нужна сокращенная текстовая версия, читайте дальше:
Первым делом Крис сделал несколько простых демонстраций, чтобы попробовать:
Это вроде работает, но в этой ситуации такая малая сложность, что все будет выглядеть отлично.Нам нужно что-то ближе к сложному веб-сайту, чтобы правильно оценить два (спасибо, Джошуа для MacBook!) :
Сейчас мы приближаемся, но сразу меня что-то отвлекает.
Отвлечение: привязка пикселей
Если вы запустите демонстрацию выше, вы можете заметить, что верхний край MacBook выглядит немного лучше в верхнем / левом. (И здесь я пишу сообщение о том, почему перевод лучше! Нелепо!) Так что это связано с тем, что macbook с абсолютным позиционированием придерживается позиций пикселей, тогда как translate ()
‘d можно интерполировать в положениях субпикселей.
Один из инженеров графического процессора Chrome, Джеймс Робинсон, назвал это «эффектом дабстепа», поскольку эти пиксели, похоже, заглушаются басами. Вот крупный план эффекта … посмотрите на верхний белый край macbook в каждом:
Слева вы видите ступеньку, спускающуюся на три пикселя вниз и снова вверх. Эта привязка к пикселям может привести к менее отвлекающему переходу в этом случае, хотя это было бы не так заметно, если бы вы перемещали объекты с менее высококонтрастной ситуацией.
Вернуться к производительности
Если вы запустите DevTool’s Timeline Frames в этих двух примерах, они начнут рассказывать совсем другую историю:
У верхнего / левого края очень много времени для рисования каждого кадра, что приводит к более прерывистому переходу. Весь CSS, включая тени больших блоков, вычисляется на ЦП и комбинируется с этим градиентным фоном каждый кадр. С другой стороны, версия translate
поднимает элемент ноутбука на свой собственный уровень в графическом процессоре (называемый RenderLayer).Теперь, когда он находится на собственном слое, любые изменения 2D-преобразования, 3D-преобразования или непрозрачности могут происходить исключительно на графическом процессоре, который будет оставаться чрезвычайно быстрым и по-прежнему обеспечивать высокую частоту кадров.
Посмотрите видео выше в конце, чтобы узнать больше о том, как диагностировать затраты на покраску, увидеть, какие области перекрашиваются, и оценить, какие элементы находятся на графическом процессоре.
Демо
Щелкните ниже, попробуйте добавить еще и посмотрите, как отразится частота кадров. Не стесняйтесь открывать DevTools и исследовать Timeline:
Руководство по анимации
- Используйте анимацию ключевых кадров CSS или переходы CSS, если это возможно.Здесь браузер может оптимизировать рисование и композицию.
- Если требуется анимация на основе JS, используйте
requestAnimationFrame
. ИзбегайтеsetTimeout
,setInterval
. - По возможности избегайте изменения встроенных стилей в каждом кадре (jQuery
animate ()
-style), декларативная анимация в CSS может быть оптимизирована браузером в большей степени. - Использование 2D-преобразований вместо абсолютного позиционирования обычно обеспечивает лучший FPS за счет меньшего времени рисования и более плавной анимации.
- Используйте режим Timeline Frame, чтобы выяснить, что замедляет ваше поведение
- «Показать области рисования» и «Визуализировать границы составного слоя» — хорошие способы проверить, где отображается ваш элемент.
Позиция | Webflow University
В этом видео используется старый интерфейс. Скоро выйдет обновленная версия!
В этом уроке:
- Статическое позиционирование
- Относительное позиционирование
- Абсолютное позиционирование
- Фиксированное позиционирование
- Липкое позиционирование
- Элементы управления положением и значения
- Настройки поплавка
- Очистить настройки
Свойство положения определяет положение элемента на странице.После того, как вы установили положение элемента, вы можете настроить свойства top, bottom, left и right.
Статическое позиционирование
Каждый элемент имеет статическое положение по умолчанию, поэтому элемент будет придерживаться потока документов. Элементы со статическим расположением отображаются в том порядке, в котором они сложены. Без добавления стиля они не будут перекрываться, и разные элементы не будут иметь разных значений по умолчанию. Единственная причина сделать элемент статическим — удалить примененное к нему позиционирование.
Относительное позиционирование
Элемент, установленный в относительный, позиционируется относительно своего нормального положения. Относительная настройка без добавления других атрибутов позиционирования (вверху, слева, внизу или справа) не будет затронута. Это потому, что он относительно самого себя, как если бы вы оставили его статичным. Установка свойств верхнего, правого, нижнего и левого угла относительного элемента приведет к его перемещению из его нормального положения. Другой контент не будет адаптироваться к любому зазору, оставленному элементом.
Элемент с относительным расположением может перекрывать другие элементы, не влияя на их положение и не прерывая нормальный поток документов.
Две другие вещи происходят, когда вы используете относительное положение элемента:
- Он вводит использование z-индекса для этого элемента. Это не работает со статическими элементами. Даже если вы не установите значение z-index, этот элемент все равно будет отображаться поверх любого другого статического элемента, который он перекрывает. Z-index доступен для любого элемента, для которого не установлено статическое значение.
- Ограничивает абсолютно позиционированные дочерние элементы. Любой элемент, который является дочерним по отношению к относительному элементу, или любой другой позиции, кроме static, может быть абсолютно позиционирован внутри этого элемента.
Подробнее о применении значения z-index.
Абсолютное позиционирование
Абсолютное положение — отличный вариант для удаления элемента из обычного потока документов. Положение абсолютного элемента не зависит от других элементов и не влияет на положение других элементов.
По умолчанию положение элемента относительно элемента body, но вы можете позиционировать любой абсолютный элемент внутри элемента, если для этого родительского элемента установлено любое значение, кроме static.
Используйте атрибуты позиционирования сверху, слева, снизу и справа, чтобы задать расположение — эти значения будут относиться к следующему родительскому элементу с параметрами, отличными от статических.
Фиксированное позиционирование
Фиксированные элементы позиционируются относительно области просмотра или окна браузера.
Когда вы прокручиваете страницу вниз, фиксированные элементы остаются на своих местах. Эта установка положения часто используется для фиксированной навигации.
Липкое позиционирование
Липкие элементы будут чередоваться между относительным и фиксированным позиционированием в зависимости от положения прокрутки зрителя.
Прикрепленный элемент относится к потоку документов до тех пор, пока не будет достигнута определенная позиция прокрутки. В этот момент он переключается на поведение фиксированного элемента в своем прямом родительском элементе. Как только липкий элемент достигнет нижней части своего родителя, он перестанет прокручиваться.
Вы должны указать по крайней мере одно значение позиции для верхней, нижней, левой или правой стороны, чтобы закрепленное позиционирование работало. Прилипание позиции может работать неправильно, если для любого родительского элемента задана высота или переполнение, для которых задано значение «Скрытый», «Прокрутка» или «Авто».
Некоторые браузеры не поддерживают фиксированное позиционирование. Посмотрите, какие браузеры поддерживают позицию: липкая.
Элементы управления положением и значения
Для относительных, абсолютных, фиксированных и закрепленных свойств положения на панели «Стиль» доступны следующие элементы управления:
- Элементы управления позиционированием
- Индикатор относительности
- Поле значений Z-индекса
Позиционирование элементы управления
Для элементов с абсолютным и фиксированным положением вы увидите предустановки, которые позволяют расположить элемент относительно элемента, указанного в индикаторе относительности.
Вы можете выбрать любое из следующих предустановленных положений:
- Вверху слева: устанавливает следующие значения: вверху: 0px — слева: 0px
- Вверху справа: устанавливает следующие значения: вверху: 0px — справа: 0px
- Bottom left: устанавливает следующие значения: bottom: 0px — left: 0px
- Bottom right: устанавливает следующие значения: bottom: 0px — right: 0px
- Left: устанавливает следующие значения: top: 0px — left: 0px — bottom: 0px
- Справа: устанавливает следующие значения: top: 0px — right: 0px — bottom: 0px
- Top: устанавливает следующие значения: top: 0px — left: 0px — right: 0px
- Bottom: устанавливает следующие значения: bottom: 0px — left: 0px — right: 0px
- Full: устанавливает следующие значения: top: 0px — bottom: 0px — left: 0px — right: 0px (охватывает весь относительный родительский элемент или тело)
Ручное управление позволяют переопределить предустановки или значение по умолчанию для автоматического значения для верхней, нижней, левой и правой стороны.Вы можете изменить значение для каждой стороны, перетащив элемент управления или щелкнув его и выбрав предустановленное значение или введя собственное значение.
- Вверху: увеличьте его, чтобы толкнуть элемент сверху вниз
- Слева: увеличьте, чтобы оттолкнуть элемент слева и переместить его вправо
- Вправо: увеличьте, чтобы оттолкнуть элемент справа и переместите его влево
- Снизу: увеличьте его, чтобы подтолкнуть элемент вверх снизу
Добавление отрицательных значений для любого из них переместит его в противоположном направлении и может вытолкнуть его за границу родительского элемента.
Индикатор относительности
Индикатор относительности показывает, относительно какого элемента расположен выбранный вами элемент.
Помните, что элемент, для которого установлено относительное позиционирование , позиционируется относительно самого себя.
Элемент, для которого задан абсолютный элемент, позиционируется относительно родительского элемента. По умолчанию это может быть элемент body. Если вы хотите абсолютно позиционировать элемент в пределах определенного родителя, измените положение этого предка на любое, кроме статического.
Фиксированный элемент позиционируется относительно тела страницы и остается на месте даже при прокрутке страницы
Прикрепленный элемент располагается относительно своего прямого родительского элемента. В некоторых случаях это будет тело страницы.
Z-index
Z-index — это позиция элемента на воображаемой оси Z, проходящей внутрь и наружу экрана вашего компьютера. По умолчанию элементы имеют автоматический z-индекс и элементы в нижней части стека страниц над элементами над ними, а элементы в правом стеке над элементами слева.Статические элементы всегда располагаются ниже, чем позиционированные элементы с положением, установленным на относительное, абсолютное, фиксированное или закрепленное.
Позиционированные элементы могут перекрывать другие элементы в естественном потоке документов, поэтому вы можете изменить значение Z-индекса любого позиционированного элемента, чтобы изменить его порядок наложения по умолчанию. Более высокие значения складываются поверх более низких значений. Значения Z-индекса могут быть любым целым числом от 0 до 2147483647. Вы также можете использовать отрицательные значения, но вы можете потерять видимость элемента, поскольку ваш элемент будет отображаться под большинством элементов.
Z-index для вложенных элементов
Если для z-index задано значение auto, порядок стека элемента равен порядку стека его родительского элемента. Эти элементы могут располагаться друг над другом относительно родительского элемента, но оставаться в пределах оси Z родительского элемента относительно других элементов. Например, если элемент A имеет более высокий z-index, чем элемент B, дочерний элемент элемента B никогда не может быть выше, чем элемент A, независимо от того, насколько велико значение z-index элемента B.
Параметры смещенияЧтобы обернуть текст вокруг элемента, переместите элемент влево или вправо.Чтобы перемещать элемент, включите свойства смещения влево или вправо на панели «Стиль».
Вы можете перемещать элемент влево или вправо или ничего, чтобы он оставался в его естественном положении в потоке страниц.
Плавающие несколько элементов будут располагать их рядом. Этот метод компоновки используется во многих собственных компонентах Webflow, таких как столбцы, списки коллекций и навигационные ссылки. Вы также можете выполнить эти задачи макета с помощью flexbox.
Float нет
None является настройкой по умолчанию для большинства элементов и позиционирует элемент в обычном потоке документов.Если элемент имеет унаследованный параметр с плавающей запятой, например от более крупной точки останова, вы можете восстановить его естественное положение на странице, установив значение с плавающей запятой на none.
Плавающий влево
Плавающий элемент слева разместит его слева внутри родительского элемента. Этот параметр также будет располагать любой элемент справа или ниже, непосредственно рядом с элементом, если к нему не применена четкая настройка.
Плавающий вправо
Плавающий элемент вправо позиционирует его вправо внутри родительского элемента.Любой длинный абзац или форматированный текст непосредственно под плавающим элементом будет обтекать этот элемент, если для них не установлено четкое свойство.
Очистить настройкиОчистка элемента гарантирует, что он не будет обтекать плавающий элемент. Этот параметр может применяться к любому элементу, расположенному ниже плавающего элемента, но не может применяться к самому плавающему элементу.
Элемент, для которого установлено свойство clear, не будет перемещаться вверх рядом с float, как того желает float, но будет перемещаться вниз мимо float
Очистить нет
Очистить нет — это настройка по умолчанию для большинства элементов.Элементы, для которых установлено значение clear non, будут складываться рядом или обтекать любой плавающий элемент непосредственно над ним в потоке документов.
Если элемент имеет унаследованную настройку очистки, например, от более крупной точки останова, вы можете очистить любую настройку очистки, установив для нее значение none.
Очистить слева
Очистить слева предотвращает обертывание элемента вокруг плавающего слева элемента.
Чистый правый угол
Чистый правый угол предотвращает обертывание элемента вокруг плавающего вправо элемента.
Очистить оба
Очистить оба предотвращает обертывание элемента вокруг любого плавающего элемента, независимо от того, перемещается он влево или вправо.
В этом видео используется старый интерфейс. Скоро выйдет обновленная версия!
Расширенные макеты с абсолютным и фиксированным позиционированием · Документация WebPlatform
Сводка
В этой статье рассматривается абсолютное и фиксированное позиционирование.
Введение
Теперь пора обратить ваше внимание на вторую пару значений свойства position
— absolute
и fixed
.Первая пара значений — статический
и относительный
— тесно связаны, и мы подробно рассмотрели их в предыдущей статье.
Абсолютно позиционированные элементы полностью удаляются из потока документов. Это означает, что они вообще не влияют на их родительский элемент или на элементы, следующие за ними в исходном коде. Таким образом, абсолютно позиционированный элемент будет перекрывать другой контент, если вы не предпримете никаких действий по его предотвращению. Иногда, конечно, это совпадение — именно то, что вам нужно, но вы должны знать об этом, чтобы убедиться, что вы получаете нужный макет!
Фиксированное позиционирование — это просто специализированная форма абсолютного позиционирования; элементы с фиксированным позиционированием фиксируются относительно окна просмотра / браузера, а не содержащего элемента; даже если страница прокручивается, они остаются в одном и том же положении в окне браузера.
В этой статье мы увидим несколько практических примеров использования позиционирования absolute
и fixed
, рассмотрим некоторые особенности поддержки браузеров и исследуем концепцию z-index.
Но прежде чем все это, давайте рассмотрим важную предварительную концепцию — содержание блоков.
Содержит блоки
Важным понятием, когда дело доходит до абсолютного позиционирования, является содержащий блок: блок блока, относительно которого расположены положение и размеры абсолютно позиционированного блока.Для статических блоков и блоков, расположенных относительно друг друга, содержащий блок является ближайшим предком на уровне блока, другими словами, родительским элементом. Однако для абсолютно позиционированных элементов все немного сложнее. В этом случае содержащий блок является ближайшим позиционированным предком . Под «позиционированным» мы подразумеваем элемент, свойство position
которого установлено на относительно
, absolute
или fixed
— другими словами, что угодно, кроме обычных статических элементов.
Таким образом, устанавливая position: relative
для элемента, вы делаете его содержащим блоком для любого абсолютно позиционированного потомка (дочерних элементов), независимо от того, появляются ли они сразу под относительно позиционированным элементом в иерархии или ниже по иерархии.
Если абсолютно позиционированный элемент не имеет позиционированного предка, то содержащий блок — это то, что называется «начальным содержащим блоком», что на практике приравнивается к элементу html
.Если вы смотрите на веб-страницу на экране, это означает окно браузера; если вы печатаете страницу, это означает границу страницы.
Элементы с фиксированным позиционированием немного отличаются от этого — они всегда имеют начальный содержащий блок в качестве содержащего их блока.
Итак, давайте суммируем это в виде набора простых шагов — чтобы найти содержащий блок для элемента с позицией : абсолютное
, это то, что вам нужно сделать:
- Посмотрите на родительский элемент абсолютно позиционированного элемента — имеет ли свойство
position
этого элемента одно из значенийотносительно
,абсолютного
илификсированного
? - Если да, значит, вы нашли содержащий блок.
- Если нет, перейдите к родительскому элементу родительского элемента и повторите, начиная с шага 1, пока не найдете содержащий блок или не исчерпаете предков.
- Если вы достигли элемента
html
, не найдя позиционированного предка, то содержащим блоком является элементhtml
.
Абсолютное позиционирование
Фиксированное позиционирование — это особая форма абсолютного позиционирования, поэтому мы изучим это позже и сконцентрируемся здесь на более общем случае. Если не указано иное, когда я использую термин «абсолютно позиционированный» с этого момента и до конца статьи, я буду ссылаться на оба элемента с положением : фиксированное
и элементы с положением : абсолютное
.
Указание позиции
При относительном позиционировании вы узнали, что свойства верхний
, правый
, нижний
и левый
могут использоваться для указания положения поля. Вы используете те же свойства, чтобы указать положение абсолютно позиционированного блока, но способ их использования совершенно другой.
Для относительно позиционированного элемента четыре свойства определяют относительное расстояние для смещения созданного блока.Помните, что в случае относительного позиционирования они дополняют друг друга, так что top: 1em
и bottom: -1em
означают одно и то же, и не имеет смысла указывать одновременно top
и bottom
(или left
и справа
) для одного и того же элемента, потому что одно из значений будет проигнорировано.
Эти точки неверны в случае абсолютного позиционирования. Здесь все четыре свойства могут использоваться одновременно, чтобы указать расстояние от каждого края позиционированного элемента до соответствующего края содержащего блока.Вы также можете указать положение одного из углов абсолютно позиционированного блока — скажем, используя верхний
и левый
— а затем указать размеры блока, используя ширину
и высоту
(или просто не используйте ширина
и высота
, если вы хотите, чтобы он был упакован в термоусадочную пленку, чтобы вместить его содержимое).
Microsoft Internet Explorer версии 6 и старше не поддерживает метод указания всех четырех краев, но они поддерживают метод указания одного угла плюс размеры.
/ * Этот метод работает в IE6 * /
#foo {
позиция: абсолютная;
верх: 3em;
слева: 0;
ширина: 30em;
высота: 20em;
}
/ * Этот метод не работает в IE6 * /
#foo {
позиция: абсолютная;
верх: 3em;
справа: 0;
внизу: 3em;
слева: 0;
}
Здесь следует помнить, что значения, которые вы устанавливаете для свойств top
, right
, bottom
и left
, определяют расстояния от краев элемента до соответствующих им , содержащих края блока.Это не похоже на систему координат, где каждое значение относится к одной исходной точке. Например, right: 2em
означает, что правый край абсолютно позиционированного блока будет на 2em от правого края содержащего блока.
Когда вы используете абсолютное позиционирование, абсолютно необходимо знать, какой у вас содержащий блок. Вот почему установка position: relative
в вашем содержащем блоке так полезна, даже если вы на самом деле не меняете положение поля.Он позволяет вам сделать элемент содержащим блоком для его абсолютно позиционированных потомков — это дает вам контроль.
Давайте попробуем пример, чтобы увидеть, как это работает.
Скопируйте приведенный ниже код в текстовый редактор и сохраните документ как absolute.html.
Абсолютное позиционирование Затем скопируйте следующий код в новый файл и сохраните его как absolute.css.
html, body { маржа: 0; отступ: 0; } #outer { маржа: 5em; граница: 1px solid # f00; } #внутренний { ширина: 6em; высота: 4em; цвет фона: # 999; }
Сохраните оба файла и загрузите документ HTML в браузер.Вы увидите серый прямоугольник, окруженный несколько более широкой красной рамкой.
Элемент
#inner
имеет заданную ширину и высоту, а также серый цвет фона. Элемент#outer
, который является структурным родительским элементом#inner
, имеет красную границу. Он также имеет поле 5em по периметру, чтобы сместить его от краев окна браузера и позволить нам более четко видеть, что происходит. Пока ничего удивительного, правда? Высота элемента#outer
задается его дочерним элементом (#inner
), а ширина — горизонтальными полями.Теперь посмотрите, что произойдет, если вы сделаете
#inner
абсолютно позиционированным! Добавьте следующее выделенное объявление к правилу#inner
:#inner { ширина: 6em; высота: 4em; цвет фона: # 999; позиция: абсолютная; }
Сохранить и перезагрузить. Вместо красной границы вокруг серого прямоугольника теперь есть только более толстая верхняя граница. А серая коробка вообще не двигалась! Вы этого ожидали?
Здесь происходят две интересные вещи.
Прежде всего, если сделать #inner
абсолютно позиционированным, это полностью удалило его из документооборота. Это означает, что его родительский элемент #outer
теперь не имеет дочерних элементов, находящихся в нормальном потоке, поэтому его высота уменьшается до нуля. То, что выглядит как красная линия толщиной 2 пикселя, на самом деле является границей в 1 пиксель вокруг элемента с нулевой высотой — вы видите верхнюю и нижнюю границы, между которыми ничего нет.
Вторая интересная вещь — абсолютно позиционированная коробка не двигалась.Значение по умолчанию для свойств top
, right
, bottom
и left
— auto
, что означает, что абсолютно позиционированный прямоугольник появится именно там, где он был бы, если бы он не был размещен. Однако, поскольку он удален из потока, он будет перекрывать любые элементы в нормальном потоке, следующие за ним. На самом деле это очень полезно — вы можете положиться на это, если хотите переместить сгенерированный блок только в одном измерении. Например, в раскрывающемся меню, управляемом CSS, «раскрывающиеся» панели могут быть абсолютно позиционированы с указанием только свойства top
.Затем они автоматически появятся в ожидаемых координатах по оси X (так же, как их родительские).
Затем давайте установим высоту для элемента
#outer
, чтобы он снова выглядел как прямоугольник, и переместим#inner
в сторону. Добавьте следующие выделенные строки в правила CSS:#outer { маржа: 5em; граница: 1px solid # f00; высота: 4em; } #внутренний { ширина: 6em; высота: 4em; цвет фона: # 999; позиция: абсолютная; слева: 1em; }
Сохраните и перезагрузите, и вы увидите некоторые изменения.Элемент
#outer
теперь снова является прямоугольником, поскольку вы задали для него высоту. Элемент#inner
сместился в сторону, но не туда, где вы могли ожидать. Это не 1em от левого края своего родителя, а 1em от левого края окна! Причина в том, что, как объяснялось выше,#inner
не имеет позиционированного предка, поэтому его содержащий блок является начальным содержащим блоком. Если вы укажете позицию, отличную отauto
, она будет относиться к соответствующему краю содержащего блока.Когда вы устанавливаетеleft: 1em
, левый край#inner
заканчивается на 1em от левого края окна.- Сохранить и перезагрузить — о чудо! Серый прямоугольник теперь находится на расстоянии 1em от левой границы родительского элемента. Установка
position: relative
в правиле#outer
сделало его позиционированным и установило его как содержащий блок для любых абсолютно позиционированных потомков, которые он мог иметь. Значениеleft: 1em
, которое вы установили для#inner
, теперь отсчитывается от левого края#outer
, а не от левого края окна браузера.
- Сохранить и перезагрузить — о чудо! Серый прямоугольник теперь находится на расстоянии 1em от левой границы родительского элемента. Установка
Указанные размеры
Абсолютно позиционированные элементы будут сжаты, чтобы соответствовать их содержимому, если вы не укажете их размеры. Вы можете указать ширину, установив свойства left
и right
, или установив свойство width
. Вы можете указать высоту, задав свойства top
и bottom
или задав свойство height
.
Любое из этих шести свойств может быть указано в процентах.Проценты по самой своей природе относятся к чему-то другому. В этом случае они относятся к размерам содержащего блока.
Для абсолютно позиционированного элемента процентные значения для свойств left
, right
и width
относятся к ширине содержащего блока. Значения в процентах для свойств top
, bottom
и height
относятся к высоте содержащего блока.
Internet Explorer 6 и старше, а также Opera 8 и старше ошиблись и вместо этого использовали размеры родительского блока .Давайте поэкспериментируем с другим примером, чтобы увидеть, как это может иметь большое значение.
Начните с указания размеров
#inner
с использованием процентных значений — внесите следующие изменения в правило#inner
:#inner { ширина: 50%; высота: 50%; цвет фона: # 999; позиция: абсолютная; слева: 1em; }
Сохраните и перезагрузите, и вы увидите, что серый прямоугольник становится шире и короче (по крайней мере, если вы используете современный браузер).Содержащий блок по-прежнему имеет номер
#outer
, поскольку он имеет позицию: относительно
. Ширина элемента#inner
теперь вдвое меньше, чем у элемента#outer
, а его высота составляет половину высоты#outer
.Давайте снова сделаем область просмотра содержащим блоком, чтобы увидеть разницу! Внесите следующие изменения в
.#outer
:#outer { маржа: 5em; граница: 1px solid # f00; высота: 4em; положение: статическое; }
Сохранить и перезагрузить — большая разница, а? Серое поле теперь вдвое меньше ширины и вдвое меньше окна браузера.Как видите, знание содержащихся блоков абсолютно необходимо!
Третье измерение — z-index
Естественно рассматривать веб-страницу как двумерную. Технологии еще недостаточно развиты, чтобы 3D-дисплеи стали обычным явлением, поэтому нам приходится довольствоваться шириной и высотой и поддельными 3D-эффектами. Но на самом деле рендеринг CSS происходит в трех измерениях! Это не значит, что вы можете заставить элемент зависать перед монитором — но вы можете делать некоторые другие полезные вещи с позиционированными элементами.
Две основные оси на веб-странице — это горизонтальная ось X и вертикальная ось Y. Начало этой системы координат находится в верхнем левом углу области просмотра, то есть там, где значения X и Y равны 0. Но есть также ось Z, которую мы можем представить как идущую перпендикулярно поверхности монитора. (или на бумагу при печати). Более высокие значения Z указывают на положение «перед» более низкими значениями Z. Значения Z также могут быть отрицательными, что указывает на положение «позади» некоторой точки отсчета (я объясню эту точку отсчета через минуту).
Прежде чем мы продолжим, предупреждаем, что это одна из самых сложных тем в CSS, поэтому не расстраивайтесь, если вы не поймете ее при первом чтении.
Позиционированные элементы (включая относительно позиционированные элементы) визуализируются в рамках так называемого контекста наложения. Элементы в контексте наложения имеют одну и ту же точку отсчета по оси Z. Подробнее об этом я расскажу ниже. Вы можете изменить положение Z (также называемое уровнем стека) позиционированного элемента, используя свойство z-index
.Значение может быть целым числом (которое может быть отрицательным) или одним из ключевых слов auto
или наследуется
. Значение по умолчанию — auto
, что означает, что элемент имеет тот же уровень стека, что и его родительский элемент.
Следует отметить, что вы можете указать только позицию индекса вдоль оси Z. Нельзя сделать так, чтобы один элемент отображался на 19 пикселей позади или на 5 сантиметров впереди другого. Думайте об этом как о колоде карт: вы можете складывать карты и решать, что пиковый туз должен быть поверх трех бубен — у каждой карты есть свой уровень стека или Z-индекс.
Если вы указываете z-index
как положительное целое число, вы назначаете ему уровень стека «перед» другими элементами в том же контексте стекирования, которые имеют более низкий уровень стека. Z-index
, равный 0 (ноль), означает то же самое, что и auto
, но есть разница, к которой я вернусь через минуту. Отрицательное целочисленное значение для z-index
назначает уровень стека «позади» родительского уровня стека.
Когда два элемента в одном контексте стекирования имеют одинаковый уровень стека, тот, который появляется позже в исходном коде, будет отображаться поверх его предыдущих братьев и сестер.
Фактически может быть не менее семи слоев в одном контексте наложения и любое количество элементов в этих слоях, но не беспокойтесь — вам вряд ли придется иметь дело с семью слоями в контексте наложения. Порядок, в котором элементы (все элементы, а не только позиционированные) в одном контексте наложения визуализируются, от задней части к передней, выглядит следующим образом:
- Фон и границы элементов, образующих контекст наложения
- Позиционированные потомки с отрицательными уровнями стека
- Потомки блочного уровня в нормальном потоке
- Плавучие потомки
- Потомки встроенного уровня в нормальном потоке
- Позиционированные потомки с уровнем стека, установленным как
авто
или (ноль) - Позиционированные потомки с положительными уровнями стека
Выделенные записи — это элементы, уровень стека которых мы можем изменить с помощью свойства z-index
.
Все это довольно сложно представить, поэтому давайте проведем несколько практических экспериментов, чтобы проиллюстрировать Z-индекс.
Начните с добавления следующей выделенной строки в свой небольшой образец документа:
<тело>