Вы можете установить flex: 0 0 50%
на третий дочерний элемент , что означает, что элемент не будет расти, уменьшаться и всегда будет занимать половину ширины контейнера flexbox.
Теперь, чтобы позволить второму дочернему элементу занимать оставшееся пространство, оставшееся от двух других элементов, вы можете установить flex-grow: 1
и установить min-width: 0
(позволяет уменьшаться дальше, чем его собственная ширина - обратите внимание, что по умолчаниюmin-width
является автоматическим для гибкого элемента ).
См. Демонстрацию ниже:
* {
box-sizing: border-box;
}
.wrapper {
width: 100%;
display: flex;
position: relative;
}
.wrapper > * {
height: 300px;
display: block;
}
.wrapper > *:nth-child(1) {
background-color: salmon;
width: 200px;
}
.wrapper > *:nth-child(2) {
background-color: khaki;
flex-grow: 1; /* grow width automatically if needed */
min-width: 0; /* allow shrinking below default width */
}
.wrapper > *:nth-child(3) {
background-color: violet;
flex: 0 0 50%; /* added */
}
left: 0;
width: 200px;
left: 200px;
right: 50%;
left: 50%;
right: 0;