ฉันจะทำให้คอลัมน์ Bootstrap มีความสูงเท่ากันได้อย่างไร


965

ฉันใช้ Bootstrap ฉันจะสร้างสามคอลัมน์ให้สูงเท่ากันได้อย่างไร

นี่คือภาพหน้าจอของปัญหา ฉันต้องการให้คอลัมน์สีน้ำเงินและสีแดงมีความสูงเท่ากับคอลัมน์สีเหลือง

สาม bootstrap คอลัมน์ที่มีคอลัมน์กลางยาวกว่าอีกสองคอลัมน์

นี่คือรหัส:

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container-fluid">
<div class="row">
    <div class="col-xs-4 panel" style="background-color: red">
        some content
    </div>
    <div class="col-xs-4 panel" style="background-color: yellow">
        catz
        <img width="100" height="100" src="https://lorempixel.com/100/100/cats/">
    </div>
    <div class="col-xs-4 panel" style="background-color: blue">
        some more content
    </div>
</div>
</div>



11
มีบทความอยู่ในเว็บไซต์ bootstrap ที่มีโซลูชัน 5 บรรทัดgetbootstrap.com.vn/examples/equal-height-columns
Eduard Gamonal

2
ตัวอย่างใน Bootstrap แบ่งการตอบสนอง Eduard ดิ้นจะหายไป.row flex-wrap: wrap;นี่คือตัวอย่างของการทำงานกับการตอบสนอง: codepen.io/bootstrapped/details/RrabNe
Bryan Willis

วิธีแก้ปัญหาที่เป็นไปได้ - ภาพโปร่งใสขนาด 1 พิกเซลในคอลัมน์อื่น ภาพความกว้างหนึ่งพิกเซลใหม่นี้ตรงกับความสูงพิกเซลของรูปแมวในตัวอย่างด้านบน (อาจไม่ทำงานหรือใช้งานได้จริงในสถานการณ์ของคุณ)
Sql Surfer

ใน Bootstrap 4 เราสามารถใช้การ์ดเหมือนกัน
Amjad Rehman A

คำตอบ:


1044

โซลูชัน 4 โดยใช้ Bootstrap 4

Bootstrap 4 ใช้ Flexbox ดังนั้นไม่จำเป็นต้องใช้ CSS เพิ่มเติม

การสาธิต

<div class="container">
    <div class="row ">
        <div class="col-md-4" style="background-color: red">
          some content
        </div>
        <div class="col-md-4" style="background-color: yellow">
          catz
          <img width="100" height="100" src="https://placekitten.com/100/100/">
        </div>
        <div class="col-md-4" style="background-color: green">
          some more content
        </div>
    </div>
</div>

โซลูชันที่ 1 ที่ใช้ระยะขอบติดลบ (ไม่ทำลายการตอบสนอง)

การสาธิต

.row{
    overflow: hidden; 
}

[class*="col-"]{
    margin-bottom: -99999px;
    padding-bottom: 99999px;
}

โซลูชันที่ 2 โดยใช้ตาราง

การสาธิต

.row {
    display: table;
}

[class*="col-"] {
    float: none;
    display: table-cell;
    vertical-align: top;
}

โซลูชัน 3 ที่ใช้ flexเพิ่มในเดือนสิงหาคม 2558 ความคิดเห็นที่โพสต์ก่อนหน้านี้ไม่สามารถใช้กับโซลูชันนี้ได้

การสาธิต

.row {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display:         flex;
  flex-wrap: wrap;
}
.row > [class*='col-'] {
  display: flex;
  flex-direction: column;
}

7
คิดว่ามันเป็นคอลัมน์ที่ถูกดูดเข้าไปในพื้นที่เชิงลบ หากคุณลบโอเวอร์โฟลว์คุณจะเห็นว่าเกิดอะไรขึ้น
Popnoodles

9
หากกำหนดเป้าหมายคลาสคอลัมน์ bootstrap โดยเฉพาะคุณควรใช้ตัวยึด ^ แทน wildcard * การใช้ ^ จะบอกว่าคลาสนั้นต้องเริ่มต้นด้วย col- ซึ่งสัญลักษณ์แทนที่แสดงจะตรงกับคลาสใด ๆ ที่มี col- ที่ใดก็ได้ในสตริง (เช่น stuff-col-morestuff)
โลแกน G.

7
คำตอบที่ดีกับคำเตือนบางอย่าง โซลูชันที่ 1 ปิดใช้งานการลอยและดังนั้นจึงแบ่งลักษณะการตอบสนองของตาราง bootstrap โซลูชันที่ 2 (อธิบายในเชิงลึกยิ่งขึ้นในpositioniseverything.net/articles/onetruelayout/equalheight ) จะไม่แสดงขอบด้านล่าง
Ohad Schneider

14
โซลูชัน 3 แบ่งการตอบสนองของแถว
SPRBRN

10
@Popnoodles คุณควรเพิ่มflex-wrap: wrap;ตัวอย่างที่สามเพื่อเปิดใช้งานการตอบสนอง คุณจะต้องเพิ่มการแสดงผล: ดิ้น ดิ้นทิศทาง: คอลัมน์; ไปยังคลาสคอลัมน์ หากคุณจะใช้. row และไม่ใช่คลาสที่กำหนดเองคุณจะต้องให้ทางเลือกสำหรับเบราว์เซอร์รุ่นเก่าที่เปลี่ยนการแสดงผลแบบยืดหยุ่น นี่คือตัวอย่าง
Bryan Willis

321

อัพเดท 2020

วิธีที่ดีที่สุดสำหรับ Bootstap 3.x - การใช้ CSS flexbox (และต้องการ CSS ขั้นต่ำ)

.equal {
  display: flex;
  display: -webkit-flex;
  flex-wrap: wrap;
}

Bootstrap ตัวอย่าง flexbox ความสูงเดียวกัน

หากต้องการใช้เฟล็กบ็อกซ์ความสูงเดียวกันที่จุดพักเฉพาะ (ตอบสนอง) ให้ใช้เคียวรีสื่อบันทึก ตัวอย่างเช่นนี่คือsm(768px) และสูงกว่า:

@media (min-width: 768px) {
  .row.equal {
    display: flex;
    flex-wrap: wrap;
  }
}

โซลูชันนี้ใช้ได้ดีกับหลายแถว (การตัดคอลัมน์):
https://www.bootply.com/gCEXzPMehZ

วิธีแก้ไขอื่น ๆ

ตัวเลือกเหล่านี้จะแนะนำโดยผู้อื่น แต่ไม่ใช่ความคิดที่ดีสำหรับการออกแบบที่ตอบสนอง สิ่งเหล่านี้ใช้ได้กับเลย์เอาต์แถวเดี่ยวแบบง่ายที่ไม่มีการตัดคอลัมน์เท่านั้น

1) การใช้ระยะขอบเชิงลบขนาดใหญ่ & ช่องว่างภายใน

2) การใช้จอแสดงผล: ตารางเซลล์ (โซลูชันนี้จะมีผลต่อกริดที่ตอบสนองได้ด้วยเหตุนี้จึงสามารถใช้เคียวรี @media เพื่อใช้การtableแสดงผลบนหน้าจอที่กว้างขึ้นก่อนที่คอลัมน์จะเรียงเป็นแนวตั้ง)


Bootstrap 4

Flexbox ถูกใช้เป็นค่าเริ่มต้นใน Bootstrap 4 ดังนั้นจึงไม่จำเป็นต้องใช้ CSS พิเศษเพื่อสร้างคอลัมน์ความสูงเท่ากัน: http://www.codeply.com/go/IJYRI4LPwU

ตัวอย่าง:

<div class="container">
    <div class="row">
        <div class="col-md-6"></div>
        <div class="col-md-6"></div>
    </div>
</div>

5
คุณสามารถใช้แบบสอบถามสื่อเพื่อใช้ flexbox กับอุปกรณ์ขนาดใหญ่ / กว้าง ฉันอัปเดต bootply: bootply.com/Cn6fA6LuTq
Zim

ในกรณีที่ใครสนใจฉันได้สร้างปากกาเพื่อแสดงเอฟเฟกต์ที่คล้ายกันในแบบฟอร์มโดยใช้ flexbox
Justin Lau

2
มันเป็นข้อบกพร่องของ Safari ที่รู้จักกันดีในชื่อ flexbox: proof: bugs.webkit.org/show_bug.cgi?id=137730
Zim

5
@Stanley ความคิดเห็นเกี่ยวกับ "ไม่ตอบสนองต่อ" เก่าและไม่เกี่ยวข้อง
Zim

1
นี่คือการแก้ไขเดียวที่ทำงานสำหรับฉัน ขอบคุณซิมนี่เยี่ยมมาก!
Ryan NZ

83

ไม่จำเป็นต้องใช้ JavaScript เพียงเพิ่มชั้นเรียน.row-eq-heightของคุณที่มีอยู่.rowเช่นนี้:

<div class="row row-eq-height">
  <div class="col-xs-12 col-sm-4 panel" style="background-color: red">
    some content
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: yellow">
    kittenz
  <img src="http://placekitten.com/100/100">
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: blue">
    some more content
  </div>
</div>

เคล็ดลับ: หากคุณมีมากกว่า 12 คอลัมน์ในแถวของคุณตาราง bootstrap จะไม่สามารถตัดคำได้ ดังนั้นเพิ่มใหม่div.row.row-eq-heightแต่ละคอลัมน์ 12

เคล็ดลับ: คุณอาจต้องเพิ่ม

<link rel="stylesheet" href="http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css" />

เพื่อ html ของคุณ


5
flexbox ตาม ไม่ทำงานใน IE8 หรือ 9 หรือ Android 2.x caniuse.com/#feat=flexbox
Chris Moschini

60
หมายเหตุ: getbootstrap.vn ไม่ใช่ "Bootstrap" มันเป็นโครงการของบุคคลที่สาม
Zim

ดูเหมือนว่าจะรวมอยู่ใน bootstrap v4
Cyril Duchon-Doris

ฉันรวม CSS ที่ถูกต้อง (จากเว็บไซต์. vn) แต่มันทำให้ทุกอย่างยุ่ง มันขึ้นอยู่กับ flex
ekkis

เยี่ยมมาก ... ปลั๊กอินนรก
กองเรือ

63

เพื่อตอบคำถามของคุณนี่คือทั้งหมดที่คุณต้องดูตัวอย่างการตอบสนองเต็มรูปแบบด้วยคำนำหน้า CSS :

/* Using col-xs media query breakpoint but you can change 481 to 768 to only apply to col-sm and above if you'd like*/

@media only screen and (min-width : 481px) {
    .flex-row {
        display: flex;
        flex-wrap: wrap;
    }
    .flex-row > [class*='col-'] {
        display: flex;
        flex-direction: column;
    }
    .flex-row.row:after, 
    .flex-row.row:before {
        display: flex;
    }
}

สกรีนช็อตของ Codepen

ในการเพิ่มการรองรับเนื้อหาแบบย่อในคอลัมน์เฟล็กเช่นภาพหน้าจอด้านบนให้เพิ่มสิ่งนี้ ... โปรดทราบว่าคุณสามารถใช้แผงควบคุมได้เช่นกัน:

.flex-row .thumbnail,
.flex-row .caption {
    display: flex;
    flex: 1 0 auto;
    flex-direction: column;
}
.flex-text {
    flex-grow: 1;
}    
.flex-row img {
    width: 100%;
}

ในขณะที่ flexbox ไม่ทำงานใน IE9 และด้านล่างคุณสามารถใช้การสาธิตด้วย fallback โดยใช้แท็กแบบมีเงื่อนไขกับบางสิ่งอย่างเช่นjavascript gridsเป็น polyfill:

<!--[if lte IE 9]>

<![endif]-->

สำหรับอีกสองตัวอย่างในคำตอบที่ยอมรับ ... การสาธิตตารางเป็นความคิดที่ดี แต่มีการนำไปใช้ผิด การใช้ CSS นั้นในคลาสคอลัมน์ bootstrap โดยเฉพาะจะเป็นการแยกเฟรมเวิร์กกริดโดยไม่ต้องสงสัยเลย คุณควรจะใช้ตัวเลือกที่กำหนดเองสำหรับหนึ่งและสองรูปแบบตารางไม่ควรนำไปใช้กับ[class*='col-']ที่มีความกว้างที่กำหนดไว้ ควรใช้วิธีนี้หากคุณต้องการความสูงเท่ากันและคอลัมน์ความกว้างเท่ากัน มันไม่ได้มีไว้สำหรับเค้าโครงอื่น ๆ และไม่ตอบสนอง เราสามารถทำให้เป็นทางเลือกอย่างไรก็ตามบนหน้าจอมือถือ ...

<div class="table-row-equal">
<div class="thumbnail">
    Content...
</div>
<div class="thumbnail">
    Content...
</div>
</div>
@media only screen and (min-width : 480px){
    .table-row-equal {
        display: table;
        width: 100%;
        table-layout: fixed;
        border-spacing: 30px 0px;
        word-wrap: break-word;
    }
    .table-row-equal .thumbnail {
        float: none;
        display: table-cell;
        vertical-align: top;
        width: 1%;
    }
}

สุดท้ายการสาธิตครั้งแรกในคำตอบที่ยอมรับซึ่งใช้เวอร์ชันของเค้าโครงจริงหนึ่งตัวเลือกที่ดีสำหรับบางสถานการณ์ แต่ไม่เหมาะสำหรับคอลัมน์ bootstrap เหตุผลสำหรับสิ่งนี้คือคอลัมน์ทั้งหมดขยายเป็นความสูงคอนเทนเนอร์ ดังนั้นสิ่งนี้จะทำลายการตอบสนองเนื่องจากคอลัมน์ไม่ขยายไปยังองค์ประกอบที่อยู่ถัดจากพวกเขา แต่เป็นคอนเทนเนอร์ทั้งหมด วิธีนี้จะไม่อนุญาตให้คุณใช้ระยะขอบด้านล่างกับแถวอีกต่อไปและจะทำให้เกิดปัญหาอื่น ๆ เช่นการเลื่อนเพื่อยึดแท็ก

สำหรับรหัสที่สมบูรณ์ให้ดู Codepen ซึ่งนำหน้ารหัส flexbox โดยอัตโนมัติ


11
นั่นเป็นคำตอบเดียวที่ได้ผลจริงสำหรับฉัน คำตอบที่ได้รับคะแนนสูงสุด 3 อันดับเป็นเพียงการเสียเวลา
ken2k

3
ดูดี แต่น่าเสียดายที่มันไม่ทำงานใน Safari 9.1 บน MacOS :-(
KevinH

1
@TheSchecke ที่นี่เป็นการแก้ไข เท่าที่ฉันรู้ว่ามันใช้ได้กับเบราว์เซอร์ที่รองรับ flexbox ทั้งหมดในขณะนี้ โปรดแจ้งให้เราทราบหากฉันผิด s.codepen.io/bootstrapped/debug/pboJNd ปัญหาเกี่ยวกับการrow:after, row:beforeแสดง: ชุดโต๊ะที่เห็นได้ชัดว่า Safari ไม่ชอบ
ไบรอันวิลลิส

2
เพียงแค่หัวขึ้นว่านี่เป็นสิ่งที่เลวร้ายจริงๆบนเบราว์เซอร์ Safari ของ iPad
Matthew Lock

1
ขออภัยที่ได้ยิน @MatthewLock ฉันเพิ่งทดสอบกับ IPad Air IOS 8.1 ของฉันกับซาฟารีล่าสุดและใช้งานได้ ฉันยังสามารถทดสอบ crossbrowsertesting.com โดยใช้ iPad mini retina กับ Safari 7 และดูเหมือนว่าจะทำงานได้ดีเช่นกัน นี่คือผลลัพธ์ของการทดสอบนั้น คุณสามารถระบุเวอร์ชั่น iPad และ Safari ที่คุณใช้อยู่ได้หรือไม่? ฉันชอบที่จะลองรับ asap แบบคงที่นี้หรืออย่างน้อยก็ใส่ความคิดเห็นในคำตอบเพราะฉันรู้ว่ามีคนจำนวนมากกำลังใช้มันอยู่
ไบรอันวิลลิส

42

คุณแสดงเพียงแถวเดียวดังนั้นกรณีการใช้งานของคุณอาจถูก จำกัด เพียงแค่นั้น ในกรณีที่คุณมีหลายแถวปลั๊กอินนี้ - github Javascript-grids - ทำงานได้อย่างสมบูรณ์แบบ! มันทำให้แต่ละแผงขยายไปยังแผงที่สูงที่สุดทำให้แต่ละแถวอาจมีความสูงที่แตกต่างกันขึ้นอยู่กับแผงที่สูงที่สุดในแถวนั้น มันเป็นวิธีการแก้ปัญหา jQuery เทียบกับ CSS แต่ต้องการที่จะแนะนำมันเป็นวิธีการทางเลือก


1
ทางออกเดียวที่ใช้งานได้จริงและไม่ทำลายการตอบสนอง
Artur Kędzior

สิ่งนี้อนุญาตให้คุณระบุว่าคอลัมน์ควรเป็นแบบสแควร์หรือมีความสูงเท่ากันทั้งหมดหรือไม่
niico

@ Niico 14 - มันไม่นานมานี้ตั้งแต่ฉันได้ใช้สิ่งนี้ แต่ในแอปพลิเคชันของฉันข้อกำหนดคือองค์ประกอบในแต่ละแถวมีความสูงเท่ากัน แต่ความสูงอาจแตกต่างกันไปในแต่ละแถว เนื่องจากความสูงเป็นฟังก์ชันขององค์ประกอบในแถวหากความสูงองค์ประกอบของคุณเท่ากับความกว้างของพวกเขาดังนั้นพวกเขาควรจะนำเสนอเป็นสี่เหลี่ยม
globalSchmidt

30

หากคุณต้องการใช้งานในเบราว์เซอร์ใด ๆ ให้ใช้ javascript:

$( document ).ready(function() {
    var heights = $(".panel").map(function() {
        return $(this).height();
    }).get(),

    maxHeight = Math.max.apply(null, heights);

    $(".panel").height(maxHeight);
});

1
มี div class = "row" ที่มีจำนวนพาเนลตัวแปรแต่ละคลาส "col-md-4" ซึ่งควรให้คอลัมน์ 3 คอลัมน์แก่ฉันและจำนวนแถวที่ไม่รู้จักขึ้นอยู่กับจำนวนรายการที่ฉันต้องการแสดงรายการ JS นี้ใช้งานได้และต้องการการเปลี่ยนแปลงเล็กน้อยใน HTML / CSS ของฉันซึ่งต่างกับสิ่งที่ฉันพยายาม CSS สิ่งเดียวที่ฉันเปลี่ยนคือการทำเครื่องหมายพาเนลคอลัมน์ทั้งหมดของฉันด้วยคลาสเพิ่มเติมเช่น "แผงความสูงเดียวกัน" จากนั้นใช้ $ (". แผงความสูงเดียวกัน") แทน $ (". แผง")
nidalpres

1
ทางออกเดียวที่ทำงานสำหรับฉันหลังจากหนึ่งวันของการทดลองกับ css
Dinosaurius

1
นี่เป็นทางออกที่ดี แต่.ready()ไม่ใช่เวลาที่เหมาะสมที่จะเรียกมันว่า - ควรได้รับการเรียก.load()
jave.web

1
@ jave.web หากคุณคิดว่านี่เป็นทางออกที่ดีโปรดยกนิ้วให้ ขอบคุณ
paulalexandru

ใช้window.onload = function() {...function content above...}แทน มันใช้งานได้ดีกว่า
Blackpanther0001

10

ฉันลองใช้คำแนะนำมากมายในกระทู้นี้และในหน้าอื่น ๆ แต่ไม่มีวิธีแก้ปัญหาที่ทำงานได้ 100% ในทุกเบราว์เซอร์

ดังนั้นฉันจึงทดลองบางครั้งและเกิดสิ่งนี้ขึ้น โซลูชั่นที่สมบูรณ์สำหรับคอลัมน์ Bootstrap Equal Heightด้วยความช่วยเหลือของ flexbox ที่มีเพียง 1 คลาส สิ่งนี้ใช้ได้กับเบราว์เซอร์หลัก ๆ ทั้งหมด IE10 +

CSS:

.row.equal-cols {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
}

.row.equal-cols:before,
.row.equal-cols:after {
  display: block;
}

.row.equal-cols > [class*='col-'] {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
}

.row.equal-cols > [class*='col-'] > * {
  -webkit-flex: 1 1 auto;
  -ms-flex: 1 1 auto;
  flex: 1 1 auto; 
}

HTML:

<div class="container">
  <div class="row equal-cols">
    <div class="col-sm-4">
      <div class="content"></div>
    </div>
    <div class="col-sm-4">
      <div class="content"></div>
    </div>
    <div class="col-sm-4">
      <div class="content"></div>
    </div>
  </div>
</div>

เพื่อสนับสนุนรุ่นมากยิ่งขึ้นของ IE คุณสามารถยกตัวอย่างเช่นใช้https://github.com/liabru/jquery-match-height.equal-colsและเป้าหมายคอลัมน์เด็กทั้งหมด แบบนี้:

// Create a check for IE9 (or any other specific browser).
if(IE9) {
  $(".row.equal-cols > [class*='col-']").matchHeight();
}

หากไม่มีโปลิฟิลล์นี้คอลัมน์จะทำตัวเหมือนคอลัมน์บู๊ตสแตรปปกติซึ่งเป็นทางเลือกที่ดีทีเดียว


มันใช้งานได้ดีสำหรับฉัน ขอบคุณ!
randlet

8

คุณสามารถใช้ inline-flex ได้เช่นกันซึ่งใช้งานได้ดีและอาจสะอาดกว่าการแก้ไของค์ประกอบแถวทุกแถวด้วย CSS

สำหรับโครงการของฉันฉันต้องการให้ทุกแถวที่องค์ประกอบลูกมีเส้นขอบมีความสูงเท่ากันดังนั้นเส้นขอบจะดูขรุขระ สำหรับสิ่งนี้ฉันได้สร้างคลาส CSS อย่างง่าย

.row.borders{
    display: inline-flex;
    width: 100%;
}

2
ในขณะที่มันประสบความสำเร็จในการทำเนื้อหาทั้งหมดในแถวสูงเท่ากัน; สิ่งนี้จะเป็นการหยุดการตอบสนองของ Bootstrap
Christine268


7

วิธีการแก้ปัญหา jQuery หน้าด้านถ้าใครสนใจ ตรวจสอบให้แน่ใจว่า cols (el) ทั้งหมดของคุณมี classname ทั่วไป ... ทำงานอย่างมีความรับผิดชอบเช่นกันถ้าคุณผูกไว้กับ $ (หน้าต่าง)

function equal_cols(el)
{
    var h = 0;
    $(el).each(function(){
        $(this).css({'height':'auto'});
        if($(this).outerHeight() > h)
        {
            h = $(this).outerHeight();
        }
    });
    $(el).each(function(){
        $(this).css({'height':h});
    });
}

การใช้

$(document).ready(function(){
   equal_cols('.selector');
});

หมายเหตุ: โพสต์นี้ได้รับการแก้ไขตามความคิดเห็นของ @Chris 'ว่ารหัสถูกตั้งค่าความสูงสูงสุดล่าสุดใน$.each()ฟังก์ชันเท่านั้น


สิ่งนี้ถูกอธิบายอย่างง่ายและเล็ก แต่จะปรับขนาดคอลัมน์ทั้งหมดโดยไม่จำเป็นต้องมีจำนวนคอลัมน์ในแถวคงที่ ทำได้ดีนี่!
Jordon

1
สิ่งนี้ไม่ทำงานเพราะคุณตั้งค่าความสูงที่ใหญ่ที่สุดสุดท้ายในแต่ละฟังก์ชัน หากคอลัมน์ที่สามเป็นคอลัมน์สูงสุดคอลัมน์ 1 และ 2 จะไม่ได้รับความสูงที่ถูกต้องคุณต้องตั้งค่าบรรทัดสุดท้าย "$ (this) .css ({'height': h});" หลังจากแต่ละฟังก์ชั่น ฉันจะแก้ไข
คริส

7

คำตอบก่อนหน้านี้บางคำอธิบายวิธีทำให้ div สูงเท่ากัน แต่ปัญหาคือเมื่อความกว้างแคบเกินไป div จะไม่ซ้อนดังนั้นคุณสามารถใช้คำตอบของพวกเขาด้วยส่วนเพิ่มเติมหนึ่งส่วน สำหรับแต่ละคนคุณสามารถใช้ชื่อ CSS ที่ระบุที่นี่นอกเหนือจากคลาสแถวที่คุณใช้ดังนั้น div ควรมีลักษณะเช่นนี้หากคุณต้องการให้ div อยู่ข้างๆกัน:

<div class="row row-eq-height-xs">Your Content Here</div>

สำหรับหน้าจอทั้งหมด:

.row-eq-height-xs {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display:         flex;
    flex-direction: row;
}

สำหรับเมื่อคุณต้องการใช้ sm:

.row-eq-height-sm {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display:         flex;
    flex-direction: column;
}
@media (min-width:768px) {
    .row-eq-height-sm {
        flex-direction: row;
    }
}

เมื่อคุณต้องการ md:

.row-eq-height-md {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display:         flex;
    flex-direction: column;
}
@media (min-width:992px) {
    .row-eq-height-md {
        flex-direction: row;
    }
}

สำหรับเมื่อคุณต้องการใช้ lg:

.row-eq-height-lg {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display:         flex;
    flex-direction: column;
}
@media (min-width:1200px) {
    .row-eq-height-md {
        flex-direction: row;
    }
}

แก้ไข ตามความเห็นมีทางออกที่ง่ายกว่า แต่คุณต้องแน่ใจว่าได้ให้ข้อมูลคอลัมน์จากความกว้างที่ต้องการมากที่สุดสำหรับทุกขนาดจนถึง xs (เช่น<div class="col-md-3 col-sm-4 col-xs-12"> :

.row-eq-height {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
}

คุณทำให้มันซับซ้อนกว่าที่คุณต้องการ :) `แค่ใช้flex-wrap: wrap;แล้วคุณไม่ต้องการสิ่งที่แยกต่างหากทั้งหมด ... เว้นแต่คุณต้องการโดยเฉพาะ
ไบรอันวิลลิส

สิ่งนี้ล้มเหลวบน iPad Safari
Matthew Lock

6

ฉันประหลาดใจที่ฉันไม่สามารถหาวิธีแก้ปัญหาที่คุ้มค่าได้ที่นี่ปลายปี 2561 ฉันไปข้างหน้าและหาทางออก Bootstrap 3 ด้วยตนเองโดยใช้ flexbox

ตัวอย่างที่สะอาดและเรียบง่าย:

ตัวอย่างความกว้างของคอลัมน์ที่ตรงกันใน Bootstrap 3

HTML

<div class="row row-equal">
    <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 col-equal">
        <p>Text</p>
    </div>
    <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 col-equal">
        <img src="//placehold.it/200x200">
    </div>
    <div class="col-lg-4 col-md-4 col-sm-4 col-xs-12 col-equal">
        <p>Text</p>
    </div>  
</div>

CSS

img {
  width: 100%;
}
p {
  padding: 2em;
}
@media (min-width: 768px) {
  .row-equal {
    display: flex;
    flex-wrap: wrap;
  }
  .col-equal {
    margin: auto;
  }
}

ดูตัวอย่างการทำงาน: http://jsfiddle.net/5kmtfrny/


5

ฉันรู้ว่าฉันมาช้ามาก แต่ตอนนี้คุณสามารถใช้คุณลักษณะสไตล์ "ความสูงขั้นต่ำ" เพื่อให้บรรลุวัตถุประสงค์ของคุณ


5

หากใครก็ตามที่ใช้ bootstrap 4 และมองหาคอลัมน์ความสูงที่เท่ากันเพียงใช้row-eq-heightกับ div parent

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" rel="stylesheet" />
<div class="row row-eq-height">
  <div class="col-xs-4" style="border: 1px solid grey;">.row.row-eq-height &gt; .col-xs-4</div>
  <div class="col-xs-4" style="border: 1px solid grey;">.row.row-eq-height &gt; .col-xs-4<br>this is<br>a much<br>taller<br>column<br>than the others</div>
  <div class="col-xs-4" style="border: 1px solid grey;">.row.row-eq-height &gt; .col-xs-4</div>
</div>

Ref: http://getbootstrap.com.vn/examples/equal-height-columns/


3

นี่คือทางออกของฉัน (รวบรวม CSS):

.row.row-xs-eq {
  display: table;
  table-layout: fixed;
  margin: 0;
}

.row.row-xs-eq::before {
  content: none;
}

.row.row-xs-eq::after {
  content: none;
}

.row.row-xs-eq > [class^='col-'] {
  display: table-cell;
  float: none;
  padding: 0;
}

@media (min-width: 768px) {
  .row.row-sm-eq {
    display: table;
    table-layout: fixed;
    margin: 0;
  }

  .row.row-sm-eq::before {
    content: none;
  }

  .row.row-sm-eq::after {
    content: none;
  }

  .row.row-sm-eq > [class^='col-'] {
    display: table-cell;
    float: none;
    padding: 0;
  }
}

@media (min-width: 992px) {
  .row.row-md-eq {
    display: table;
    table-layout: fixed;
    margin: 0;
  }

  .row.row-md-eq::before {
    content: none;
  }

  .row.row-md-eq::after {
    content: none;
  }

  .row.row-md-eq > [class^='col-'] {
    display: table-cell;
    float: none;
    padding: 0;
  }
}

@media (min-width: 1200px) {
  .row.row-lg-eq {
    display: table;
    table-layout: fixed;
    margin: 0;
  }

  .row.row-lg-eq::before {
    content: none;
  }

  .row.row-lg-eq::after {
    content: none;
  }

  .row.row-lg-eq > [class^='col-'] {
    display: table-cell;
    float: none;
    padding: 0;
  }
}

ดังนั้นรหัสของคุณจะเป็นดังนี้:

<div class="row row-sm-eq">
  <!-- your old cols definition here -->
</div>

โดยทั่วไประบบนี้เป็นระบบเดียวกับที่คุณใช้กับ.col-*คลาสที่มีความแตกต่างที่คุณต้องใช้.row-*คลาสกับแถวเอง

ด้วย.row-sm-eqคอลัมน์จะถูกซ้อนกันบนหน้าจอ XS หากคุณไม่ต้องการให้วางซ้อนกันบนหน้าจอใด ๆ ที่คุณสามารถ.row-xs-eqใช้ได้

รุ่น SASS ที่เราใช้จริง:

.row {
  @mixin row-eq-height {
    display: table;
    table-layout: fixed;
    margin: 0;

    &::before {
      content: none;
    }

    &::after {
      content: none;
    }

    > [class^='col-'] {
      display: table-cell;
      float: none;
      padding: 0;
    }
  }

  &.row-xs-eq {
    @include row-eq-height;
  }

  @media (min-width: $screen-sm-min) {
    &.row-sm-eq {
      @include row-eq-height;
    }
  }

  @media (min-width: $screen-md-min) {
    &.row-md-eq {
      @include row-eq-height;
    }
  }

  @media (min-width: $screen-lg-min) {
    &.row-lg-eq {
      @include row-eq-height;
    }
  }
}

การสาธิตสด


หมายเหตุ:การผสม.col-xs-12และ.col-xs-6ภายในแถวเดียวจะไม่ทำงานอย่างถูกต้อง


ดีจัง. ทางออกของฉันเหมือนกัน และมีความเป็นไปได้ที่จะมีคอลัมน์ความสูงเท่ากับช่องว่างขนาด 30px ของ Bootstrap มาตรฐานระหว่างคอลัมน์ที่ใช้border-spacingและระยะขอบติดลบ
สูงสุด

3

มีปัญหากับการใช้โซลูชัน 1 ในขณะที่วางลงบนคอลัมน์ในแถวเท่านั้น ต้องการปรับปรุงโซลูชัน 1

 [class^="col-"]:not([class*="-12"]){
      margin-bottom: -99999px;
      padding-bottom: 99999px;
  }

(ขออภัยไม่สามารถแสดงความคิดเห็น anwer ของ Popnoodles ฉันมีชื่อเสียงไม่เพียงพอ)


2

ดีที่สุดจากที่นั่น:

Github reflex - เอกสาร

ทำงานร่วมกับ bootstrap

ปรับปรุง:

  1. รวม CSS
  2. อัปเดตรหัสของคุณ:

/*!
 *
 * Reflex v1.0
 *
 * Reflex is a flexbox grid which provides a way to take advantage of emerging
 * flexbox support while providing a fall back to inline-block on older browsers
 *
 * Built by Lee Jordan G.C.S.E.
 * email: ldjordan@gmail.com
 * github: https://github.com/leejordan
 *
 * Structure and calculations are inspired by twitter bootstrap
 *
 */
.reflex-order-12 {
  -webkit-order: 12;
  -ms-flex-order: 12;
  order: 12;
}
.reflex-order-11 {
  -webkit-order: 11;
  -ms-flex-order: 11;
  order: 11;
}
.reflex-order-10 {
  -webkit-order: 10;
  -ms-flex-order: 10;
  order: 10;
}
.reflex-order-9 {
  -webkit-order: 9;
  -ms-flex-order: 9;
  order: 9;
}
.reflex-order-8 {
  -webkit-order: 8;
  -ms-flex-order: 8;
  order: 8;
}
.reflex-order-7 {
  -webkit-order: 7;
  -ms-flex-order: 7;
  order: 7;
}
.reflex-order-6 {
  -webkit-order: 6;
  -ms-flex-order: 6;
  order: 6;
}
.reflex-order-5 {
  -webkit-order: 5;
  -ms-flex-order: 5;
  order: 5;
}
.reflex-order-4 {
  -webkit-order: 4;
  -ms-flex-order: 4;
  order: 4;
}
.reflex-order-3 {
  -webkit-order: 3;
  -ms-flex-order: 3;
  order: 3;
}
.reflex-order-2 {
  -webkit-order: 2;
  -ms-flex-order: 2;
  order: 2;
}
.reflex-order-1 {
  -webkit-order: 1;
  -ms-flex-order: 1;
  order: 1;
}
.reflex-order-0 {
  -webkit-order: 0;
  -ms-flex-order: 0;
  order: 0;
}
.reflex-container {
  display: inline-block;
  display: -webkit-flex;
  display: flex;
  zoom: 1;
  *display: inline;
  margin: 0;
  padding: 0;
  position: relative;
  width: 100%;
  letter-spacing: -0.31em;
  *letter-spacing: normal;
  word-spacing: -0.43em;
  list-style-type: none;
}
.reflex-container *,
.reflex-container:before,
.reflex-container:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  max-width: 100%;
  letter-spacing: normal;
  word-spacing: normal;
  white-space: normal;
}
.reflex-container *:before,
.reflex-container *:after {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
[class*="reflex-col-"] {
  width: 100%;
  vertical-align: top;
  position: relative;
  display: inline-block;
  display: -webkit-flex;
  display: flex;
  zoom: 1;
  *display: inline;
  text-align: left;
  text-align: start;
}
.reflex-item {
  display: block;
  display: -webkit-flex;
  display: flex;
  -webkit-flex-direction: column;
  flex-direction: column;
  -webkit-flex: 1 1 auto;
  flex: 1 1 auto;
}
_:-ms-fullscreen,
:root .reflex-item {
  width: 100%;
}
.reflex-col-12 {
  width: 100%;
  *width: 99.9%;
}
.reflex-col-11 {
  width: 91.66666666666666%;
  *width: 91.56666666666666%;
}
.reflex-col-10 {
  width: 83.33333333333334%;
  *width: 83.23333333333335%;
}
.reflex-col-9 {
  width: 75%;
  *width: 74.9%;
}
.reflex-col-8 {
  width: 66.66666666666666%;
  *width: 66.56666666666666%;
}
.reflex-col-7 {
  width: 58.333333333333336%;
  *width: 58.233333333333334%;
}
.reflex-col-6 {
  width: 50%;
  *width: 49.9%;
}
.reflex-col-5 {
  width: 41.66666666666667%;
  *width: 41.56666666666667%;
}
.reflex-col-4 {
  width: 33.33333333333333%;
  *width: 33.23333333333333%;
}
.reflex-col-3 {
  width: 25%;
  *width: 24.9%;
}
.reflex-col-2 {
  width: 16.666666666666664%;
  *width: 16.566666666666663%;
}
.reflex-col-1 {
  width: 8.333333333333332%;
  *width: 8.233333333333333%;
}
@media (min-width: 480px) {
  .reflex-col-xs-12 {
    width: 100%;
    *width: 99.9%;
  }
  .reflex-col-xs-11 {
    width: 91.66666666666666%;
    *width: 91.56666666666666%;
  }
  .reflex-col-xs-10 {
    width: 83.33333333333334%;
    *width: 83.23333333333335%;
  }
  .reflex-col-xs-9 {
    width: 75%;
    *width: 74.9%;
  }
  .reflex-col-xs-8 {
    width: 66.66666666666666%;
    *width: 66.56666666666666%;
  }
  .reflex-col-xs-7 {
    width: 58.333333333333336%;
    *width: 58.233333333333334%;
  }
  .reflex-col-xs-6 {
    width: 50%;
    *width: 49.9%;
  }
  .reflex-col-xs-5 {
    width: 41.66666666666667%;
    *width: 41.56666666666667%;
  }
  .reflex-col-xs-4 {
    width: 33.33333333333333%;
    *width: 33.23333333333333%;
  }
  .reflex-col-xs-3 {
    width: 25%;
    *width: 24.9%;
  }
  .reflex-col-xs-2 {
    width: 16.666666666666664%;
    *width: 16.566666666666663%;
  }
  .reflex-col-xs-1 {
    width: 8.333333333333332%;
    *width: 8.233333333333333%;
  }
}
@media (min-width: 768px) {
  .reflex-col-sm-12 {
    width: 100%;
    *width: 99.9%;
  }
  .reflex-col-sm-11 {
    width: 91.66666666666666%;
    *width: 91.56666666666666%;
  }
  .reflex-col-sm-10 {
    width: 83.33333333333334%;
    *width: 83.23333333333335%;
  }
  .reflex-col-sm-9 {
    width: 75%;
    *width: 74.9%;
  }
  .reflex-col-sm-8 {
    width: 66.66666666666666%;
    *width: 66.56666666666666%;
  }
  .reflex-col-sm-7 {
    width: 58.333333333333336%;
    *width: 58.233333333333334%;
  }
  .reflex-col-sm-6 {
    width: 50%;
    *width: 49.9%;
  }
  .reflex-col-sm-5 {
    width: 41.66666666666667%;
    *width: 41.56666666666667%;
  }
  .reflex-col-sm-4 {
    width: 33.33333333333333%;
    *width: 33.23333333333333%;
  }
  .reflex-col-sm-3 {
    width: 25%;
    *width: 24.9%;
  }
  .reflex-col-sm-2 {
    width: 16.666666666666664%;
    *width: 16.566666666666663%;
  }
  .reflex-col-sm-1 {
    width: 8.333333333333332%;
    *width: 8.233333333333333%;
  }
}
@media (min-width: 992px) {
  .reflex-col-md-12 {
    width: 100%;
    *width: 99.9%;
  }
  .reflex-col-md-11 {
    width: 91.66666666666666%;
    *width: 91.56666666666666%;
  }
  .reflex-col-md-10 {
    width: 83.33333333333334%;
    *width: 83.23333333333335%;
  }
  .reflex-col-md-9 {
    width: 75%;
    *width: 74.9%;
  }
  .reflex-col-md-8 {
    width: 66.66666666666666%;
    *width: 66.56666666666666%;
  }
  .reflex-col-md-7 {
    width: 58.333333333333336%;
    *width: 58.233333333333334%;
  }
  .reflex-col-md-6 {
    width: 50%;
    *width: 49.9%;
  }
  .reflex-col-md-5 {
    width: 41.66666666666667%;
    *width: 41.56666666666667%;
  }
  .reflex-col-md-4 {
    width: 33.33333333333333%;
    *width: 33.23333333333333%;
  }
  .reflex-col-md-3 {
    width: 25%;
    *width: 24.9%;
  }
  .reflex-col-md-2 {
    width: 16.666666666666664%;
    *width: 16.566666666666663%;
  }
  .reflex-col-md-1 {
    width: 8.333333333333332%;
    *width: 8.233333333333333%;
  }
}
@media (min-width: 1200px) {
  .reflex-col-lg-12 {
    width: 100%;
    *width: 99.9%;
  }
  .reflex-col-lg-11 {
    width: 91.66666666666666%;
    *width: 91.56666666666666%;
  }
  .reflex-col-lg-10 {
    width: 83.33333333333334%;
    *width: 83.23333333333335%;
  }
  .reflex-col-lg-9 {
    width: 75%;
    *width: 74.9%;
  }
  .reflex-col-lg-8 {
    width: 66.66666666666666%;
    *width: 66.56666666666666%;
  }
  .reflex-col-lg-7 {
    width: 58.333333333333336%;
    *width: 58.233333333333334%;
  }
  .reflex-col-lg-6 {
    width: 50%;
    *width: 49.9%;
  }
  .reflex-col-lg-5 {
    width: 41.66666666666667%;
    *width: 41.56666666666667%;
  }
  .reflex-col-lg-4 {
    width: 33.33333333333333%;
    *width: 33.23333333333333%;
  }
  .reflex-col-lg-3 {
    width: 25%;
    *width: 24.9%;
  }
  .reflex-col-lg-2 {
    width: 16.666666666666664%;
    *width: 16.566666666666663%;
  }
  .reflex-col-lg-1 {
    width: 8.333333333333332%;
    *width: 8.233333333333333%;
  }
}
.reflex-wrap {
  -webkit-flex-wrap: wrap;
  flex-wrap: wrap;
}
.reflex-wrap-reverse {
  -webkit-flex-wrap: wrap-reverse;
  flex-wrap: wrap-reverse;
}
.reflex-direction-row-reverse {
  -webkit-flex-direction: row-reverse;
  flex-direction: row-reverse;
}
.reflex-direction-column {
  -webkit-flex-direction: column;
  flex-direction: column;
}
.reflex-direction-column-reverse {
  -webkit-flex-direction: column-reverse;
  flex-direction: column-reverse;
}
.reflex-align-start {
  -webkit-align-items: flex-start;
  align-items: flex-start;
}
.reflex-align-end {
  -webkit-align-items: flex-end;
  align-items: flex-end;
}
.reflex-align-end [class*="reflex-col-"] {
  vertical-align: bottom;
}
.reflex-align-center {
  -webkit-align-items: center;
  align-items: center;
}
.reflex-align-center [class*="reflex-col-"] {
  vertical-align: middle;
}
.reflex-align-baseline {
  -webkit-align-items: baseline;
  align-items: baseline;
}
.reflex-align-baseline [class*="reflex-col-"] {
  vertical-align: baseline;
}
.reflex-align-content-start {
  -webkit-align-content: flex-start;
  align-content: flex-start;
}
.reflex-align-content-end {
  -webkit-align-content: flex-end;
  align-content: flex-end;
}
.reflex-align-content-end [class*="reflex-col-"] {
  vertical-align: bottom;
}
.reflex-align-content-center {
  -webkit-align-content: center;
  align-content: center;
}
.reflex-align-content-space-between {
  -webkit-align-content: space-between;
  align-content: space-between;
}
.reflex-align-content-space-around {
  -webkit-align-content: space-around;
  align-content: space-around;
}
.reflex-align-self-stretch {
  -webkit-align-self: stretch;
  align-self: stretch;
}
.reflex-align-self-start {
  -webkit-align-self: flex-start;
  align-self: flex-start;
}
.reflex-align-self-end {
  -webkit-align-self: flex-end;
  align-self: flex-end;
  vertical-align: bottom;
}
.reflex-align-self-center {
  -webkit-align-self: center;
  align-self: center;
  vertical-align: middle;
}
.reflex-align-self-baseline {
  -webkit-align-self: baseline;
  align-self: baseline;
  vertical-align: baseline;
}
.reflex-justify-start {
  text-align: left;
  -webkit-justify-content: flex-start;
  justify-content: flex-start;
}
.reflex-justify-end {
  text-align: right;
  -webkit-justify-content: flex-end;
  justify-content: flex-end;
}
.reflex-justify-center {
  text-align: center;
  -webkit-justify-content: center;
  justify-content: center;
}
.reflex-justify-space-between {
  text-align: justify;
  -moz-text-align-last: justify;
  text-align-last: justify;
  -webkit-justify-content: space-between;
  justify-content: space-between;
}
.reflex-justify-space-around {
  text-align: justify;
  -moz-text-align-last: justify;
  text-align-last: justify;
  -webkit-justify-content: space-around;
  justify-content: space-around;
}
.reflex-item-margin-sm {
  margin: 0 0.25em 0.5em;
}
.reflex-item-margin-md {
  margin: 0 0.5em 1em;
}
.reflex-item-margin-lg {
  margin: 0 1em 2em;
}
.reflex-item-content-margin-sm * {
  margin-right: 0.25em;
  margin-left: 0.25em;
}
.reflex-item-content-margin-md * {
  margin-right: 0.5em;
  margin-left: 0.25em;
}
.reflex-item-content-margin-lg * {
  margin-right: 1em;
  margin-left: 1em;
}
.reflex-img {
  display: inline-block;
  display: -webkit-flex;
  display: flex;
  zoom: 1;
  *display: inline;
  -webkit-flex: 0 0 auto;
  flex: 0 0 auto;
  margin-left: 0;
  margin-right: 0;
  max-width: 100%;
  width: 100%;
  height: auto;
}
.reflex-item-footer {
  margin-top: auto;
  margin-left: 0;
  margin-right: 0;
}
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="reflex-container reflex-wrap">
  <div class="reflex-col-xs-12 reflex-col-sm-4 panel" style="background-color: red">
  some content
  </div>
  <div class="reflex-col-xs-6 reflex-col-sm-4 panel" style="background-color: yellow">
  kittenz
  <img src="http://upload.wikimedia.org/wikipedia/en/1/13/Matrona.jpg">
  </div>
  <div class="reflex-col-xs-6 reflex-col-sm-4 panel" style="background-color: blue">
  some more content
  </div>
</div>


ยินดีต้อนรับสู่ Stack Overflow! แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงค์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงนั้นเปลี่ยนแปลง ดูฉันจะเขียนคำตอบที่ดีได้อย่างไร
ByteHamster

2

นี่คือวิธีการของฉันฉันใช้ดิ้นกับการเปลี่ยนแปลงบางอย่างในแบบสอบถามสื่อ

  @media (min-width: 0px) and (max-width: 767px) {
  .fsi-row-xs-level {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
  }
}
@media (min-width: 768px) and (max-width: 991px) {
  .fsi-row-sm-level {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
  }
}
@media (min-width: 992px) and (max-width: 1199px) {
  .fsi-row-md-level {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
  }
}
@media (min-width: 1200px) {
  .fsi-row-lg-level {
    display: -webkit-box;
    display: -webkit-flex;
    display: -ms-flexbox;
    display: flex;
  }
}

จากนั้นเพิ่มคลาสให้กับพาเรนต์ที่ต้องการ

<div class="row fsi-row-lg-level fsi-row-md-level">
<div class="col-sm-4">column 1</div>
<div class="col-sm-4">column 2</div>
<div class="col-sm-4">column 3</div>
</div>

ฉันกำลังใช้เบรกพอยต์ที่ตอบสนองได้เนื่องจากฟลักซ์มักจะขัดขวางการตอบสนองมาตรฐานของ bootstrap


2

ฉันใช้วิธีแก้ปัญหาที่ง่ายสุดclearfixๆ ซึ่งไม่มีผลข้างเคียงใด ๆ

นี่คือตัวอย่างใน AngularJS:

<div ng-repeat-start="item in list">
    <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12"></div>
</div>
<div ng-repeat-end>
    <div ng-if="$index % 3 == 2" class="clearfix visible-lg"></div>
    <div ng-if="$index % 2 == 1" class="clearfix visible-md"></div>
</div>

และอีกหนึ่งตัวอย่างเกี่ยวกับ PHP:

<?php foreach ($list as $i => $item): ?>
    <div class="col-lg-4 col-md-6 col-sm-12 col-xs-12"></div>
    <div class="clearfix visible-md"></div>
    <?php if ($i % 2 === 1): ?>
        <div class="clearfix visible-lg"></div>
    <?php endif; ?>
<?php endforeach; ?>

สิ่งนี้ไม่ได้ทำให้คอลัมน์ของคุณมีความสูงเท่ากันทั้งหมด
skerit

1
สำหรับฉันที่ต้องการมีคอลัมน์ที่ความสูง / สถานที่ที่เหมือนกันมันเป็นคำตอบ
Michal - wereda-net

2

สำหรับผู้ที่กำลังมองหาทางออกที่ง่ายและรวดเร็ว - หากคุณมีการตั้งค่าเนื้อหาบล็อกที่ค่อนข้างสอดคล้องกันความสูงขั้นต่ำบน div ที่ใหญ่กว่าบล็อกที่ใหญ่ที่สุดจะง่ายต่อการติดตั้ง

.align-box {
    min-height: 400px;
}

2

.row.container-height {
	overflow: hidden; 
}

.row.container-height > [class*="col-"]{
    margin-bottom: -99999px;
    padding-bottom: 99999px;
}

โดยที่. container-height เป็นคลาสสไตล์ที่ต้องเพิ่มลงในองค์ประกอบ. row ที่เด็ก. col * ทุกคนมีความสูงเท่ากัน

การใช้สไตล์เหล่านี้กับ. row เฉพาะบางรายการเท่านั้น (พร้อมกับ. container-height เช่นในตัวอย่าง) นอกจากนี้ยังหลีกเลี่ยงการใช้ระยะขอบและช่องว่างภายในล้นกับ. col * ทั้งหมด


2

ฉันค้นหาวิธีการแก้ไขปัญหาเดียวกันและพบว่าเพิ่งทำงาน !! - ด้วยเกือบจะไม่มีรหัสพิเศษ ..

ดูhttps://medium.com/wdstack/bootstrap-equal-height-columns-d07bc934eb27 สำหรับการ disuccuion ที่ดีและด้วยการตอบสนองที่คุณต้องการในด้านล่างด้วยการเชื่อมโยง

https://www.codeply.com/go/EskIjvun4B

นี่เป็นวิธีตอบสนองที่ถูกต้องสำหรับฉัน ... คำพูด: ... 3 - ใช้ flexbox (ดีที่สุด!)

ตั้งแต่ปี 2560 วิธีที่ดีที่สุด (และง่ายที่สุด) ในการสร้างคอลัมน์ความสูงที่เท่ากันในการออกแบบที่ตอบสนองคือการใช้ CSS3 flexbox

.row.display-flex {
  display: flex;
  flex-wrap: wrap;
}
.row.display-flex > [class*='col-'] {
  display: flex;
  flex-direction: column;
}

และก็ใช้:

div class="container">
   <div class="row display-flex .... etc..

1
@media (min-width: @screen-sm-min) {
    div.equal-height-sm {
        display: table;


        > div[class^='col-'] {
            display: table-cell;
            float: none;
            vertical-align: top;
        }
    }
}

<div class="equal-height-sm">
    <div class="col-xs-12 col-sm-7">Test<br/>Test<br/>Test</div>
    <div class="col-xs-12 col-sm-5">Test</div>
</div>

ตัวอย่าง:

https://jsfiddle.net/b9chris/njcnex83/embedded/result/

ดัดแปลงมาจากหลายคำตอบที่นี่ คำตอบที่ใช้ flexbox นั้นเป็นวิธีที่ถูกต้องเมื่อ IE8 และ 9 ตายแล้วและเมื่อ Android 2.x ตายไป แต่นั่นไม่เป็นความจริงในปี 2558 และน่าจะไม่เกิดขึ้นในปี 2559 IE8 และ 9 ยังคงเป็น 4- 6% ของการใช้งานขึ้นอยู่กับวิธีการวัดของคุณและสำหรับผู้ใช้ระดับองค์กรจำนวนมากมันแย่กว่ามาก http://caniuse.com/#feat=flexbox

display: table, display: table-cellเคล็ดลับคือเพิ่มเติมย้อนหลังได้ - และสิ่งที่ดีหนึ่งคือปัญหาความเข้ากันอย่างจริงจังเพียงเป็นปัญหาซาฟารีที่กองกำลังมันbox-sizing: border-boxมีอะไรบางอย่างแล้วนำไปใช้กับแท็กเงินทุนของคุณ http://caniuse.com/#feat=css-table

คุณสามารถเพิ่มคลาสเพิ่มเติมที่ทำสิ่งที่คล้ายกันได้อย่าง.equal-height-mdชัดเจน ฉันเชื่อมโยงสิ่งเหล่านี้กับ divs เพื่อประโยชน์ด้านประสิทธิภาพเพียงเล็กน้อยในการใช้งานที่ จำกัด ของฉัน แต่คุณสามารถลบแท็กเพื่อทำให้แท็กทั่วไปเหมือนกับส่วนที่เหลือของ Bootstrap

โปรดทราบว่า jsfiddle ที่นี่ใช้ CSS และอื่น ๆ สิ่งที่ Less จะมีให้จะเป็นฮาร์ดโค้ดในตัวอย่างที่เชื่อมโยง ตัวอย่างเช่น @ screen-sm-min ถูกแทนที่ด้วย Less จะแทรก - 768px


1

ถ้ามันสมเหตุสมผลในบริบทของคุณคุณสามารถเพิ่ม div 12 คอลัมน์ที่ว่างเปล่าหลังจากแต่ละช่วงพักซึ่งทำหน้าที่เป็นตัวแบ่งที่กอดด้านล่างของเซลล์ที่สูงที่สุดในแถวของคุณ

<div class="row">
   <div class="col-xs-6">Some content</div>
   <div class="col-xs-6">
      Lots of content! Lots of content! Lots of content! Lots of content! Lots of content! 
   </div>
   <div id="spacer-div" class="col-xs-12"></div>
   <div class="col-xs-6">More content...</div>
</div><!--this You forgot to close -->

หวังว่านี่จะช่วยได้!


นี่ไม่ตอบคำถามที่เขาถาม!
Ellisan

0

คิดว่าฉันแค่เพิ่มว่าคำตอบที่ได้รับจาก Dr.Flink สามารถนำไปใช้กับ Bootstrap 3 form-horizontalบล็อก - ซึ่งจะมีประโยชน์มากถ้าคุณต้องการใช้สีพื้นหลังสำหรับแต่ละเซลล์ เพื่อให้สิ่งนี้สามารถทำงานกับแบบฟอร์ม bootstrap คุณจะต้องห่อเนื้อหาของแบบฟอร์มที่เพิ่งทำหน้าที่ในการทำซ้ำโครงสร้างเหมือนตาราง

ตัวอย่างด้านล่างนี้ยังมี CSS ซึ่งแสดงให้เห็นถึงการสืบค้นสื่อเพิ่มเติมที่อนุญาตให้ Bootstrap 3 สามารถเข้าครอบครองและทำสิ่งปกติบนหน้าจอขนาดเล็ก สิ่งนี้ยังทำงานใน IE8 +

ตัวอย่าง:

<form class="form-horizontal" role="form">

  <div class="form-wrapper">
    <div class="form-group">
      <label class="col-xs-12 col-sm-2 control-label">My Label</label>
      <div class="col-xs-12 col-sm-10">
        Some content
      </div>
    </div>
  </div>

</form>
.form-wrapper {
  display: table;
}

.form-wrapper .form-group {
  display: table-row;
}

.form-wrapper .form-group .control-label {
  display: table-cell;
  float: none;
}

.form-wrapper .form-group label + div {
  display: table-cell;
  float: none;
}

@media (max-width: 768px) {
  .form-wrapper {
    display: inherit;
  }
  .form-wrapper .form-group {
    display: block;
  }
  .form-wrapper .form-group .control-label {
    display: inherit;
  }
  .form-wrapper .form-group label + div {
    display: inherit;
  }
}

0

ลองทำผ่าน flex-box

.container {
	display: flex;
	padding-bottom: 50px;
}
.col {
	background: blue;
	padding: 30px;
}

.col.center {
	background: red;
	height: 100px;
	margin-bottom: -50px;
}
<div class="container">
  <div class="col">Left</div>
  <div class="col center">Center</div>
  <div class="col">Right</div>
</div>

JSFiddle สด - https://jsfiddle.net/grinmax_/spsn4fnq/


0

ใช่ Bootstrap 4 ทำให้ cols ทั้งหมดในแถวสูงเท่ากัน แต่ถ้าคุณสร้างเส้นขอบรอบเนื้อหาภายในแถวคุณอาจพบว่ามันดูเหมือนว่า cols นั้นไม่สูงเท่ากัน!

เมื่อฉันใช้height: 100%กับองค์ประกอบภายในคอลัมน์ฉันพบว่าฉันสูญเสียระยะขอบ

ทางออกของฉันคือใช้ช่องว่างภายใน div ของ col (แทนส่วนต่างขององค์ประกอบด้านใน) ชอบมาก

<div class="container">
    <div class="row">
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
        <div class="col-lg-4 col-md-6 col-12 py-4">
            <div class="h-100 border round">
                        ...
            </div>
        </div>
    </div>
</div>

ตัวอย่างโค้ดด้านบนใช้ Bootstrap 4.1 เพื่อสร้างชุดของเก้ากล่องที่มีเส้นขอบ


0

HTML

<div class="container-fluid">
    <div class="row-fluid">
        <div class="span4 option2">
            <p>left column </p>
            <p>The first column has to be the longest The first column has to be the longes</p>
        </div>

        <div class="span4 option2">
            <p>middle column</p>
        </div>

        <div class="span4 option2">
            <p>right column </p>
            <p>right column </p>
            <p>right column </p>
            <p>right column </p>
            <p>right column </p>
        </div>
    </div>
</div>

CSS

.option2 { background: red; border: black 1px solid; color: white; }

JS

$('.option2').css({
    'height': $('.option2').height()
});

0

2019/03/19

** Bootstrap 4 ความสูงเท่ากับโซลูชั่น **

Bootstrap Utilities / flex เพื่อความสูงเท่ากัน

ตัวอย่างสดใน Codepen

ความสูงเท่ากับโดยระดับ bootstrap กับ div div หลักคงที่heightหรือmin-height

<div class="d-flex align-content-stretch flex-wrap" style="min-height: 200px">
    <div>Flex height test text for example , Flex height test text for example </div>
    <div>Flex item</div>
    <div>Flex item</div>
    <div>Flex item</div>
 </div>


3
ทำไมคุณให้คะแนนลบ คุณสามารถแสดงความคิดเห็นได้หรือไม่
นพ

-1

คุณสามารถตัดคอลัมน์ภายใน div

<div class="row">
<div class="col-md-12>
  <div class="col-xs-12 col-sm-4 panel" style="background-color: red">
  some content
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: yellow">
  kittenz
  <img src="http://placekitten.com/100/100">
  </div>
  <div class="col-xs-6 col-sm-4 panel" style="background-color: blue">
  some more content
  </div>
</div>
</div>

ไม่ทำงานสำหรับฉันด้วยปุ่มในคอลัมน์ใดคอลัมน์หนึ่ง
เรย์ฮันเตอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.