flex-basis
установлен на 0
, удалите его или установите на auto
, в противном случае он следует правилу, в котором элемент может быть 0
из width
'* basis
.
.container {
display: flex;
}
.left {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0px;
min-width: 0px;
overflow: hidden;
border: 1px solid red;
}
.center {
flex-grow: 0;
flex-shrink: 0;
flex-basis: 200px;
border: 1px solid green;
}
.right {
flex-grow: 1;
flex-shrink: 0;
border: 1px solid blue;
}
<div class="container">
<div class="left">
left<br/> shrinks to 0
</div>
<div class="center">
center<br/> fixed width, always centered (unless right column is too small to fit it's content)
</div>
<div class="right">
right<br/> long_content_no_wrap_or_overflow
</div>
</div>
... Но потеря позиции второго элемента от центра ...
else, единственный обходной путь iможет думать о , равном display:table;
(возможная альтернатива -> max-content
не поддерживается в IE11) и calc()
для max-width
, поэтому он не может сжаться ниже размера контента, но нуждается в сбросе на сегодняшний деньбраузер, initial
может помочь избежать ошибок в работе обычных браузеров:
.container {
display: flex;
background: linear-gradient(to left, transparent 50%, rgba(0, 0, 0, 0.3) 50%), linear-gradient(to top, transparent 50%, rgba(0, 0, 0, 0.3) 50%);
margin-bottom:0.5em;
}
.left {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0px;
min-width: 0px;
overflow: hidden;
border: 1px solid red;
}
.center {
flex-grow: 0;
flex-shrink: 0;
flex-basis: 200px;
border: 1px solid green;
}
.right {
flex-grow: 1;
flex-shrink: 0;
flex-basis: 0px;
border: 1px solid blue;
/* i work around */
width: 100%;
max-width: calc(50vw - 100px);
display: table; /* IE11 : cause max-content is not supported and flex is average */
/* filter not IE 11 to reset default */
display: initial;
width: initial;
max-width: initial;
}
<div class="container">
<div class="left">
left<br/> shrinks to 0
</div>
<div class="center">
center<br/> fixed width, always centered (unless right column is too small to fit it's content)
</div>
<div class="right">
right<br/> long_content_no_wrap_or_overflow
</div>
</div>
<div class="container">
<div class="left">
left<br/> shrinks to 0
</div>
<div class="center">
center<br/> fixed width, always centered (unless right column is too small to fit it's content)
</div>
<div class="right">
right<br/>right<br/>right<br/>right<br/>right<br/>right<br/> long_content_no_wrap_or_overflow
</div>
</div>
третий элемент не заполняет всю ширину строки макетом таблицы, а будет растягивать ее высоту.
@supports
здесь также можно использовать другой способ фильтрации IE11 ... (условные комментарии, которые ранее были удалены несколькими версиями)