J'essaie d'adapter deux tracés intrigants l'un à côté de l'autre à l'intérieur d'une flexbox CSS. Je veux qu'ils redimensionnent lorsque la fenêtre est redimensionnée. Cela fonctionne comme prévu lorsque la fenêtre s'agrandit, mais les tracés ne rétrécissent pas lorsque la fenêtre devient plus petite.
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);
});
.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%;
}
<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>
JSFiddle: https://jsfiddle.net/bd0reepd/
Je ne comprends probablement pas comment fonctionne flexbox, mais si je remplace les tracés par des images, ils rétrécissent comme prévu.
J'ai essayé de déboguer ceci et j'ai trouvé la fonction interne plotlys plotAutoSize
, qui appelle window.getComputedStyle
et définit la taille du tracé en conséquence. J'ai utilisé console.log
pour examiner les valeurs de retour de window.getComputedStyle
et ils se "bloquent" à la plus grande taille lorsque la fenêtre se rétrécit.
Comment puis-je faire rétrécir les parcelles pour qu'elles s'adaptent à la fenêtre et rester côte à côte dans la même rangée?
Un paramètre initial sur les éléments flexibles est min-width: auto
. Cela signifie qu'un élément flexible ne peut pas, par défaut, être plus petit que son contenu.
Vous pouvez remplacer ce paramètre avec min-width: 0
ou overflow
avec une valeur autre que visible
. Ajoutez ceci à votre code:
.plot-col {
min-width: 0;
}
Plus d'informations: Pourquoi l'élément flexible ne réduit-il pas la taille du contenu?