2015-10-22 8 views
8

Ich versuche, ein Highchart in einem Flexbox-Container zu setzen. Das Diagramm wächst mit dem Container gut, aber es schrumpft nicht, wenn der Container schrumpft.Highcharts-ng wächst, schrumpft aber nicht in Flexbox

Mein Projekt verwendet angularJS und highcharts-ng, obwohl ich vermute, das Problem liegt bei Flexbox selbst. In Chrome und IE ist es genauso.

Here's a plunkr, die das Problem veranschaulicht. Wenn Sie die eingebettete Ansicht öffnen, werden Sie bemerken, wenn Sie das Fenster breiter machen, dass beide Diagramme wieder passen. Aber wenn Sie es enger machen, bleibt das oberste Diagramm (in einer Flexbox) unverändert.

Ich habe die Reflow-Taste, um das Reflow-Ereignis für highcharts-ng zu übertragen, aber es scheint keine Wirkung zu haben.

Ich bin auf der Suche nach einer Problemumgehung oder einer Lösung, die ich noch Flexbox verwenden kann.

Unten ist der Code von Plunkr. Es basiert auf einem anderen Plunk des Autors von highcharts-ng, das ein ähnliches Problem für Bootstrap-Container löste.

index.html

<!DOCTYPE html> 
<html ng-app="highChartTest"> 

    <head> 
    <link data-require="[email protected]" data-semver="3.3.2" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" /> 
    <link rel="stylesheet" href="style.css" /> 

    </head> 

    <body ng-controller="MyHighChart as c"> 

    <div class="page-container"> 
     <div class="side-panel"> 
     <ul> 
      <li>Item 1</li> 
      <li>Item 2</li> 
      <li><button ng-click="onReflowButtonPressed()" class="autocompare">Reflow</button></li> 
      </ul> 
     </div> 
     <div class="main-panel"> 
      <highchart id="highchart01" config="c.config" height="300"></highchart> 
     </div> 
    </div> 


    <highchart id="highchart02" config="c.config" height="300"></highchart> 

    <script data-require="[email protected]" data-semver="2.1.3" src="http://code.jquery.com/jquery-2.1.3.min.js"></script> 
    <script data-require="[email protected]" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script> 
    <script data-require="[email protected]*" data-semver="0.12.0" src="https://rawgit.com/angular-ui/bootstrap/gh-pages/ui-bootstrap-tpls-0.12.0.min.js"></script> 
    <script data-require="[email protected]" data-semver="4.0.1" src="//cdnjs.cloudflare.com/ajax/libs/highcharts/4.0.1/highcharts.js"></script> 
    <script data-require="[email protected]" data-semver="0.0.9" src="https://rawgit.com/pablojim/highcharts-ng/master/dist/highcharts-ng.min.js"></script> 

    <script src="app.js"></script> 
    </body> 

</html> 

style.css

.page-container { 
    margin: 20px; 
    border: 1px solid black; 
    display: flex; 
} 

.side-panel { 
    width: 200px; 
    flex-shrink: 0; 
    background-color: #ddd; 
} 

.main-panel { 
    margin: 10px; 
    padding: 20px; 
    flex-grow: 1; 
    border: 1px solid blue; 
} 

.highcharts-container { 
    width: 100%; 
    border: 1px solid red; 
} 

app.js

(function() { 
    angular.module('highChartTest', ['ui.bootstrap', 'highcharts-ng']) 
     .controller('MyHighChart', ['$scope', '$timeout', MyHighChart]); 

    function MyHighChart($scope, $timeout) { 

     $scope.onReflowButtonPressed = function(){ 
      console.log("broadcasting reflow"); 
      $scope.$broadcast('highchartsng.reflow'); 
     } 
     var chartId = 'yieldColumns01'; 
     this.widget = { 
      chartId: chartId, 
      cols: '12', 
      title: 'Reflow Test' 
     }; 

     this.config = { 
      options: { 
       chart: { type: 'column' }, 
       legend: { enabled: false}, 
      }, 
      title: { enabled: false, text: ''}, 
      xAxis: { categories: ['A', 'B', 'C', 'D', 'E', ] }, 
      yAxis: { max: 100}, 
      series: [{ 
       name: '2014', 
       data: [90.9, 66.1, 55.0, 53.2, 51.2] 
      }], 
      size: { height: '300' }, 
      // function to trigger reflow in bootstrap containers 
      // see: http://jsfiddle.net/pgbc988d/ and https://github.com/pablojim/highcharts-ng/issues/211 
      func: function(chart) { 
       $timeout(function() { 
       chart.reflow(); 
        // //The below is an event that will trigger all instances of charts to reflow 
        //$scope.$broadcast('highchartsng.reflow'); 
      }, 0); 
      } 
     }; 
    } 
})(); 

Antwort

4

Sie entweder 012.312 einstellenoder flex-basis auf dem .main-panel Container, damit Highcharts die Dimensionen des übergeordneten Elements ermitteln kann.

Ich habe auch die width: 100% auf .highcharts-container entfernt, da es nichts getan hat.

Die ursprüngliche Plunkr arbeitet auf Safari 9.0.1, so dass dies aufgrund der Unterschiede in sein könnte, wie Browser die Flexbox spec (z related issue with width/height: 100%) implementieren

Verwandte Themen