จะจัดคอลัมน์ Flexbox ซ้ายและขวาได้อย่างไร?


123

ด้วย CSS ทั่วไปฉันสามารถลอยหนึ่งในสองคอลัมน์ไปทางซ้ายและอีกคอลัมน์หนึ่งทางขวาโดยมีช่องว่างระหว่างราง ฉันจะทำอย่างไรกับ flexbox

http://jsfiddle.net/1sp9jd32/

#container {
  width: 500px;
  border: solid 1px #000;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}
#a {
  width: 20%;
  border: solid 1px #000;
}
#b {
  width: 20%;
  border: solid 1px #000;
  height: 200px;
}
<div id="container">
  <div id="a">
    a
  </div>
  <div id="b">
    b
  </div>
</div>

คำตอบ:


279

คุณสามารถเพิ่มjustify-content: space-betweenองค์ประกอบหลัก ในการทำเช่นนั้นรายการ flexbox ของเด็ก ๆ จะถูกจัดแนวให้ตรงข้ามกันโดยมีช่องว่างระหว่างพวกเขา

อัปเดตตัวอย่าง

#container {
    width: 500px;
    border: solid 1px #000;
    display: flex;
    justify-content: space-between;
}


คุณยังสามารถเพิ่มmargin-left: autoในองค์ประกอบที่สองเพื่อจัดแนวไปทางขวา

อัปเดตตัวอย่าง

#b {
    width: 20%;
    border: solid 1px #000;
    height: 200px;
    margin-left: auto;
}


4
เฮ้คุณช่วยอธิบายได้ไหมว่าองค์ประกอบจัดวางอย่างถูกต้องโดยใช้margin-left: autoที่นี่ได้อย่างไร
hulkinBrain

2
@hulkinBrain นี่คือคำอธิบาย: stackoverflow.com/a/33856609/3597276
Michael Benjamin

2
หมายเหตุ: margin-left: autoและmargin-right: autoเคล็ดลับไม่เข้ากันได้กับ IE11 สำหรับผู้ที่ยังต้องรองรับ
TetraDev

30

ฉันคิด 4 วิธีเพื่อให้บรรลุผล นี่คือการสาธิต

วิธีที่ 1:

#a {
    margin-right: auto;
}

วิธีที่ 2:

#a {
    flex-grow: 1;
}

วิธีที่ 3:

#b {
    margin-left: auto;
}

วิธีที่ 4:

#container {
    justify-content: space-between;
}

9
วิธีที่ 5: แทรกองค์ประกอบว่างพิเศษflex:1;ทุกที่ที่คุณต้องการให้มีช่องว่างเพิ่มเติม :)
adamdport

นี่จะเป็นคำตอบที่ดีและสมบูรณ์ที่สุดหากคุณฝังข้อมูลโค้ดแทนการเชื่อมโยงกับ jsfiddle
สไตล์

วิธีที่ 1 และ 3 เข้ากันไม่ได้กับ IE 11!
Peter Højlund Andersen

1

อีกทางเลือกหนึ่งคือการเพิ่มแท็กอื่นที่มีflex: autoสไตล์ระหว่างแท็กของคุณที่คุณต้องการเติมลงในช่องว่างที่เหลือ

https://jsfiddle.net/tsey5qu4/

HTML:

<div class="parent">
  <div class="left">Left</div>
  <div class="fill-remaining-space"></div>
  <div class="right">Right</div>
</div>

CSS:

.fill-remaining-space {
  flex: auto;
}

ซึ่งเทียบเท่ากับ flex: 1 1 auto ซึ่งดูดซับช่องว่างพิเศษใด ๆ ตามแกนหลัก


0

มีหลายวิธี แต่ง่ายที่สุดคือการใช้ช่องว่างระหว่างดูตัวอย่างในตอนท้าย

#container {    
    border: solid 1px #000;
    display: flex;    
    flex-direction: row;
    justify-content: space-between;
    padding: 10px;
    height: 50px;
}

.item {
    width: 20%;
    border: solid 1px #000;
    text-align: center;
}

ดูตัวอย่าง

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