当窗口变小时,Flex项目不会缩小

Ale*_*ter 35 javascript css css3 flexbox plotly

我试图在CSS弹性框内将两个图形图拼接在一起.我希望它们在调整窗口大小时调整大小.当窗口增长时,它按预期工作,但是当窗口变小时,图形不会缩小.

var trace1 = {};
var trace2 = {};

var plotdiv1 = document.getElementById("plotdiv1");
var plotdiv2 = document.getElementById("plotdiv2");

Plotly.newPlot(plotdiv1, [trace1]);
Plotly.newPlot(plotdiv2, [trace2]);

window.addEventListener("resize", function() {
  Plotly.Plots.resize(plotdiv1);
  Plotly.Plots.resize(plotdiv2);
});
Run Code Online (Sandbox Code Playgroud)
.plot-div {
  max-width: 100%;
}
.plot-col {
  flex: 0 0 50%;
}
.my-container {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
  width: 100%;
  height: 100%;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>

<body>
  <div class="my-container">
    <div class="plot-col">
      <div id="plotdiv1" class="plot-div"></div>
    </div>
    <div class="plot-col">
      <div id="plotdiv2" class="plot-div"></div>
    </div>
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

JSFiddle:https://jsfiddle.net/bd0reepd/

我可能误解了flexbox的工作原理,但是如果我用图像替换这些图,它们会按预期收缩.

我试图调试这个并找到了plotlys内部函数plotAutoSize,它相应地调用window.getComputedStyle和设置绘图大小.我曾经console.log看过window.getComputedStyle它们的返回值,当窗口缩小时,它们会以最大的尺寸"卡住".

如何让图形缩小以适应窗口并在同一行中保持彼此相邻?

Mic*_*l_B 96

弹性项目的初始设置是min-width: auto.这意味着默认情况下,弹性项目不能小于其内容.

您可以使用min-width: 0overflow使用除以外的任何值覆盖此设置visible.将其添加到您的代码中:

.plot-col {
    min-width: 0;
}
Run Code Online (Sandbox Code Playgroud)

修改小提琴

更多信息:为什么flex项目不会缩小内容大小?

  • ......结束了45分钟,我的头撞在我的桌子上.非常感谢! (19认同)
  • 这是一个艰难的; 感谢您的帮助 (4认同)
  • @Hamid对我来说太迟了。我现在秃顶 (4认同)
  • 谢谢,节省了我几个小时的拔头发时间! (3认同)
  • 这是如此重要,他们应该将其写在文档的第一行 (3认同)
  • 天哪,这很好..但是为什么...为什么他们会这样做呢.. (3认同)
  • @carinlynchin,解释如下:https://www.w3.org/TR/css-flexbox-1/#min-size-auto (2认同)
  • 就我而言,这有助于部分缩小我的内容,但它不想完全缩小以适应弹性尺寸。有效的是设置 `width: 0;` 而不是 `min-width: 0;`。 (2认同)
  • 容器上的“overflow:hidden”解决了我的情况,所以不要忘记查看页面最顶部建议的原始问题(在“重复”通知中) (2认同)