Bootstrapでコンテナーを垂直方向に中央揃えするにはどうすればよいですか?


333

containerdivをの内部で垂直方向に中央揃えしjumbotron、ページの中央に設定する方法を探しています。

.jumbotronスクリーンの完全な高さと幅に適合しなければなりません。.containerdivが幅を持っている1025pxし、ページ(縦中央)の真ん中にする必要があります。

このページでは、ジャンボトロンの垂直方向の中央にコンテナーを配置するとともに、ジャンボトロンを画面の高さと幅に適合させます。どうすればそれを達成できますか?

.jumbotron {
  height:100%;
  width:100%;
}
.container {
  width:1025px;
}
.jumbotron .container {
  max-width: 100%;
} 
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.0.0/css/bootstrap.min.css" 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>


反応中心の列でこれを参照してくださいminimit.com/articles/solutions-tutorials/...
Gothburz

css-vertical-center.comブラウザーの互換性情報に関するいくつかのソリューションがあります
EscapeNetscape

回答:


598

フレキシブルボックスウェイ

フレキシブルボックスレイアウトの使用により、垂直方向の配置が非常に簡単になりました。現在、この方法はInternet Explorer 8と9を除く幅広い Webブラウザーでサポートされています。そのため、IE8 / 9 にはいくつかのハック/ ポリフィルまたは異なるアプローチを使用する必要があります。

以下では、3行のテキストで(古いflexbox構文に関係なく)その方法を示します。

注:.jumbotron垂直方向の配置を実現するために変更するのではなく、追加のクラスを使用することをお勧めします。vertical-centerたとえば、クラス名を使用します。

例はこちら (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;
}

重要な注意事項(デモで検討)

  1. パーセンテージの値heightmin-heightプロパティに相対的であるheightため、ユーザーが指定する必要があり、親要素のheight明示的に親のを。

  2. ベンダープレフィックス付き/古いフレックスボックス構文は、簡潔さのために投稿スニペットで省略されていますが、オンラインの例には存在しています。

  3. Firefox 9 (私がテストしたもの)などの古いWebブラウザーの一部では、フレックスコンテナー.vertical-center(この場合)は親の内部の使用可能なスペースを使用しないため、次のwidthようにプロパティを指定する必要がありますwidth: 100%

  4. また、上記の一部のWebブラウザーでは、フレックス項目.container(この場合)が水平方向の中央に表示されない場合があります。左/右marginに適用autoしても、フレックスアイテムには影響がないようです。
    したがって、それをで揃える必要がありますbox-pack / justify-content

列の詳細や垂直方向の配置については、以下のトピックを参照してください。


レガシーWebブラウザーの従来の方法

これは、私がこの質問に回答したときに書いた古い回答です。この方法についてはここで説明しましたが、Internet Explorer 8および9でも機能するはずです。簡単に説明します。

インラインフローでは、インラインレベルの要素をvertical-align: middle宣言によって中央に垂直に配置できます。W3Cからの仕様

中央
ボックスの垂直方向の中点を、親ボックスのベースラインに加えて、親のxの高さの半分に合わせます。

.vertical-center(この場合は要素)に明示的ながある場合height、万が一、まったく同じheight親を持つ子要素があったとしても、親のベースラインを完全な中点に移動できます。-高さの子であり、驚くべきことに、目的の流入する子を作成します.container-垂直方向に中央に揃えます。

すべてをまとめる

そうは言っても、.vertical-centerby ::beforeまたは::afterpseudo要素内にフルハイト要素を作成し、そのデフォルトのdisplayタイプと他の子である .containertoを変更することもできます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;
}

ワーキングデモ

また、非常に小さな画面で予期しない問題が発生しないようにするために、疑似要素の高さをリセットしautoたり、必要に応じ0displayタイプをに変更したりnoneできます。

@media (max-width: 768px) {
  .vertical-center:before {
    height: auto;
    /* Or */
    display: none;
  }
}

更新されたデモ

後もう一つ:

コンテナの周りにfooter/ headerセクションがある場合は、その要素を適切に配置しrelativeabsolute?はあなた次第です)、より高いz-index値(保証のためを追加して、常に他の要素の上に配置することをお勧めします



これで問題はありませんが、に追加display: flexするとすぐに.container、子.rowのが反転します。フレックスボックスの方法では、主要なブートストラップ機能のいくつかを使用することを忘れるように思われるでしょうか?
アブラハムブルックス

118

2019年更新

Bootstrap 4にはフレックスボックスが含まれているため、垂直方向の中央揃えの方法がはるかに簡単になり、追加の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-100min-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の垂直方向の中央揃え


51

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 {高さ:100%; }が鍵です
xxxbence 2015

28

ではブートストラップ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ユーティリティを必ず追加してください

私はそれがこの質問への直接の答えではないことを知っていますが、それは誰かを助けるかもしれません


これは単にジムの答えをコピーするようです。
TylerH

9

私が好むテクニック:

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>

見つかったhttps://css-tricks.com/centering-css-complete-guide/


0

いくつかのアイテムのbootstrap4垂直中央用

フレックスルールのd-flex

アイテムの垂直方向のフレックス列

正当化-コンテンツセンターのセンタリングのために

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> 

これは単にジムの答えをコピーするようです。
TylerH

0

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>

クラス:d-table、d-table-cell、w-100、h-100、align-middleが機能します


0

コンテナクラスを与える

.container{
    height: 100vh;
    width: 100vw;
    display: flex;
}

コンテナー内にあるdivを指定します。

align-content: center;

このdiv内のすべてのコンテンツがページの中央に表示されます。


-3

ここに私がコンテンツを垂直に配置するために使用している方法があります-ブートストラップ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 -->

こちらがJSFiddleのデモです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.