ExtJS - Fill und Auto-Höhe
Ich bin mit ExtJS (html/css) und ich habe eine Frage bezüglich Layout. Beispiel:
|--------|
| |
| |
| |
| |
| |
|--------|
| |
| |
|--------|
Die kombinierte Höhe (Sie müssen nicht alle padding, margin etc.) ist 100% seines übergeordneten container. Vorzugsweise ist es zwei Platten irgendwie auf einander gestapelt.
Das problem ist, dass ich nicht wissen, die Höhe weder die Oberseite noch die Unterseite (es ist nicht Fix und kann sich ändern, da der Inhalt innerhalb der Platten ändern kann, es ist zwei Menüs.) Ich brauche die top panel zu füllen aus den verbleibenden Platz, oder haben eine Bildlaufleiste, wenn nötig.
Es ist nicht so wichtig, dass die Lösung ist pure ExtJS, es ist nur, dass der container für die zwei Platten ist ein ExtJS panel, den Inhalt der beiden Platten im inneren ist plain html-angetrieben von javascript.
Hat jemand eine Ahnung, wo zu beginnen?
Bearbeiten
Ich denke ein Teil des Problems ist das fehlen der "resize" - event. Ich denke, ich kann sofort mit einigen semi-dynamische/statische Lösung und versuchen, berechnen die Höhe der unteren Platte
- Das erste, was, das erscheint in meinem Kopf ist die
vbox
layout verwendenflex
option auf der Oberseite. - Ich denke nicht, dass das funktionieren wird (ich hab schon mal angeschaut), da die Dokumentation sagt: Jedes Kind-Element mit einem flex-Eigenschaft wird gebeugt werden senkrecht gemäß der jedes Element die relative flex-Wert im Vergleich zu der Summe aller Elemente mit einem flex-Wert angegeben. Keine Kind-Elemente, die entweder eine flex = 0 oder flex = undefined wird nicht "gebeugt" (die ursprüngliche Größe nicht verändert werden).
- Welche version von Ext JS verwenden Sie?
- Ich als mit ExtJS 3 glaube ich, aber es ist mehr als vor zwei Jahren schrieb ich diese Frage, also bin ich nicht sicher
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist nicht ein einfaches problem zu lösen. Durch Ihre Beschreibung des Problems Panel 2 müssen
autoHeight: true
, aber es gibt keine Möglichkeit zu sagen, der browser oder Extern, um automatisch die Größe der Oberseite nach, dass.Die besten, die ich mit oben kommen kann ist, es zu tun manuell auf einen timer:
config x: 0, y: 0, anchor: "100% 100%", autoScroll: true
autoHeight: true
mit benutzerdefiniertenstyle: "top: auto; bottom: 0"
Möglicherweise gibt es einen einfacheren Weg. In ExtJS 4 (ich habe nicht getestet in 3, aber es könnte funktionieren, wenn der vbox layout, wenn ein Kind-Element hat ein
flex
von0
oderundefined
die layout-manager passen Sie die Höhe des Elements.Also für dein Beispiel, das top-panel hätte
flex
von1
und die Bodenplatte hätteflex
von0
:Nun die Bodenplatte wird einfach die Höhe jedes untergeordneten Komponenten und die Obere Abdeckung wird die noch verfügbare Höhe.
Wenn ich die Frage richtig - die beiden Platten sollten nicht eine Feste Größe haben, es sei denn, Sie haben Inhalt, in dem Fall, dass Sie scrollen? In der Regel würde ich vorschlagen, dass mindestens eine der Platten steht für 'master' - Inhalte und hat eine Feste Größe. Ansonsten sollte diese Arbeit:
Einfach zu geben, dass die config auf 'Betrieb' - element und dann die setup-Platte 1' und 'Tafel 2' wie Sie sehen, passen (d.h. ersetzen Sie " {html:'Fenster 1' flex:1} " mit dem Namen der Komponente)
Können Sie auch ein CSS-trick ('max-height' CSS-Feld) statt 'layout' und 'flex' ExtJS Felder. Für die, die nur fügen Sie die folgenden Zeilen-element, das sollte Scrollbar:
Getestet mit ExtJS 3.4.0.