วิธีการจัดกึ่งกลางคอนเทนเนอร์ในแนวตั้งใน Bootstrap


333

ฉันกำลังมองหาวิธีที่จะจัดศูนย์กลางcontainerdiv ไว้ในแนวตั้งภายในjumbotronและตั้งให้อยู่ตรงกลางของหน้า

.jumbotronจะต้องมีการปรับตัวให้เต็มความสูงและความกว้างของหน้าจอ .containerdiv มีความกว้างของ1025pxและควรจะอยู่ตรงกลางของหน้า (กลางแนวตั้ง)

ฉันต้องการให้หน้านี้มี jumbotron ที่ปรับให้เหมาะกับความสูงและความกว้างของหน้าจอพร้อมกับที่เก็บกึ่งกลางแนวตั้งไปที่ jumbotron ฉันจะประสบความสำเร็จได้อย่างไร

.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 ดังนั้นเราต้องใช้ hacks / 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;
}

หมายเหตุสำคัญ(พิจารณาในตัวอย่าง) :

  1. ร้อยละค่าheightหรือmin-heightคุณสมบัติเป็นญาติกับheightขององค์ประกอบหลักดังนั้นคุณควรระบุheightของผู้ปกครองอย่างชัดเจน

  2. ผู้ขายนำหน้าไวยากรณ์ / flexbox เก่าที่ละเว้นในส่วนข้อมูลที่โพสต์เนื่องจากความกะทัดรัด แต่มีอยู่ในตัวอย่างออนไลน์

  3. ในบางส่วนของเว็บเบราเซอร์เก่าเช่น Firefox 9 (ซึ่งผมได้ทดสอบ) , ภาชนะดิ้น - .vertical-centerในกรณีนี้ - จะไม่ใช้พื้นที่ที่มีอยู่ภายในแม่ดังนั้นเราจึงต้องระบุคุณสมบัติที่ต้องการ:widthwidth: 100%

  4. นอกจากนี้ในเว็บเบราว์เซอร์บางตัวตามที่กล่าวไว้ข้างต้นรายการเฟล็กซ์ - .containerในกรณีนี้อาจไม่ปรากฏที่กึ่งกลางแนวนอน ดูเหมือนว่าการใช้ซ้าย / ขวาmarginของautoไม่มีผลต่อรายการเฟล็กซ์ ดังนั้นเราจึงจำเป็นต้องจัดโดย
    box-pack / justify-content

สำหรับรายละเอียดเพิ่มเติมและ / หรือการจัดแนวคอลัมน์คุณสามารถดูหัวข้อด้านล่าง:


วิธีดั้งเดิมสำหรับเว็บเบราว์เซอร์ดั้งเดิม

นี่คือคำตอบเก่าที่ฉันเขียนเมื่อฉันตอบคำถามนี้ วิธีการนี้ได้รับการกล่าวถึงที่นี่และมันควรจะทำงานใน Internet Explorer 8 และ 9 เช่นกัน ฉันจะอธิบายสั้น ๆ :

ในการไหลแบบอินไลน์องค์ประกอบระดับอินไลน์สามารถจัดตำแหน่งในแนวตั้งถึงกลางโดยvertical-align: middleการประกาศ ข้อมูลจำเพาะจากW3C :

middle
จัดตำแหน่งกึ่งกลางแนวตั้งของกล่องให้ตรงกับเส้นฐานของกล่องหลักและบวกความสูง x ครึ่งหนึ่งของพาเรนต์

ในกรณีที่ผู้ปกครอง - .vertical-centerองค์ประกอบในกรณีนี้ - มีความชัดเจนheightโดยโอกาสใด ๆ ถ้าเราสามารถมีองค์ประกอบเด็กที่มีเหมือนกันแน่นอนheightของผู้ปกครองเราจะสามารถย้ายพื้นฐานของผู้ปกครองไปยังจุดกึ่งกลางของเต็ม - เด็กสูงและทำให้เด็กที่กำลังไหลเข้ามาอย่างไม่น่าเชื่อ - ถูก.container- ปรับให้สอดคล้องกับศูนย์กลางในแนวตั้ง

รวมเข้าด้วยกัน

ที่ถูกกล่าวว่าเราสามารถสร้างองค์ประกอบเต็มความสูงภายใน.vertical-centerโดย::beforeหรือ::afterหลอกองค์ประกอบและยังเปลี่ยนค่าเริ่มต้นdisplayชนิดของมันและเด็กอื่น ๆ ที่จะ.containerinline-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;
}

ทำงาน DEMO

นอกจากนี้เพื่อป้องกันปัญหาที่ไม่คาดคิดในหน้าจอขนาดเล็กพิเศษคุณสามารถตั้งค่าความสูงขององค์ประกอบหลอกไปautoหรือ0หรือเปลี่ยนของdisplayชนิดnoneถ้าจำเป็นดังนั้น:

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

อัปเดตเดโม

และอีกสิ่งหนึ่ง:

หากมีfooter/ headerส่วนรอบภาชนะที่มันจะดีกว่าไปอยู่ในตำแหน่งที่ถูกต้ององค์ประกอบ( relative, absolute? ขึ้นอยู่กับคุณ.)และเพิ่มสูงกว่าz-indexค่า (สำหรับการประกัน) เพื่อให้พวกเขาอยู่ด้านบนเสมอของผู้อื่น



ทั้งหมดนี้เป็นสิ่งที่ดีและดี แต่ทันทีที่คุณเพิ่มลงdisplay: flexใน.containerนั้นจะทำให้เด็ก.rows พลิกออก ดูเหมือนว่าวิธี flexbox จะทำให้เราต้องละทิ้งการใช้คุณสมบัติการบูตหลักบางอย่าง
Abraham Brookes

118

อัปเดต 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


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 {height: 100%; } คือกุญแจสำคัญ
xxxbence

28

ใน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 หากรหัสนี้ใช้ไม่ได้

ฉันรู้ว่ามันไม่ใช่คำตอบสำหรับคำถามนี้โดยตรง แต่อาจช่วยใครซักคน


ดูเหมือนว่าจะเป็นเพียงการคัดลอกคำตอบของซิม
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สำหรับกฎ flex

ดิ้นคอลัมน์สำหรับทิศทางแนวตั้งในรายการ

justify-content-centerสำหรับการจัดกึ่งกลาง

style = 'height: 300px;' ต้องมีสำหรับจุดที่กำหนดไว้ที่กึ่งกลางคำนวณหรือใช้คลาสh-100

จากนั้นสำหรับศูนย์แนวนอนdiv-flex ปรับชิดขอบเนื้อหา และภาชนะบางส่วน

ดังนั้นเราจึงมีลำดับชั้นของ 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 divs:

.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

นี่คือวิธีที่ฉันใช้สำหรับจัดเรียงเนื้อหาในแนวตั้ง - บน / กลาง / ล่างด้วย bootstrap 3 แถว Bootstrap 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.