Вот метод, использующий flex-basis
для установки гибких элементов на определенный процент ширины.
В этом примере два гибких элемента не могут ни сжать , ни расти . Разделив 100% ширину на четыре столбца, каждый столбец должен составлять 25% от родительской ширины. Первый элемент составляет 25%, а второй - 50% (ширина двух столбцов), оставляя 25% свободного пространства справа.
.parent {
display: flex;
min-height: 10em;
border: 1px solid #CCC;
}
.child {
outline: 1px solid black;
background-color: lightgray;
}
.child:nth-child(1) {
flex: 0 0 25%
}
.child:nth-child(2) {
flex: 0 0 50%;
}
<div class="parent">
<div class="child"></div>
<div class="child"></div>
</div>
EDIT
Я заметил, что вам нужно пространство между каждым столбцом. Одним из способов является добавление некоторого процента правильной маржи для сгибания элементов и вычитание этого процента из основы каждого элемента.
.parent {
display: flex;
min-height: 10em;
border: 1px solid #CCC;
}
.child {
outline: 1px solid black;
background-color: lightgray;
margin-right: 3%;
}
.child:nth-child(1) {
flex: 0 0 22%;
}
.child:nth-child(2) {
flex: 0 0 47%;
}
<div class="parent">
<div class="child"></div>
<div class="child"></div>
</div>
Если вы предпочитаете, чтобы расстояние между столбцами не было в процентах, вы можете использовать calc()
, чтобы вычислить соответствующую гибкую основу. Однако обратите внимание, что на момент написания этой статьи это не поддерживается в IE или Edge.
IE & Edge, как сообщается, не поддерживает calc внутри 'flex'. (Не проверено на старых версиях)
Этот пример не работает: flex: 1 1 calc (50% - 20px);
caniuse.com
.parent {
display: flex;
min-height: 10em;
border: 1px solid #CCC;
}
.child {
outline: 1px solid black;
background-color: lightgray;
margin-right: 0.5em;
}
.child:nth-child(1) {
flex: 0 0 calc(25% - 0.5em);
}
.child:nth-child(2) {
flex: 0 0 calc(50% - 0.5em);
}
<div class="parent">
<div class="child"></div>
<div class="child"></div>
</div>