我想创建一个由三列组成的行,其中左列始终在左侧,右侧两列连接在一起(即,如果没有足够的空间,则将它们包在一起到下一行).这很容易使用flex实现,可能如下所示:
https://jsfiddle.net/znxn9x1r/
这里的问题是我还希望使用文本溢出:省略号将中间列(紫色始终 – 右/左)缩小到一些最小宽度.这意味着当我开始降低页面的宽度时,中间列应该首先开始收缩,并且只有在不再可能之后,然后右边的两列应该换行到下一行.
我想要实现的模型:
然后当收缩到达中间列的最小宽度时,它应该像以前一样换行到下一行:
现在,如果没有左侧黄色列,整个行仅由右侧两列组成,我可以使用以下问题的答案:How to keep a flex item from overflowing due to its text?
这确实表现得应该如此,但只有在正确的组已经包装之后:
当它与第一个黄色列仍在同一行时,它不会收缩中间列:
^^这不应该发生,有足够的空间用于省略号!
这是我的代码,是否有可能用纯HTML / CSS实现我想要的东西?
* {
padding: 5px;
}
#container {
background-color: lightgreen;
display: flex;
flex-wrap: wrap;
}
#always-left {
background-color: yellow;
margin: auto;
margin-left: 0;
}
#right-group {
margin: auto;
margin-right: 0;
display: flex;
}
#shrinkable {
background-color: violet;
vertical-align: middle;
order: 1;
flex: 0 1 auto;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
#not-shrinkable {
background-color: lightblue;
vertical-align: middle;
order: 2;
flex: 1 0 auto;
}
<div id="container">
<div id="always-left">
always-left
</div>
<div id="right-group">
<div id="shrinkable">
always-right / left
</div>
<div id="not-shrinkable">
always-right / right
</div>
</div>
</div>
https://jsfiddle.net/mnmyw245/
最佳答案 一种可能适合您的方法涉及禁用flex-wrap:包装在Flex容器上.
#container {
background-color: lightgreen;
display: flex;
/* flex-wrap: wrap; <-- REMOVE THIS */
}
这迫使一切都保持在同一条线上.
然后,当您觉得包装开始没问题时,请使用媒体查询恢复换行.
这会将包裹控件从浏览器中取出并放在您的手中.
这是一个例子:
@media ( max-width: 200px ) {
#container { flex-wrap: wrap; }
}