Сделать оставшееся заполнение 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>></strong>
</div>
</div>
Ответы
Ответ 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>