Як вирівняти стовпці флешбоку вліво і вправо?


122

За допомогою типового CSS я міг пропускати один з двох стовпців ліворуч та інший праворуч із проміжком між жолобами. Як би я це зробив за допомогою флексокса?

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>

Відповіді:


278

Ви можете додати justify-content: space-betweenдо батьківського елемента. Роблячи це, елементи дитячого флексбоксу будуть вирівняні на протилежні сторони з проміжком між ними.

Оновлений приклад

#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
Майкл Бенджамін

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

Методи 1 і 3 не сумісні з IE 11!
Пітер Хейлунд Андерсен

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

див. приклад

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.