Как по центру выровнять по вертикали контейнер в начальной загрузке

217

Я ищу способ вертикально центрировать выравнивание container div внутри jumbotron и установить его в середине страницы.

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

.jumbotron{
  heght:100%;
  width:100%;
}

.container div имеет ширину 1025px и должен находиться посередине страницы (вертикально в центре).

.container{
  width:1025px;
}

.jumbotron .container {
  max-width: 100%;
}

Мой HTML-код похож на

<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>    

Итак, я хочу, чтобы на этой странице был настроен jumbotron с высотой и шириной экрана вместе с контейнером, вертикально центрирующим jumbotron. Как я могу это достичь?

  • 0
    не перезаписывайте класс .container. Создать новый класс и должность в абсолютно. Если содержимое динамическое, используйте jquery для настройки на margin-top нового контейнера (поскольку jq уже является частью bs)
  • 0
    Можете ли вы предоставить немного кода или jsfiddle?
Показать ещё 4 комментария
Теги:
twitter-bootstrap-3
vertical-alignment

6 ответов

451
Лучший ответ

Гибкий способ коробки

Вертикальное выравнивание теперь очень просто с помощью Гибкая компоновка ящиков. В настоящее время этот метод поддерживается в широком диапазоне веб-браузеров, кроме 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 (для гарантии), чтобы держать их всегда на вершине других.

  • 1
    Работает, но теперь контейнер не выровнен по центру по горизонтали.
  • 0
    @ user1012181 Вы проверили онлайн демо? Контейнер представляет собой золотой ящик, который выровнен по центру по горизонтали и вертикали.
Показать ещё 22 комментария
44

добавьте 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>
  • 3
    html AND body {height: 100%; } это ключ
12

Обновление 2017

Bootstrap 4 (в настоящее время в Alpha) включает 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

6

Моя предпочтительная техника:

body {
  display: table;
  position: absolute;
  height: 100%;
  width: 100%;
}

.jumbotron {
   display: table-cell;
   vertical-align: middle;
}

Demo

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>

См. также этот скрипт!

2

Протестировано в IE, Firfox и Chrome.

CSS

    .parent-container {
        position: relative;
        height:100%;
        width: 100%;
    }

    .child-container {
        position: absolute;
        top: 50%;
        left: 50%;
        transform: translate(-50%, -50%);
    }

HTML:

    <div class="parent-container">
    <div class="child-container">
            <h2>Header Text</h2>
              <span>Some Text</span>
    </div>
    </div>

Найдено на https://css-tricks.com/centering-css-complete-guide/

  • 0
    Это мой предпочтительный способ, лучше всего работает в большинстве случаев по моему опыту, потому что макет таблицы иногда отстой, а гибкий макет еще не является общей поддержкой, этот способ прост в обращении и будет работать на мобильных устройствах !!!
-3

Вот способ, которым я использую для выравнивания содержимого по вертикали: верх/центр/дно с бутстрапом 3 строки:

Вот скрипка Демо: js скрипка

Bootstrap 3 columns with same height and vertically aligned - 

/* 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 -->

Ещё вопросы

Сообщество Overcoder
Наверх
Меню