Как вертикально отцентрировать контейнер в Bootstrap?
Я ищу способ вертикального центрирования div container
внутри jumbotron
и установки его в середине страницы.
.jumbotron
должен быть адаптирован к полной высоте и ширине экрана. Div .container
имеет ширину 1025px
и должен быть в середине страницы (вертикально по центру).
Я хочу, чтобы на этой странице был адаптирован jumbotron к высоте и ширине экрана вместе с контейнером, вертикально центрированным по отношению к jumbotron. Как мне этого добиться?
.jumbotron {
height:100%;
width:100%;
}
.container {
width:1025px;
}
.jumbotron .container {
max-width: 100%;
}
<link href="#" onclick="location.href='https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.0/css/bootstrap.min.css'; return false;" rel="stylesheet"/>
<div class="jumbotron">
<div class="container text-center">
<h1>The easiest and powerful way</h1>
<div class="row">
<div class="col-md-7">
<div class="top-bg"></div>
</div>
<div class="col-md-5 iPhone-features" style="margin-left:-25px;">
<ul class="top-features">
<li>
<span><i class="fa fa-random simple_bg top-features-bg"></i></span>
<p><strong>Redirect</strong><br>Visitors where they converts more.</p>
</li>
<li>
<span><i class="fa fa-cogs simple_bg top-features-bg"></i></span>
<p><strong>Track</strong><br>Views, Clicks and Conversions.</p>
</li>
<li>
<span><i class="fa fa-check simple_bg top-features-bg"></i></span>
<p><strong>Check</strong><br>Constantly the status of your links.</p>
</li>
<li>
<span><i class="fa fa-users simple_bg top-features-bg"></i></span>
<p><strong>Collaborate</strong><br>With Customers, Partners and Co-Workers.</p>
</li>
<a href="pricing-and-signup.html" class="btn-primary btn h2 lightBlue get-Started-btn">GET STARTED</a>
<h6 class="get-Started-sub-btn">FREE VERSION AVAILABLE!</h6>
</ul>
</div>
</div>
</div>
</div>
Ответы
Ответ 1
Гибкий способ коробки
Вертикальное выравнивание теперь очень просто с помощью Гибкая компоновка ящиков. В настоящее время этот метод поддерживается в широком диапазоне веб-браузеров, кроме Internet Explorer 8 и 9. Поэтому нам нужно будет использовать некоторые хаки /a href= "https://github.com/doctyper/flexie" rel= "noreferrer" > polyfills или различные подходы для IE8/9.
В дальнейшем я покажу вам, как это сделать только в 3 строках текста (независимо от старого синтаксиса flexbox).
Примечание. лучше использовать дополнительный класс вместо изменения .jumbotron
для достижения вертикального выравнивания. Например, я бы использовал имя класса vertical-center
.
Пример здесь (A Зеркало на jsbin).
<div class="jumbotron vertical-center"> <!--
^--- Added class -->
<div class="container">
...
</div>
</div>
.vertical-center {
min-height: 100%; /* Fallback for browsers do NOT support vh unit */
min-height: 100vh; /* These two lines are counted as one :-) */
display: flex;
align-items: center;
}
Важные примечания (рассматривается в демонстрации):
-
Процентные значения свойств height
или min-height
относятся к height
родительского элемента, поэтому вы должны явно указать height
родителя.
-
Синтаксис поставщика с префиксом/старый flexbox опущен в опубликованном фрагменте из-за краткости, но существует в онлайн-примере.
-
В некоторых старых веб-браузерах, таких как Firefox 9 (в которых я тестировал) контейнер flex - .vertical-center
в этом случае - не займет свободного места внутри родителя, поэтому нам нужно указать свойство width
как: width: 100%
.
-
Также в некоторых веб-браузерах, как указано выше, элемент flex - .container
в этом случае - может не отображаться в центре по горизонтали. Кажется, что примененный left/right margin
of auto
не влияет на элемент flex.
Поэтому нам нужно выровнять его на box-pack / justify-content
.
Для получения дополнительной информации и/или вертикального выравнивания столбцов вы можете обратиться к теме ниже:
Традиционный способ для устаревших веб-браузеров
Это старый ответ, который я написал в то время, когда я ответил на этот вопрос. Этот метод обсуждался здесь, и он должен работать в Internet Explorer 8 и 9. Я объясню это короче:
В поточном потоке элемент встроенного уровня может быть выровнен по вертикали к середине с помощью vertical-align: middle
. Spec из W3C:
среднего
Выровняйте вертикальную середину поля с базовой линией родительского поля плюс половину x-высоты родительского элемента.
В случае, если элемент parent - .vertical-center
в этом случае - имеет явный height
, случайно, если бы мы могли иметь дочерний элемент, имеющий точно такой же height
родителя, мы могли бы чтобы переместить базовую линию родителя в середину полноразмерного ребенка и удивительно сделать нашего желаемого ребенка в потоке - .container
- выровненным по центру по вертикали.
Общие сведения
Как сказано, мы могли бы создать элемент полной высоты в элементах .vertical-center
на ::before
или ::after
, а также изменить тип по умолчанию display
и другого дочернего элемента .container
до inline-block
.
Затем используйте vertical-align: middle;
для выравнивания встроенных элементов по вертикали.
Здесь вы идете:
<div class="jumbotron vertical-center">
<div class="container">
...
</div>
</div>
.vertical-center {
height:100%;
width:100%;
text-align: center; /* align the inline(-block) elements horizontally */
font: 0/0 a; /* remove the gap between inline(-block) elements */
}
.vertical-center:before { /* create a full-height inline block pseudo=element */
content: " ";
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
height: 100%;
}
.vertical-center > .container {
max-width: 100%;
display: inline-block;
vertical-align: middle; /* vertical alignment of the inline element */
/* reset the font property */
font: 16px/1 "Helvetica Neue", Helvetica, Arial, sans-serif;
}
РАБОЧИЙ ДЕМО.
Кроме того, чтобы предотвратить непредвиденные проблемы на дополнительных маленьких экранах, вы можете reset установить высоту псевдоэлемента в auto
или 0
или изменить его тип display
на none
, если это необходимо:
@media (max-width: 768px) {
.vertical-center:before {
height: auto;
/* Or */
display: none;
}
}
ОБНОВЛЕНО ДЕМО
И еще одно:
Если вокруг контейнера есть разделы footer
/header
, лучше разместить эти элементы (relative
, absolute
? до вас.) и добавить более высокое значение z-index
(для гарантии), чтобы держать их всегда на вершине других.
Ответ 2
Обновление 2019
Bootstrap 4 включает в себя flexbox, поэтому метод вертикального центрирования намного проще и не требует дополнительного CSS.
Просто используйте служебные классы d-flex
и align-items-center
.
<div class="jumbotron d-flex align-items-center">
<div class="container">
content
</div>
</div>
http://www.codeply.com/go/ui6ABmMTLv
Важно: Вертикальное центрирование относительно высоты. Родительский контейнер элементов, которые вы пытаетесь центрировать, должен иметь определенную высоту. Если вы хотите высоту страницы, используйте vh-100
или min-vh-100
на родителе! Например:
<div class="jumbotron d-flex align-items-center min-vh-100">
<div class="container text-center">
I am centered vertically
</div>
</div>
Также смотрите: Центр вертикального выравнивания в Bootstrap 4
Ответ 3
добавьте Bootstrap.css, затем добавьте это в свой css
html, body{height:100%; margin:0;padding:0}
.container-fluid{
height:100%;
display:table;
width: 100%;
padding: 0;
}
.row-fluid {height: 100%; display:table-cell; vertical-align: middle;}
.centering {
float:none;
margin:0 auto;
}
Now call in your page
<div class="container-fluid">
<div class="row-fluid">
<div class="centering text-center">
Am in the Center Now :-)
</div>
</div>
</div>
Ответ 4
В Bootstrap 4:
чтобы центрировать ребенка по горизонтали, используйте класс bootstrap-4:
justify-content-center
для центрирования ребенка по вертикали используйте класс bootstrap-4:
align-items-center
но помните, что не забывайте использовать класс d-flex с этим классом утилит bootstrap-4, вот так
<div class="d-flex justify-content-center align-items-center" style="height:100px;">
<span class="bg-primary">MIDDLE</span>
</div>
Примечание: обязательно добавьте утилиты bootstrap-4, если этот код не работает
Я знаю, что это не прямой ответ на этот вопрос, но это может помочь кому-то
Ответ 5
Моя предпочтительная техника:
body {
display: table;
position: absolute;
height: 100%;
width: 100%;
}
.jumbotron {
display: table-cell;
vertical-align: middle;
}
демонстрация
body {
display: table;
position: absolute;
height: 100%;
width: 100%;
}
.jumbotron {
display: table-cell;
vertical-align: middle;
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<div class="jumbotron vertical-center">
<div class="container text-center">
<h1>The easiest and powerful way</h1>
<div class="row">
<div class="col-md-7">
<div class="top-bg">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div>
</div>
<div class="col-md-5 iPhone-features">
<ul class="top-features">
<li>
<span><i class="fa fa-random simple_bg top-features-bg"></i></span>
<p><strong>Redirect</strong><br>Visitors where they converts more.</p>
</li>
<li>
<span><i class="fa fa-cogs simple_bg top-features-bg"></i></span>
<p><strong>Track</strong><br>Views, Clicks and Conversions.</p>
</li>
<li>
<span><i class="fa fa-check simple_bg top-features-bg"></i></span>
<p><strong>Check</strong><br>Constantly the status of your links.</p>
</li>
<li>
<span><i class="fa fa-users simple_bg top-features-bg"></i></span>
<p><strong>Collaborate</strong><br>With Customers, Partners and Co-Workers.</p>
</li>
<a href="pricing-and-signup.html" class="btn-primary btn h2 lightBlue get-Started-btn">GET STARTED</a>
<h6 class="get-Started-sub-btn">FREE VERSION AVAILABLE!</h6>
</ul>
</div>
</div>
</div>
</div>
Ответ 6
Протестировано в IE, Firefox и Chrome.
.parent-container {
position: relative;
height:100%;
width: 100%;
}
.child-container {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
<div class="parent-container">
<div class="child-container">
<h2>Header Text</h2>
<span>Some Text</span>
</div>
</div>
Ответ 7
для bootstrap4 вертикальный центр из нескольких предметов
d-flex для правил flex
flex-column для вертикального направления на предметах
justify-content-center для центрирования
style = 'height: 300px;' должен иметь для заданных точек, где центр будет рассчитываться или использовать класс H-100
тогда для горизонтального центра div d-flex justify-content-center и некоторый контейнер
Итак, у нас есть иерархия из 3 тегов: div-column → div-row → div-container
<div class="d-flex flex-column justify-content-center bg-secondary"
style="height: 300px;">
<div class="d-flex justify-content-center">
<div class=bg-primary>Flex item</div>
</div>
<div class="d-flex justify-content-center">
<div class=bg-primary>Flex item</div>
</div>
</div>
Ответ 8
Если вы используете Bootstrap 4, вам просто нужно добавить 2 div:
.jumbotron{
height:100%;
width:100%;
}
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<body>
<div class="jumbotron">
<div class="d-table w-100 h-100">
<div class="d-table-cell w-100 h-100 align-middle">
<h5>
your stuff...
</h5>
<div class="container">
<div class="row">
<div class="col-12">
<p>
More stuff...
</p>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
Ответ 9
Вот способ, которым я пользуюсь для выравнивания контента по вертикали - верх/центр/низ с загрузкой в 3 строки. Начальная загрузка 3 столбца одинаковой высоты и выровнены по вертикали.
/* columns of same height styles */
.row-full-height {
height: 100%;
}
.col-full-height {
height: 100%;
vertical-align: middle;
}
.row-same-height {
display: table;
width: 100%;
/* fix overflow */
table-layout: fixed;
}
.col-xs-height {
display: table-cell;
float: none !important;
}
@media (min-width: 768px) {
.col-sm-height {
display: table-cell;
float: none !important;
}
}
@media (min-width: 992px) {
.col-md-height {
display: table-cell;
float: none !important;
}
}
@media (min-width: 1200px) {
.col-lg-height {
display: table-cell;
float: none !important;
}
}
/* vertical alignment styles */
.col-top {
vertical-align: top;
}
.col-middle {
vertical-align: middle;
}
.col-bottom {
vertical-align: bottom;
<div class="container">
<h2>Demo 1</h2>
<div class="row">
<div class="row-same-height">
<div class="col-xs-3 col-xs-height">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tempus tincidunt porttitor. Praesent vehicula aliquam enim. Fusce non luctus eros, sit amet consequat velit. Pellentesque volutpat est et est imperdiet pharetra. Integer vestibulum feugiat malesuada. Proin a felis ut libero vestibulum fermentum ut sit amet est. Morbi placerat eget lacus sed sagittis. Nullam eu elit gravida arcu viverra facilisis. Quisque laoreet enim neque, ut consequat sem tincidunt at. Fusce lobortis scelerisque libero, eget vulputate neque. </div>
<div class="col-xs-3 col-xs-height col-top">2st column</div>
<div class="col-xs-3 col-xs-height col-middle">3st column</div>
<div class="col-xs-3 col-xs-height col-bottom">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tempus tincidunt porttitor. Praesent vehicula aliquam enim. Fusce non luctus eros, sit amet consequat velit. Pellentesque volutpat est et est imperdiet pharetra.</div>
</div>
</div><!-- ./row -->
</div><!-- ./container -->