Позиционированные элементы - неотъемлемая часть практически любой html-страницы. Bootstrap, как многоцелевой фреймворк для верстки, конечно же, не мог обойти вопрос позиционирования html-элементов стороной. Разработчиками 4-й и 5-й версии были созданы несколько классов, управляющих типом позиционирования, координатами элементов и их центрированием.
Поскольку Bootstrap-5 уже представил готовую версию фреймворка на своем официальном сайте, мы начнем рассматривать классы позиционирования html-элементов именно с нее. Тем не менее, много сайтов использует еще версию 4, поэтому мы также рассмотрим аналогичные классы для Bootstrap-4.
Для позиционирования элементов в Bootstrap 5 предусмотрено несколько классов, "унаследованных" еще с 4-й версии:
1 2 3 4 5 | <div class="position-static">...</div> <div class="position-relative">...</div> <div class="position-absolute">...</div> <div class="position-fixed">...</div> <div class="position-sticky">...</div> |
По самим названиям уже можно понять, что вы можете задать статическое (static
) - это обычно значение по умолчанию, относительное (relative
), абсолютное (absolute
), фиксированное (fixed
) и "прилипающее" (sticky
) позиционирование.
Следует также понимать, что для каждого класса указано позиционирование с декларацией !important
, а это значит, что переопределять значение этого свойства в медиа-запросах придется так же.
1 2 3 | .position-absolute { position: absolute !important; } |
Кроме того, не существует отзывчивых (адаптивных) классов для позиционирования типа .position-{breakpoint}-absolute
.
position: relative
для классов сетки .col-
, .col-{breakpoint}-
. Поэтому вам нужно либо добавить к ним класс .position-relative, либо дописывать это свойство для нужных вам элементов.Классы для указания координат позиционированных объектов
Для каждого элемента, снабженного одним из вышеприведенных классов можно задать классы, связанные со свойствами горизонтального и вертикального позиционирования элементов относительно контейнера. Эти классы имеют названия вида {property}-{position}
. В качестве {property}
можно использовать:
top
- аналог координатыtop
для свойстваposition
;start
- аналог свойстваleft
для позиционированных элементов;bottom
- аналог свойстваbottom
для позиционированных элементов;end
- аналог свойстваright
для позиционированных элементов.
Обратите внимание, что за координату left отвечает класс .start-
, за координату right - класс .end-
. С координатами top и bottom названия классов в Bootstrap 5 совпадают.
В качестве {position}
можно указать:
0
- для начального положения относительно любой из координат ( т.е..top-0 = top:0
,.end-0 = right: 0
и т.п.) ;50
- для размещения в50%
от любого края (.start-50 = left: 50%
,.bottom-50 = bottom - 50%
);100
- для размещения в100%
от любого края (.end-100 = right: 100%
,.bottom-100 = bottom - 100%
).
Вы можете самостоятельно задать дополнительные классы для координат, используя Sass-переменную $position-values
для этого.
Вот некоторые варианты применения классов .top-0, .top-50, .top-100, .bottom-0, start-0, .start-50, .end-0, .end-50
для указания координат абсолютно-позиционированных элементов. Напомню, что при абсолютном и фиксированном позиционировании размер элемента равен его содержимому + отступы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <div class="bs5-example-position p-4 position-relative"> <div class="position-absolute top-0 start-0">.top-0.start-0</div> <div class="position-absolute bottom-100 end-50">.bottom-100.end-50</div> <div class="position-absolute top-0 start-50">.top-0.start-50</div> <div class="position-absolute top-50 start-50">.top-50.start-50</div> <div class="position-absolute top-0 end-0">.top-0.end-0</div> <div class="position-absolute top-50 start-0">.top-50.start-0</div> <div class="position-absolute top-50 end-50">.top-50.end-50</div> <div class="position-absolute top-50 end-0">.top-50.end-0</div> <div class="position-absolute bottom-0 start-0">.bottom-0.start-0</div> <div class="position-absolute bottom-0 start-50">.bottom-0.start-50</div> <div class="position-absolute top-100 end-50 ">.top-100.end-50</div> <div class="position-absolute bottom-0 end-0">.bottom-0.end-0</div> </div> |
Посмотрим на размещение абсолютно позиционированных элементов внутри относительно позиционированного родителя с несколькими вариантами координат.
See the Pen Bootstrap 5 position + coordinates by Elen (@ambassador) on CodePen.
Центрирование элементов
Одним из способов центрировать элементы является использование position: absolute
+ трансформацию смещения, заданную свойством translateX(-50%)
(смещение по горизонтали) или translateY(-50%)
(смещение по вертикали). Именно этот подход использован в Bootstrap-5 для класса .translate-middle
.
1 2 3 4 5 6 7 8 9 10 11 | <div class="position-relative"> <div class="position-absolute top-0 start-0 translate-middle"></div> <div class="position-absolute top-0 start-50 translate-middle"></div> <div class="position-absolute top-0 start-100 translate-middle"></div> <div class="position-absolute top-50 start-0 translate-middle"></div> <div class="position-absolute top-50 start-50 translate-middle"></div> <div class="position-absolute top-50 start-100 translate-middle"></div> <div class="position-absolute top-100 start-0 translate-middle"></div> <div class="position-absolute top-100 start-50 translate-middle"></div> <div class="position-absolute top-100 start-100 translate-middle"></div> </div> |
.translate-middle-x
, а класс .translate-middle-y
нужен для вертикального центрирования позиционированных элементов..translate-middle
, .translate-middle-x
,.translate-middle-y
с классами размещения элементов вы найдете ниже.See the Pen Bootstrap 5 position + transform: translate(50%) by Elen (@ambassador) on CodePen.
Обратите внимание на код:
1 2 3 4 5 6 7 8 9 10 11 | <div class="bs5-example-position my-3 p-4 position-relative"> <div class="position-absolute top-0 start-0">1</div> <div class="position-absolute top-0 start-50 translate-middle-x">2</div> <div class="position-absolute top-0 end-0">3</div> <div class="position-absolute top-50 start-0 translate-middle-y">4</div> <div class="position-absolute top-50 start-50 translate-middle">5</div> <div class="position-absolute top-50 end-0 translate-middle-y">6</div> <div class="position-absolute bottom-0 start-0">7</div> <div class="position-absolute bottom-0 start-50 translate-middle-x">8</div> <div class="position-absolute bottom-0 end-0">9</div> </div> |
Примеры использования классов .position-relative + .position-absolute в Bootstrap 5
В примере ниже вы найдете примеры использования классов .position-relative + .position-absolute
для кнопок, progress-bar и изображений с подписями.
See the Pen Bootstrap 5 position examples by Elen (@ambassador) on CodePen.
Ссылка на документацию на официальном сайте Bootstrap (англ.)
Ссылка на русскую документацию Bootstrap 5
Позиционирование элементов в Bootstrap-4
В Bootstrap 4-й версии можно использовать такие же классы для позиционирования, что и в 5-й.
1 2 3 4 5 | <div class="position-static">...</div> <div class="position-relative">...</div> <div class="position-absolute">...</div> <div class="position-fixed">...</div> <div class="position-sticky">...</div> |
Однако классов для указания координат в Bootstrap-4 не существует, как и классов для центрирования позиционированных элементов. Зато есть классы для фиксирования элементов вверху или внизу.
1 2 | <div class="fixed-top">...</div> <div class="fixed-bottom">...</div> |
Также есть классы для "прилипающих" к верхнему краю (липких) элементов. Поскольку IE11 и IE10 отображают элементы с position: sticky
, как элементы с position: relative
, то стили для этого класса записаны в Bootstrap-4 CSS внутри запроса @supports
:
1 2 3 4 5 6 7 8 9 10 11 | <div class="sticky-top">...</div> CSS-правила для .sticky-top @supports ((position: -webkit-sticky) or (position: sticky)) { .sticky-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } |
Пример использования различных классов позиционирования в Bo otstrap 4
Шапка и подвал сайта используют классы .fixed-top
и .fixed-bottom
, а заголовок и подпись к фото - .position-absolute
.
See the Pen Bootstrap 4 position by Elen (@ambassador) on CodePen.