Подтвердить что ты не робот

Сделать оставшееся заполнение div * горизонтальным * пробелом в flexbox

У меня есть 2 divs бок о бок в flexbox. Правая рука всегда должна быть одинаковой ширины, и я хочу, чтобы левая рука просто хватала оставшееся пространство. Но это не будет, если я специально не установил его ширину.

Итак, на данный момент он установлен на 96%, который выглядит нормально, пока вы действительно не сквозите экран - тогда правый div div немного истощается из пространства, в котором он нуждается.

Я думаю, я мог бы оставить его как есть, но он чувствует себя не так - как будто должен быть способ сказать:

правый всегда один и тот же; вы слева - вы получаете все, что осталось

.ar-course-nav {
  cursor: pointer;
  padding: 8px 12px 8px 12px;
  border-radius: 8px;
}
.ar-course-nav:hover {
  background-color: rgba(0, 0, 0, 0.1);
}
<br/>
<br/>
<div class="ar-course-nav" style="display:flex; justify-content:space-between;">
  <div style="width:96%;">
    <div style="overflow:hidden; white-space:nowrap; text-overflow:ellipsis;">
      <strong title="Course Name Which is Really Quite Long And Does Go On a Bit But Then When You Think it Stopped it Keeps on Going for even longer!">
                Course Name Which is Really Quite Long And Does Go On a Bit But Then When You Think it Stopped it Keeps on Going for even longer!
            </strong>
    </div>
    <div style="width:100%; display:flex; justify-content:space-between;">
      <div style="color:#555555; margin-right:8px; overflow:hidden; white-space:nowrap; text-overflow:ellipsis;" title="A really really really really really really really really really really really long department name">
        A really really really really really really really really really really really long department name
      </div>
      <div style="color:#555555; text-align:right; white-space:nowrap;">
        Created: 21 September 2016
      </div>
    </div>
  </div>
  <div style="margin-left:8px;">
    <strong>&gt;</strong>
  </div>
</div>
4b9b3361

Ответ 1

Используйте свойство flex-grow, чтобы сделать элемент flex потребляющим свободное пространство на главной оси.

Это свойство будет максимально расширять элемент, регулируя длину до динамических сред, таких как изменение размера экрана или добавление/удаление других элементов.

Общим примером является flex-grow: 1 или, используя свойство стенографии, flex: 1.

Следовательно, вместо width: 96% в вашем div используйте flex: 1.


Вы писали:

Итак, на данный момент он установлен на 96%, который выглядит нормально, пока вы действительно не сквозите экран - тогда правый div div немного истощается из пространства, в котором он нуждается.

Разрушение div с фиксированной шириной связано с другим свойством flex: flex-shrink

По умолчанию элементы гибкости устанавливаются на flex-shrink: 1, что позволяет им сжиматься, чтобы предотвратить переполнение контейнера.

Чтобы отключить эту функцию, используйте flex-shrink: 0.

Подробнее см. раздел flex-shrink factor в ответе:


Подробнее о выравнивании флюида вдоль главной оси:

Подробнее о выравнивании гибкости вдоль поперечной оси:

Ответ 2

В основном я пытался заставить мой код иметь средний раздел в строке, чтобы автоматически настраивать содержимое с обеих сторон (в моем случае - разделитель пунктирной линии). Как и в случае с предложением @Michael_B, ключ использует display:flex на контейнере строк и, по крайней мере, убедитесь, что ваш средний контейнер в строке имеет значение flex-grow не менее 1 (если внешние контейнеры не обладают свойствами flex-grow применяется). Свойство border для разделителя с пунктирной линией, возможно, потребуется изменить, чтобы выглядеть лучше.

Вот пример того, что я пытался сделать, и пример кода для того, как я его решил.

enter image description here

.row {
  background: lightgray;
  height: 30px;
  width: 100%;
  display: flex;
  align-items:flex-end;
  margin-top:5px;
}
.left {
  background:lightblue;
  display:inline;
}
.separator{
  flex-grow:1;
  border-bottom:dotted 2px black;
}
.right {
  background:coral;
}
<div class="row">
  <div class="left">Left</div>
  <div class="separator"></div>
  <div class="right">Right With Text</div>
</div>
<div class="row">
  <div class="left">Left With More Text</div>
  <div class="separator"></div>
  <div class="right">Right</div>
</div>
<div class="row">
  <div class="left">Left With Text</div>
  <div class="separator"></div>
  <div class="right">Right With More Text</div>
</div>