Учебник по позиционированию в CSS

В CSS мы задаем расположение элемента с помощью свойства position.

Например:

.element {
  position: relative;
  top: 10px;
}
Вход в полноэкранный режим Выход из полноэкранного режима

Позиция нашего элемента будет смещена вниз на 10px от верха относительно его исходного положения в документе.

Свойство position может иметь одно из 5 значений:

  • static
  • relative
  • absolute
  • fixed
  • sticky

Давайте рассмотрим каждое из них!

Значения

Статический

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

В качестве примера приведем следующий HTML:

<div class="parent">
  <p>parent</p>
  <div class="child">
     <p>child</p>
     <div class="element">
       <p>element</p>
     </div>
  </div>
</div>
Вход в полноэкранный режим Выход из полноэкранного режима

И некоторые базовые CSS:

* {
  font-family: monospace;
  text-align: center;
  font-size: 24px;
}
.parent {
  background-color: red;
  padding: 40px;
  width: 500px;
  border: 2px solid #000;
}
.child {
  background-color: blue;
  padding: 30px;  
  border: 2px solid #000;
}
.element {
  background-color: green;
  padding: 30px;
  border: 2px solid #000;
}
Вход в полноэкранный режим Выйти из полноэкранного режима

Это дает нам следующее:

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

Если мы попытаемся применить такие свойства, как top, bottom, left или right к статическому элементу, это не даст никакого эффекта.

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

Элемент с позицией relative также останется в потоке документа, только теперь top, bottom, left & right будут работать!

Эти свойства (известные как свойства «смещения») перемещают элемент из исходного положения в указанном направлении.

Они принимают любое значение длины или процент.

Давайте добавим к нашему элементу position: relative & left со значением смещения 100px:

.element {
  /* other styles ... */
  position: relative;
  left: 100px;
}
Вход в полноэкранный режим Выйти из полноэкранного режима


Наш элемент переместится на 100px влево относительно своего контейнера.

Мы также можем задать несколько значений:

.element {
  /* other styles ... */
  position: relative;
  top: -200px;
  left: 100px;
}
Войти в полноэкранный режим Выйти из полноэкранного режима


Отрицательное значение для top перемещает бокс вверх относительно его контейнера.

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

Мы также можем применять z-индекс к относительно позиционированным элементам!

Абсолютный

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

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

.element {
  /* other styles ... */
  position: absolute;
}
Вход в полноэкранный режим Выход из полноэкранного режима


Мы можем использовать позиционные свойства с элементом absolute. Таким образом, мы можем перемещать его с помощью top, right, bottom или left:

.element {
  /* other styles ... */
  position: absolute;
  top: 0px;
  left: 0px;
}
Войти в полноэкранный режим Выйти из полноэкранного режима


Он будет позиционироваться в координатах 0,0 окна браузера (левый верхний угол).

Или:

.element {
  /* other styles ... */
  position: absolute;
  top: 250px;
  left: 100px;
}
Войти в полноэкранный режим Выйти из полноэкранного режима


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

Если все родительские контейнеры статичны, он будет располагаться относительно окна.

Но если мы добавим position: relative к элементу .child и установим top и left в 0, элемент будет позиционирован в координатах 0, 0 элемента .child:

.child {
  /* other styles ... */
  position: relative;
}
.element {
  /* other styles ... */
  position: absolute;
  top: 0px;
  left: 0px;
}
Вход в полноэкранный режим Выйти из полноэкранного режима


Это отличный трюк, который нужно запомнить при позиционировании элементов на странице!

Вы также можете использовать размещение z-index с абсолютным позиционированием.

Фиксированный

Элемент со значением fixed похож на абсолютный тем, что он также удален из потока документа.

Элемент с фиксированным позиционированием всегда располагается относительно самого окна, а не какого-либо конкретного родительского контейнера:

.element {
  /* other styles ... */
  position: fixed;
  top: 0;
  left: 0;
}
Вход в полноэкранный режим Выход из полноэкранного режима


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

Например, вы можете использовать элемент fixed для размещения иконки «прокрутки к началу» в правом нижнем углу страницы!

Липкий

Значение sticky является гибридом значений relative и fixed. Оно рассматривается как относительное значение, пока местоположение прокрутки (области просмотра) не достигнет определенного порога. В этот момент он «прилипает» на место, действуя как элемент fixed.

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

Например:

.element {
  position: sticky; 
  top: 0;
}
Войти в полноэкранный режим Выход из полноэкранного режима

Наш элемент будет располагаться относительно, пока его не достигнет место прокрутки области просмотра. Затем он прилипнет к странице в фиксированной позиции в верхней (0) части экрана.

На данном этапе sticky остается экспериментальным значением, с лишь частичным принятием основными браузерами.

Заключение

Если вам понравилась эта статья, следуйте за мной в Twitter, где я ежедневно пишу о вещах, связанных с техникой!
Если вам понравилась эта статья и вы хотите оставить совет — нажмите здесь

🌎 Давайте общаться

  • Портфолио

  • Twitter

  • LinkedIn

  • Hashnode

  • Devto

  • Medium

  • Github

  • Codepen

Оцените статью
devanswers.ru
Добавить комментарий