2017-05-18 2 views
1

Ist es möglich, Legendenelemente über die gesamte Breite des Diagramms zu verteilen, während das Wrapping beibehalten wird? Ich bin auf der Suche nach etwas wie der flex Ausrichtung Eigenschaft space-between.Highcharts-Legende auf volle Breite verteilt

Was ich habe:

enter image description here

Was ich will (außer nur 3 Elemente mit in der ersten Reihe, was in Ordnung ist): enter image description here

+0

Könnte teilen Sie bitte Ihre Konfiguration und Stile auf http://jsfiddle.net? – arcquim

+0

Ich glaube nicht, dass es eine Option dafür gibt. Um ein solches Layout zu haben, denke ich, dass Sie die Legende manuell neu positionieren oder Ihre eigene Legende mit html/css erstellen müssen. Beispiel https://codepen.io/kevintcoughlin/pen/WrKLMe – morganfree

+0

@arcquim hier ist eine Geige mit einer engen Konfig: https://jsfiddle.net/LLExL/7540/ –

Antwort

0

Sie dynamisch auf Legendenelemente neu positionieren Ereignisse laden/neu zeichnen.

Basierend auf Ihrer Geige kann das Verfahren so sein

function adjustLegend() { 
    const legend = this.legend 
    const legendWidth = this.chartWidth - 20 

    legend.allItems.forEach((item, i, allItems) => { 
    const {width, height} = item.legendGroup.getBBox() 
    const itemsPerRow = i < 3 ? 3 : 2 

    item.legendGroup.attr({ 
     translateX: (i % itemsPerRow) * (legendWidth - width)/(itemsPerRow - 1), 
     translateY: Math.floor(i/3) * (height + 5) 
    }) 
    }) 
} 

In Diagrammoptionen (für HTML-Elemente Breite muss anders gepackt werden):

events: { 
    load: adjustLegend, 
    redraw: adjustLegend 
} 

Beispiel: https://jsfiddle.net/f6btakom/1/