J'ai un Highchart qui redimensionne la largeur de manière magnifique lorsque la fenêtre change de taille. Mais pas la hauteur. J'ai essayé cette taille de graphique définie, mais cela ne fonctionne pas correctement. Existe-t-il un autre moyen de modifier automatiquement la hauteur lorsque la fenêtre change de taille?
Ceci est mon code CSS pour la sortie. J'ai un onglet Jquery UI, l'autre onglet montre le datatable
#output-container
{
float: right;
display: inline;
position: absolute;
right: 10px;
left: 400px;
top:120px;
overflow-y: auto;
}
Ceci est mon css pour le chartdiv:
#chartContainer{
margin: auto;
}
Et voici la fonction js Chart:
function qchart(){
chart = new Highcharts.Chart({
chart: {
renderTo: 'chartContainer',
type: 'column',
spacingBottom: 3,
//height: (screen.availHeight)-500,
marginRight: 30,
marginBottom: 30,
reflow: true
},
//etc..
};
//...
}
la réponse de Ricardo est correct, cependant: parfois vous pouvez vous retrouver dans une situation où le conteneur ne se redimensionne tout simplement pas comme vous le souhaitez lorsque la fenêtre du navigateur change de taille, ne permettant ainsi pas aux highcharts de se redimensionner.
Cela fonctionne toujours:
chart.setSize(width, height, doAnimation = true);
dans votre fonction de redimensionnement réelle pour définir dynamiquement la hauteur et la largeurreflow: false
dans les options highcharts et bien sûr, définissez height
et width
explicitement lors de la création. Comme nous allons faire notre propre gestion des événements de redimensionnement, il n'est pas nécessaire de crochets Highcharts dans un autre.Selon la référence API:
By default the height is calculated from the offset height of the containing element. Defaults to null.
Ainsi, vous pouvez contrôler sa height
en fonction de la div parent en utilisant l'événement redraw
, qui est appelé quand il change sa taille.
Références
Vous devez définir explicitement la hauteur du conteneur
#container {
height:100%;
width:100%;
position:absolute;
}
J'ai eu un problème similaire avec la hauteur, sauf que mon graphique était à l'intérieur d'un bootstrap popup modal, dont je contrôle déjà la taille avec css. Cependant, pour une raison quelconque lorsque la fenêtre a été redimensionnée horizontalement, le la hauteur du conteneur de graphique augmenterait indéfiniment. Si vous faisiez glisser la fenêtre d'avant en arrière, elle s'élargirait indéfiniment verticalement. Je n'aime pas non plus les solutions codées en dur pour la hauteur/largeur.
Donc, si vous faites cela dans un modal, combinez cette solution avec un événement de redimensionnement de fenêtre.
// from link
$('#ChartModal').on('show.bs.modal', function() {
$('.chart-container').css('visibility', 'hidden');
});
$('#ChartModal').on('shown.bs.modal.', function() {
$('.chart-container').css('visibility', 'initial');
$('#chartbox').highcharts().reflow()
//added
ratio = $('.chart-container').width() / $('.chart-container').height();
});
Lorsque "ratio" devient un rapport hauteur/largeur, cela vous redimensionnera lorsque le modal bootstrap) sera redimensionné. Cette mesure n'est prise que lorsque le modal est ouvert. Je stocke le ratio en tant que global mais ce n'est probablement pas la meilleure pratique.
$(window).on('resize', function() {
//chart-container is only visible when the modal is visible.
if ( $('.chart-container').is(':visible') ) {
$('#chartbox').highcharts().setSize(
$('.chart-container').width(),
($('.chart-container').width() / ratio),
doAnimation = true );
}
});
Donc, avec cela, vous pouvez faire glisser votre écran sur le côté (le redimensionner) et votre graphique conservera son rapport d'aspect.
Écran large
vs plus petit
(toujours bidouiller avec des unités vw, donc tout à l'arrière est trop petit pour lire lol!)