Содержание

Позиция — Tailwind CSS

​Основы использования

​Статическое позиционирование элементов

Используйте static для позиционирования элемента в соответствии с обычным потоком документа.

Любые смещения будут игнорироваться, и элемент не будет действовать как ссылка на позицию для абсолютно позиционированных дочерних элементов.

Статический родитель

Абсолютный ребенок

<div>
  <p>Статический родитель</p>
  <div>
    <p>Абсолютный ребенок</p>
  </div>
</div>

​Relatively positioning elements

Используйте relative, чтобы позиционировать элемент в соответствии с нормальным потоком документа.

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

Относительный родитель

Абсолютный ребенок

<div> <p>Относительный родитель</p> <div> <p>Абсолютный ребенок</p> </div> </div>

​Абсолютно позиционирующие элементы

Используйте absolute для позиционирования элемента вне обычного потока документа, заставляя соседние элементы действовать так, как будто этот элемент не существует.

Любые смещения рассчитываются относительно ближайшего родителя, который имеет позицию, отличную от static, и элемент будет действовать как ссылка на позицию для других абсолютно позиционированных дочерних элементов.

Со статическим позиционированием

Относительный родитель

Статический родитель

Статический ребенок

Статический брат

С абсолютным позиционированием

Относительный родитель

Статический родитель

Абсолютный ребенок

Статический брат

<div>
  
  <div><p>Статический ребенок</p></div>
  <div><p>Статический брат</p></div>
  
  <div><p>Абсолютный ребенок</p></div>
  <div><p>Статический брат</p></div>
</div>

​Fixed positioning elements

Используйте fixed для позиционирования элемента относительно окна браузера.

Любые смещения рассчитываются относительно окна просмотра, и элемент будет действовать как ссылка на позицию для абсолютно позиционированных дочерних элементов.

<div>
  <div>Конаткты</div>
  <div>
    <div>
      <img src="..." />
      <strong>Andrew Alfred</strong>
    </div>
    <div>
      <img src="..." />
      <strong>Debra Houston</strong>
    </div>
    
  </div>
</div>

​Закрепленные элементы позиционирования

Используйте sticky, чтобы позиционировать элемент как relative до тех пор, пока он не пересечет указанный порог, а затем рассматривать его как фиксированный, пока его родительский элемент не выйдет за пределы экрана.

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

<div>
  <div>
    <div>A</div>
    <div>
      <div>
        <img src="..." />
        <strong>Andrew Alfred</strong>
      </div>
      <div>
        <img src="..." />
        <strong>Aisha Houston</strong>
      </div>
      
    </div>
  </div>
  <div>
    <div>B</div>
    <div>
      <div>
        <img src="..." />
        <strong>Bob Alfred</strong>
      </div>
      
    </div>
  </div>
  
</div>

​Применяя условно

​Наведение, фокус и другие состояния

Tailwind lets you conditionally apply utility classes in different states using variant modifiers. For example, use hover:absolute to only apply the

absolute utility on hover.

<div>
  
</div>

For a complete list of all available state modifiers, check out the Hover, Focus, & Other States documentation.

​Контрольные точки и медиа-запросы

You can also use variant modifiers to target media queries like responsive breakpoints, dark mode, prefers-reduced-motion, and more. For example, use md:absolute to apply the absolute utility at only medium screen sizes and above.

<div>
  
</div>

To learn more, check out the documentation on Responsive Design, Dark Mode and other media query modifiers.

CSS свойство position

Устанавливает способ позиционирования элемента относительно окна браузера или других объектов на веб-странице.

CSS синтаксис

position: static | absolute | fixed | relative | initial | inherit;

Возможные значения

ЗначениеОписание
staticЗначение по умолчанию. Элементы отображаются в том порядке, в котором они появляются в потоке документа.
absoluteЭлемент имеет абсолютное позиционирование, при этом другие элементы отображаются словно абсолютно позиционированного элемента в потоке нет. Положение элемента задается свойствами left, top, right и bottom, также на положение влияет значение свойства position родительского элемента. Если у родителя значение position установлено как static или родителя нет, то отсчет координат ведется от края окна браузера. Если у родителя значение position задано как fixed, relative или absolute, то отсчет координат ведется от края родительского элемента.
fixedПо своему действию это значение близко к absolute, но в отличие от него привязывается к указанной свойствами left, top, right и bottom точке на экране и не меняет своего положения при прокрутке веб-страницы.
relativeПоложение элемента устанавливается относительно его исходного места, таким образом установка свойства «left: 20px» добавит 20 пикселей к левой позиции элемента.
inheritЗначение наследуется от родительского элемента.
initialУстанавливает значение по умолчанию.

Пример использования

Устанавливаем позиционирование элемента <h3>


h3 {
     position: absolute;
     left: 100px;
     top: 150px;
}

Позиционирование элементов — Как стать программистом

CSS position

Свойство CSS position Устанавливает способ позиционирования html элемента относительно окна браузера или других объектов на веб-странице.

Синтаксис — как использовать position

position: absolute | fixed | relative | static | inherit

Значения position

absolute
Указывает, что элемент абсолютно позиционирован, при этом другие элементы отображаются на веб-странице словно абсолютно позиционированного элемента и нет. Положение элемента задается свойствами left, top, right и bottom, также на положение влияет значение свойства positionродительского элемента. Так, если у родителя значение position установлено как static или родителя нет, то отсчет координат ведется от края окна браузера. Если у родителя значение position задано как fixed, relative или absolute, то отсчет координат ведется от края родительского элемента.
fixed
По своему действию это значение близко к absolute, но в отличие от него привязывается к указанной свойствами left, top, right и bottom точке на экране и не меняет своего положения при прокрутке веб-страницы. Браузер Firefox вообще не отображает полосы прокрутки, если положение элемента задано фиксированным, и оно не помещается целиком в окно браузера. В браузере Opera хотя и показываются полосы прокрутки, но они никак не влияют на позицию элемента.
relative
Положение элемента устанавливается относительно его исходного места. Добавление свойств left, top,right и bottom изменяет позицию элемента и сдвигает его в ту или иную сторону от первоначального расположения.
static
Элементы отображаются как обычно. Использование свойств left, top, right и bottom не приводит к каким-либо результатам.
inherit
Наследует значение родителя.

Пример использования position

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>position</title>
  <style>
   .layer1 {
    position: relative; /* Относительное позиционирование */
    background: #f0f0f0; /* Цвет фона */
    height: 200px; /* Высота блока */
   }
   .layer2 {
    position: absolute; /* Абсолютное позиционирование */
    bottom: 15px; /* Положение от нижнего края */
    right: 15px; /* Положение от правого края */
    line-height: 1px;
   }
  </style>
 </head>
 <body>
  <div class="layer1">
   <div class="layer2">
     <img src="images/girl.jpg" alt="Девочка" />
   </div>
  </div>
 </body>
</html>

Результат данного примера показан на рис. 1.

Рис. 1. Применение свойства position

Объектная модель

[window.]document.getElementById(«elementID»).style.position

Как браузеры работают со свойством position

Браузер Internet Explorer 6 значение fixed не поддерживает. Internet Explorer до версии 8.0 не поддерживает значение inherit.

Div style position relative • Вэб-шпаргалка для интернет предпринимателей!

Свойство position позволяет сдвигать элемент со своего обычного места. Цель этой главы – не только напомнить, как оно работает, но и разобрать ряд частых заблуждений и граблей.

position: static

Статическое позиционирование производится по умолчанию, в том случае, если свойство position не указано.

Его можно также явно указать через CSS-свойство:

Такая запись встречается редко и используется для переопределения других значений position .

Здесь и далее, для примеров мы будем использовать следующий документ:

В этом документе сейчас все элементы отпозиционированы статически, то есть никак.

Элемент с position: static ещё называют не позиционированным.

position: relative

Относительное позиционирование сдвигает элемент относительно его обычного положения.

Для того, чтобы применить относительное позиционирование, необходимо указать элементу CSS-свойство position: relative и координаты left/right/top/bottom .

Этот стиль сдвинет элемент на 10 пикселей относительно обычной позиции по вертикали:

Координаты

Для сдвига можно использовать координаты:

  • top – сдвиг от «обычной» верхней границы
  • bottom – сдвиг от нижней границы
  • left – сдвиг слева
  • right – сдвиг справа

Не будут работать одновременно указанные top и bottom , left и right . Нужно использовать только одну границу из каждой пары.

Возможны отрицательные координаты и координаты, использующие другие единицы измерения. Например, left: 10% сдвинет элемент на 10% его ширины вправо, а left: -10% – влево. При этом часть элемента может оказаться за границей окна:

Свойства left/top не будут работать для position:static . Если их все же поставить, браузер их проигнорирует. Эти свойства предназначены для работы только с позиционированными элементами.

position: absolute

Абсолютное позиционирование делает две вещи:

  1. Элемент исчезает с того места, где он должен быть и позиционируется заново. Остальные элементы, располагаются так, как будто этого элемента никогда не было.
  2. Координаты top/bottom/left/right для нового местоположения отсчитываются от ближайшего позиционированного родителя, т.е. родителя с позиционированием, отличным от static . Если такого родителя нет – то относительно документа.
  • Ширина элемента с position: absolute устанавливается по содержимому. Детали алгоритма вычисления ширины описаны в стандарте.
  • Элемент получает display:block , который перекрывает почти все возможные display (см. Relationships between „display“, „position“, and „float“).

Например, отпозиционируем заголовок в правом-верхнем углу документа:

Важное отличие от relative : так как элемент удаляется со своего обычного места, то элементы под ним сдвигаются, занимая освободившееся пространство. Это видно в примере выше: строки идут одна за другой.

Так как при position:absolute размер блока устанавливается по содержимому, то широкий Заголовок «съёжился» до прямоугольника в углу.

Иногда бывает нужно поменять элементу position на absolute , но так, чтобы элементы вокруг не сдвигались. Как правило это делают, меняя соседей – добавляют margin/padding или вставляют в документ пустой элемент с такими же размерами.

В абсолютно позиционированном элементе можно одновременно задавать противоположные границы.

Свойство CSS position отвечает за месторасположения элемента относительно других элементов. Используется в стилях довольно часто и поддерживается всеми браузерами (Internet Explorer, Netscape, Opera, Safari, Mozilla, Firefox, Chrome, Яндекс Браузер). Приведем простенький пример для понимания.

Примера 1 . HTML-код:

После того, как Вы откроете этот пример в окне браузера, должно отобразиться примерно следующее:

Это самый простой пример использования свойства CSS position . Теперь давайте рассмотрим все возможные атрибуты, которые может принимать этот параметр.

Синтаксис CSS position

Примечание: через | перечислены все его возможные значения. Рассмотри каждый параметр в отдельности

1. CSS position: relative

Свойство position: relative — относительное позиционирование. Мы видели пример использования этого элемента чуть выше.

При задании этого параметра, активизируются следующие параметры:

Если не указано никаких смещений, т.е.

то отображение html-элемента происходит на том же месте как и по умолчанию (т.е. без задания relative). Если же указаны смещения, то элемент будет смещен относительно своего расположения либо ниже, выше, левее или правее. При этом другие окружающие элементы считают, что никакого смещения нету. Короче говоря, использовать relative имеет смысл только если мы задали смещения.

Для пояснения этой особенности приведем пример.

Примера 2 . HTML-код:

Код преобразуется в следующее:

Примера 2* . Добавим к первому диву: position: relative; . HTML-код:

Код преобразуется в следующее:

Наш красный квадрат переместился на 200 пикселей влево и на 100 пикселей вниз и частично своей площадью закрыл текст. При этом то место, где должен был наш квадрат текст по-прежнему его огибает как будто он там есть.

2. CSS position: absolute

Свойство CSS position: absolute — в данном случае считается, что начало отсчета — левый верхний угол. Здесь также действуют свойства top , bottom , left , right . При этом элемент который обладает атрибутом absolute становится как бы блочным элементом. Приведем пример.

Примера 3 . HTML-код:

Код преобразуется в следующее:

В данном случае все три текста написаны друг за другом. Заметим, что мы специально сделали отступ слева padding-left:100px; в 100 пикселей. Теперь рассмотрим, что будет если мы во второй font добавим атрибут position: absolute .

Примера 3* . HTML-код:

Код преобразуется в следующее:

Заметим, что текст два уехал влево и теперь стоит на первой позиции. При этом текст три занял место второго. Почему так произошло? Потому что мы добавили position:absolute и отступ слева: left:0px . Как я писал выше, при атрибуте absolute начало отсчета для элемента становится — левый верхний угол.

3. CSS position: fixed

Свойство CSS position: fixed — фиксированное расположение элемента, даже при прокрутке скролла. Пожалуй, это один из самых распространенных вариантов использования position. Если при этом заданы параметры top и left, то элемент будет размещен относительно левого верхнего угла. Если же параметры не указаны, то он будет фиксироваться в таком положении, как он встретиться на странице. Приведем пример.

Примера 4. HTML-код:

Код преобразуется в следующее:

В данном примере верхняя строчка с текстом «фиксированный текст» всегда видна на странице браузера в любом положении скролла. Это свойство часто используют сайты, которые размещают рекламные строчки типо NOLIX, DAOS и т.п. См. как сделать строку как NOLIX и DAOS.

4. Остальные значения CSS position

4.1. Свойство position: static — этот параметр стоит по умолчанию. Параметры left, top, right и bottom не работают при этом значении.

4.2. Свойство position: inherit — наследование значение родителя. Т.е. смотрится ближайший элемент, в который заключен этот html-элемент и наследуется его значение.

Для обращения к position из JavaScript нужно писать следующую конструкцию:

Здравствуйте, уважаемые читатели блога Goldbusinessnet.com! Настало время дополнить «Учебник CSS» новыми полезными материалами и сегодня мы познакомимся с тем, каким образом можно разнообразить размещение различных элементов на странице, применив для них свойство позиционирования position с различными параметрами (static, relative, absolute, fixed).

Также в рамках озвученной выше темы рассмотрим, как можно задавать тот или иной отступ вправо, влево, вверх или вниз посредством использования соответствующих свойств left, right, top и bottom путем присвоения им нужных числовых значений.

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

Определение позиции элемента и нормальное позиционирование (position static)

Для свойства position существует четыре значения (static | relative | absolute | fixed), которые и определяют способ позиционирования. Как вы, наверное, знаете, параметры практически всех CSS правил можно почерпнуть с официальной странички спецификации W3, где представлен полный набор свойств и их значений, в том числе position:

Позиционированием именуют расположение элемента в системе координат. На основании значений свойства position можно различить четыре типа позиционирования: нормальное, абсолютное, относительное и фиксированное.

При помощи position и упомянутых мною выше left, right, top, bottom (отступы соответственно влево, вправо, вверх, вниз) можно регулировать положение элементов один относительно другого, фиксировать их в определенном месте или даже производить наложение одного элемента на другой.

Более того, позиционированием можно управлять посредством скриптов. Это дает возможность придать любому элементу динамику, а также создать анимационные и другие эффекты.

В том случае, если position отсутствует или оно имеет значение static, элемент отображается в обычном порядке как составная часть HTML потока. То есть все составные части вебстраницы выводятся в той последовательности, которая присутствует в исходном коде страницы.

Резюмируя, отмечу, что значения, отличные от static, позволяют изменить стандартное расположение вебэлементов страницы, что очень важно в свете решения нетривиальных задач при верстке. Кстати, другим средством, которое способно поменять обычный порядок, является свойство CSS float, с помощью которого можно создать плавающие элементы.

Position absolute (абсолютное позиционирование)

Итак, продолжим разбор технических нюансов абсолютным позиционированием, которое определяется параметром absolute свойства position:

Важно понимать, что в данном случае элемент не будет отображаться в стандартном потоке. Соответственно у нас появляется возможность определить его местоположение в абсолютной системе координат, задав отступы от краев окна браузера посредством left, right, top, bottom:

Здесь A, B, C и D — числовые величины отступов. Теперь разберем особенности значения absolute на конкретном примере. Возьмем 2 контейнера DIV с соответствующими ID (идентификаторами), которым пропишем параметры background-color (цвет фона), width (ширину) и height (высоту). Для простоты воспользуемся способом внутренних стилей, который реализуется при помощи атрибута style.

В отличие от связанных стилей, являющихся на практике наиболее оптимальными, этот метод предусматривает размещение правил CSS не в отдельном файлике, а в виде значений атрибута STYLE, приписываемых нужному тегу. При этом для чистоты эксперимента пока position absolute добавлять не будем:

Чуть выше я уже сказал, что отсутствие position по умолчанию равнозначно тому, что для этого свойства указан параметр static. То есть отображение всех элементов происходит в обычной последовательности. Соответственно в нашем случае контейнеры будут располагаться по порядку (в стандартном HTML потоке):

Напомню, что для упорядочения и оптимизации каскадных таблиц стилей в CSS существует правило наследования дочерними элементами свойств родителей. Поэтому в данном случае блочные теги занимают позицию с нулевым отступом и в пределах родительского элемента.

Далее добавляем position absolute к списку стилей верхнего элемента. В результате получаем такую картину, которая наглядно показывает, как работает это правило:

Что же произошло? После применения абсолютного позиционирования к определенному элементу все остальные блоки вебстраницы перестают его «замечать» и ведут себя так, словно его нет. Причем мы пока не указали величины смещения с помощью left, right, top и(или) bottom.

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

Итак, если указать в качестве отступа нулевое значение, то вебэлемент с параметром позиционирования absolute выйдет за пределы родителя и прилипнет к краю окна браузера. В зависимости от заданного свойства (left, right, top, bottom) это будет левый, правый, верхний или нижний предел.

Причем необходимо отметить, что left имеет преимущество перед right, а top перед bottom. Если они входят в конфликт друг с другом, то значения соответственно right и bottom игнорируются. Идем далее. Следующим шагом пропишем положительное значение для left верхнего контейнера:

В этом случае произойдет смещение вправо от левого края области просмотра, которая определяется тегом HTML документа. Давайте систематизируем и отметим по пунктам некоторые особенности поведения вебэлемента при присвоении ему position absolute:

  • Если размеры блока не указаны явно посредством width и height, то они будут соответствовать размерам контента, включая значения границ и отступов;
  • Вебэлемент не будет менять свое место, если у него не прописаны значения left, right, top или bottom;
  • Как уже было сказано, left имеет более высокий приоритет перед right, а top перед bottom;
  • Если элементу присвоить отрицательное значение left или top, то блок уйдет за границы области просмотра. При этом полоса прокрутки не появится. Этот нюанс можно использовать для удаления вебэлемента из зоны видимости;
  • В случае, если left указывается значение, превышающее ширину области просмотра или для right определяется отрицательная величина, то появляется горизонтальная прокрутка. Это же самое касается пары top и bottom;
  • Ширина блока с абсолютным позиционированием формируется с помощью left и right, однако, только тогда, когда width не указано. Аналогично происходит формирование высоты элемента при помощи top, bottom и height;
  • Вэбэлемент с параметром absolute перемещается одновременно со страницей при ее прокрутке

Думаю, я все разложил по полочкам что касается абсолютного позиционирования и вы можете сами определить, какое практическое применение может быть у элементов с таким свойством. Впрочем, в виде информации скажу, что при помощи свойства position со значением absolute можно создать блоки с фреймами, добавив правило overflow с параметром auto. Также существует возможность получить всплывающие подсказки для фото или изображений.

Position relative (относительное позиционирование)

Если для элемента со свойством position, которому присвоен параметр relative, определить значения left, right, top или bottom, то он изменит свое местоположение относительно своей изначальной позиции. Причем положительная величина left перемещает вебэлемент вправо от его левой границы, а отрицательная — влево. Аналогичные сдвиги происходят и при применении свойства top, только в вертикальной плоскости (в случае положительного значения вниз, отрицательного — вверх):

Для примера, который поможет наглядно продемонстрировать действие данной разновидности свойства position, возьмем два контейнера, один из которых с помощью свойства float:left загоним влево, а текстовое содержание второго контейнера будет обтекать этот блок. Для наглядности придадим фон этим элементам, размеры с помощью width и height, а также необходимые отступы посредством свойства margin:

Выглядеть это будет так:

Теперь добавляем к правилу CSS для первого блока position relative, а также смещения вправо (left) и вниз (top) для того, чтобы относительное позиционирование дало результат:

В итоге результирующий вид будет таким:

Как видите, произошло смещение блока по заданным параметрам. Однако, соседний элемент не отреагировал на это и текст по-прежнему обтекает перемещенный контейнер как если бы тот оставался на своем прежнем месте.

С помощью предоставленного примера, думаю, понятно как работает относительное позиционирование, однако практическое применение в чистом виде ему найти сложно. Гораздо более востребован с этой точки зрения вариант взаимодействия параметров absolute и relative, который мы и разберем ниже.

Совместное использование position absolute и relative

Теперь рассмотрим, какой результат может дать использование в связке двух видов позиционирования. Ежели родительскому элементу присвоить значение relative, а дочернему absolute, то осуществится замена системы координат и местоположение дочернего вэбэлемента будет определяться относительно его родителя:

В качестве примера практического использования данного сочетания двух видов позиционирования приведу, пожалуй свой блог, где я недавно реализовал наложение заголовка и описания на изображение шапки. Первоначально картинка выглядела так:

Для реализации задачи я поступил следующим образом. Вначале прописал в STYLE.CSS своей темы relative для свойства position классу «site-header» родительского тега HEADER:

Также для корректного вывода мне пришлось определить ширину блока с классом «site-description», указав значение width:

Затем для класса «site-branding» дочернего контейнера DIV я указал абсолютное позиционирование и прописал отступы left и top, которые будут определять местоположение элемента в этом случае не в абсолютном исчислении (применительно к окну браузера), а относительно расположения родителя.

Также необходимо было удалить из набора правил CSS для этого тега свойство «text-align:center», чтобы выровнять текст заголовка и дескрипшн по левому краю. В результате такого взаимодействия относительного и абсолютного позиционирования задача была решена и нужный текст в виде заголовка и описания блога был наложен на изображение шапки:

Кроме предложенного мной примера с помощью связки relative absolute можно реализовать в общем случае такие задачи, которые предполагают появление и исчезание определенных вебэлементов. Причем в этом случае они не будут препятствовать правильному отображению остальных составных частей вебстраницы.

Частным случаем может стать, например, создание выпадающего меню на сайте. Это работает следующим образом. Если подвести курсор мышки к заглавному пункту меню, то появляется абсолютно позиционированный блок, сделанный на базе стандартных HTML списков. Его появление обеспечивает то обстоятельство, что соответствующему тегу назначен параметр relative свойства position.

Фиксированное позиционирование position fixed

Ну и последний параметр свойства position помогает фиксировать нужные вебэлементы на странице. В принципе этот вид позиционирования очень похож на абсолютное с той лишь разницей, что элемент с прописанным значением fixed привязан к определенной области на экране в окне браузера посредством left, right, top, bottom. Он остается на месте даже при прокрутке страницы.

Очень показательным примером может оказаться материал о создании плавающего меню на сайте с помощью position fixed, об этом можете почитать, перейдя на страницу по предоставленной ссылке. Рекомендую ознакомиться с этим материалом, даже если вы не планируете реализовывать подобную панель навигации на своем вебресурсе, поскольку данный пример очень показателен и помогает понять суть фиксированного позиционирования.

Кроме реализации плавающего меню position fixed используется при создании различного вида заголовков, вкладок, изображений. Одним словом, для закрепления тех блоков на вебстранице, которые наиболее важны с точки зрения улучшения поведенческих характеристик пользователей, повышения конверсии коммерческого проекта и т.д.

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

Рекомендуем к прочтению

CSS позиционирование блоков

Представьте себе, что веб-разработчику совсем не нужно думать о том, как будет выглядеть визуально готовая страница. Он просто пишет код, элементы сами выстраиваются на странице, сверху вниз (блочные) и слева направо (строчные). Чем выше по документу написан код, тем выше он будет отображаться на странице.

Вообщем-то, мы увидим естественное поведение элементов, а порядок их отображения на странице – потоком документа. Но нас совсем не устраивает такой порядок, мы хотим логотип разместить в левом верхнем углу, а кнопку чуть правее. Нам нужен полный контроль над всеми элементами, мы решаем, где и что будет находиться. А для этого нужен инструмент (свойство), меняющее обычное поведение элементов в потоке. Что же это за свойство?

В CSS стилях это называется позиционированием (position), которое может быть обычным (static), относительным (relative) и абсолютным (absolute).

Относительное позиционирование в CSS

При относительном позиционировании, блок перемещается относительно своего исходного положения. Однако прописав блоку:

position: relative;

ничего не произойдет, он останется на месте. А перемещает блок система координат (top, bottom, left, right), как с положительными, так и отрицательными значениями.

Как это работает?

Внутри желтого блока с классом block-yellow находится красный блок с классом block-relative. В обычном потоке, красный блок перекрывает желтый, так как он в коде прописан последним.

<div>исходная позиция
<div>относительная позиция- relative</div>
</div>

Нам надо сдвинуть красный блок вниз на 10 пикселей. Сделать это можно, только насильственно поменяв позицию красного блока. Мы так и пишем top: 10px, но надо указать, от чего отсчитывать эти 10 пикселей?

Прописав position: relative, мы ясно даем понять, что отсчитывать относительно его текущего положения.

.block-yellow {
  background-color: #ffe70f;
}

.block-relative {
  position: relative;
  top: 10px;
  background-color: #ed5b77;
}

На картинке мы видим, как красный блок сдвинулся вниз, на 10 пикселей вниз, от своего первоначального положения.

Если убрать из кода position: relative, то блок останется на месте. А если вместо relative, написать absolute, то по умолчанию отсчет этих 10 пикселей будет вестись от края окна браузера и в итоге наш блок наоборот поднимется вверх, подтягиваясь к нижней кромке браузера. А это в наши планы не входило.

Абсолютное позиционирование в CSS


На картинке блок позиционирован абсолютно, это когда отсчет системы координат ведется от края браузера, заменив всего одно слово, мы поменяли положение блока.

position: absolute;

Есть одна особенность. Абсолютное позиционирование оказывает влияние и на строчные элементы. Если строчному элементу задать position: absolute, то он станет вести себя как блочный. Это аналог свойству — display: block.

Это ещё не всё, «абсолютный» элемент, находящийся внутри «относительного» родителя, меняет свою точку отсчета координат и начинает позиционироваться от родителя.

<div>
position: relative
<div>
position: absolute;
</div>
</div>

Блок с классом block-absolute находиться внутри родителя block-yellow.

.block-yellow {
  position: relative;
  padding: 10px;
  background-color: #ffe70f;
}

Поскольку желтый блок имеет относительное позиционирование, то красный блок с абсолютным позиционированием, сдвигается относительно красного на заданные пиксели.

.block-absolute {
  position: absolute;
  bottom: 10px;
  left: 10px;
  background-color: #ed5b77;
}

Фиксированное позиционирование

При прокручивании страницы блок с position: fixed, будет оставаться на месте, обычно такой метод применяют для закрепления навигационной панели.

z-index

Разруливает порядок перекрытия «абсолютных» блоков. Нам надо, чтобы красный блок был сверху желтого, тогда мы указываем z-index: 2 для красного и z-index: 1 для желтого.

<div>Красный</div>
<div>Желтый</div>

.block-red {
  position: relative;
  z-index: 2;
  background-color: #ffe70f;
}

.block-yelow {
   position: absolute;
   top: 20px;
   z-index: 1;
   background-color: #ed5b77;
}


  • Создано 28.09.2018 10:23:38
  • Михаил Русаков

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Как отцентровать абсолютно спозиционированный элемент

Время от времени возникает задача отцентровать абсолютно спозиционированный элемент. Предлагаемое решение кажется очевидным после его реализации. Горизонтальное расположение по центру статического элемента с помощью CSS обычно осуществляется с помощью установки автоматического значения левого и правого внешнего отступов, например:

 

 

#myelement{
  margin: 0 auto;
} 

Но этот способ не сработает, если у элемента абсолютное позиционирование. В этом случае его расположение определяется относительно непосредственного родителя, у которого абсолютное, относительное или фиксированное позиционирование.

В следующем примере у относительно спозиционированного красного прямоугольника ширина задана как 40% доступного пространства. Значение отступа от верхней границы у абсолютно спозиционированного синего квадрата составляет 10px, а значение отступа от левой границы — 30px:

#outer{
  position: relative;
  width: 40%;
  height: 120px;
  margin: 20px auto;
  border: 2px solid #c00;
}
#inner{
  position: absolute;
  width: 100px;
  height: 100px;
  top: 10px;
  left: 30px;
  background-color: #00c;
}

 

 

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

#outer{
  position: relative;
  width: 40%;
  height: 120px;
  margin: 20px auto;
  border: 2px solid #c00;
}
#inner{
  position: absolute;
  height: 100px;
  left: 30px;
  top: 10px;
  right: 30px;
  background-color: #00c;
}

 

А как отцентровать блок с заданными размерами? Ответ может быть несколько необычным:

  1. Для начала зададим значение отступа от левой границы 50%. Это передвинет левый край синего квадрата в центр.
  2. Так как теперь квадрат сдвинут сильно вправо, зададим отрицательное значение левого внешнего отступа, равное половине ширины квадрата. В этом примере нужно задать значение -50px, чтобы квадрат вернулся на место.
#outer{
  position: relative;
  width: 40%;
  height: 120px;
  margin: 20px auto;
  border: 2px solid #c00;
}
#inner{
  position: absolute;
  width: 100px;
  height: 100px;
  top: 10px;
  left: 50%;
  margin-left: -50px;
  background-color: #00c;
}

 

 

Синий квадрат будет располагаться по центру не зависимо от изменения ширины внешнего элемента.

Автор урока Craig Buckler

Перевод — Дежурка

Смотрите также:

Устанавливаем размеры блока через абсолютное позиционирование

В данной статье рассказывается о том, как можно оперировать позициями и размерами в CSS, чтобы создавать блоки и решать типичные задачи дизайна. Также здесь будет показано, как можно через позиционирование определить размеры блока.

Постановка задачи

Итак, чтобы вникнуть в суть этих двух параметров свойств CSS предлагаю использовать практический пример. Для этого поставим перед собой следующую задачу: создать такой блок, у которого сверху, слева и справа установлены отступы по 20 пикселей до границ родительского элемента. Снизу от рассматриваемого блока должен быть отступ, который занимает половину высоты родителя. Ниже представлена схема, которая показывает, что должно получиться в итоге:

Стоит обратить внимание, что по нашей задачке не указана высота родительского элемента. Поэтому наше решение будет носить универсальный характер и будет гибким с точки зрения верстки.

Решение

Решение нашей задачи будет основываться на применении абсолютного позиционирования. Однако тут же может возникнуть вопрос, как же можно использовать такой тип позиционирования при неизвестной стороне? Можно! Стоит только шире посмотреть на проблему, так как размер можно определить не только с помощью свойств width и height. Нашей проблеме помогут функции top, right, bottom и left.

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

HTML

        <div>
		<div></div>
	</div>

CSS

.block0 {
	display:block;
	width:300px;
	height:300px;
	margin:30px auto 0px auto;
	background:#d4d8ff;
	position:relative; /* этот родительский блок 
        нужен только для визуализации того,
        что все условия поставленной задачи соблюдены */
	}
.block {
	position:absolute;
	top:20px;  
	bottom: 50%; /* установит отступ ровно в
        половину от высоты родителя */
 	right: 20px;
	left: 20px; 
	background:#679bce;
	}

Мы получим следующую картину в браузере

Сравнивая исходно поставленную задачу (картинку схемы правильного решения) и полученный результат, можно сделать вывод, что задача решена.

Однако не стоит забывать про старичка Internet Explower, он как обычно требует индивидуального подхода. Чтобы старичок справился с задачей, выдадим ему «костыли»

CSS

html .box{
	height: expression( parentNode.offsetHeight/2 - 20 + 'px');
	width: expression( parentNode.offsetWidth - 40 + 'px');
}

Теперь поясняю смысл кода! Первая строка содержит указания, что высота потомка не должна превышать половину аналогичного параметра у родителя, причем не забываем отступ сверху, равный 20 пикселям. Вторая строка прописывает ширину нашего блока, с учетом левого и правого отступа.

Стоит отметить, что для реальных условий при использовании «костылей» необходимо создавать отдельный файл с CSS-кодом, который будет подшит к документу условным комментарием.
Стоит отметить, что это не наиболее рациональный вариант оптимизации работы IE, однако при нынешних условиях развития браузера (которых вообще нет, так как Microsoft перестал выпуск этого продукта) можно закрыть на это глаза и пользоваться первоначальным вариантом.

Для принципиальных личностей привожу идеальный вариант кода, однако помните, что рационализация будет иметь место только при наличии одного из статических размеров

CSS

 html .box{
z-index: expression( /* оптимизированный expression,  
который сработает только при загрузке страницы */
runtimeStyle.zIndex = 1,
runtimeStyle.height = parentNode.offsetHeight/2 - 20 + 'px');
}

Где можно применить такое решение?

Это конечно все отлично, но возникает вполне законный вопрос зачем это знать и где можно применить?

Иметь в арсенале такой прием никогда не помешает, а применить это можно при использовании декоративных бэкграундных картинок. Причем стоит отметить, что этот элемент будет оптимизирован под любое разрешение экрана, так как он имеет абсолютное позиционирование (прием работает и при position: fixed;).

В каких браузерах работает?

6.0+ 5.0+ 9.5+ 4.0+ 3.0+

Выводы

Подводя итог, следует обратить внимание на то, что размеры блока не всегда определяются свойствами width и height. Можно использовать абсолютное позиционирования и сопутствующие элементы. Также, не стоит забывать, что для работы приема в Internet Explower следует прописать функцию expression. Кроме того, родительский блок должен быть позиционирован, как relative. В некоторых случаях это вызывает определенные неудобства. Несомненно, применение этого способа не слишком распространено, однако иногда это знание принесет большую пользу.

Оценок: 4 (средняя 5 из 5)

Понравилась статья? Расскажите о ней друзьям:

Курсы по CSS (в открытом доступе)

Уровень сложности:

Средний

Еще интересное

Расположение дочернего элемента div относительно родительского контейнера в CSS

10 июля 2013 г. Том Эллиотт

Один из распространенных методов CSS, который поначалу может показаться немного сложным, — это возможность абсолютного позиционирования дочернего элемента div в родительском контейнере div относительно родителя.

Существует множество сценариев, в которых может потребоваться такое позиционирование для div и других элементов HTML.Например, размещение элемента div в правом нижнем углу нижнего колонтитула, смещение изображения относительно содержащей его панели или размещение дочернего элемента ul внутри родительского li для системы меню.

При попытке позиционировать дочерний элемент div относительно его родителя необходимо помнить, что дочернему элементу должно быть присвоено свойство CSS position:absolute; и родительский установлен либо в position:absolute; или положение: относительное; .Другие стили позиционирования для position:fixed; и позиция: наследовать; также может работать в некоторых случаях, но редко требуется.

Если в родительском элементе опущено свойство position, то дочерний элемент div будет позиционирован относительно следующего содержащего элемента div с относительной или абсолютной позицией. Если на странице нет содержащих элементов, для которых эти свойства положения установлены, то дочерний элемент будет позиционирован относительно тела страницы.

Рассмотрим следующие примеры позиционирования CSS:

1.Дочерний div расположен внизу справа от родителя

HTML и CSS для этого довольно просты. Родительский контейнер устанавливается в относительное положение, а дочерний — в абсолютное. Чтобы выровнять дочерний элемент по нижнему правому краю, мы используем bottom:0px; и справа: 0 пикселей;

HTML

<дел>
   <дел>

УСБ

.родитель {
  ширина: 250 пикселей;
  высота: 250 пикселей;
  цвет фона:#CCCCCC;
  должность: родственница;
}

.ребенок {
  ширина: 100 пикселей;
  высота: 100 пикселей;
  цвет фона:#999999;
  положение: абсолютное;
  внизу: 0px;
  справа: 0 пикселей;
}
 

Если в этом случае родительский элемент div не имеет свойства CSS position , то он будет выровнен по нижней части страницы.

2. Дочерний элемент div расположен вверху справа от родителя, а родитель внизу слева.

Давайте добавим еще один дочерний ящик в этом примере. Мы назовем эти элементы дедушкой и бабушкой (большая коробка), родителем и дочерним элементом (маленькая коробка).

Поскольку родитель расположен относительно прародителя с bottom:0px; , то ему присваивается позиция :абсолютный . Дочерний элемент, расположенный сверху справа от своего родителя, также имеет позицию : абсолютная; с сверху: 0 пикселей; и справа: 0 пикселей; , а прародитель имеет свойство CSS position:relative; .

HTML

<дел>
   <дел>
      <дел>