ExtJS(html/css)を使用していますが、レイアウトに関する質問があります。例:
|--------|
| |
| |
| |
| |
| |
|--------|
| |
| |
|--------|
結合された高さ(パディング、マージンなどはありません)は、親コンテナーの100%です。できれば、それは2つのパネルどういうわけか互いに積み重ねられています。
問題は、I 高さがわからない上部パネルと下部パネルのどちらでもないことです(固定されておらず、パネル内のコンテンツが変更される可能性があるため、変更される可能性があります。2つのメニューです。)I トップパネルから塗りつぶし残りのスペースを削除するか、必要に応じてスクロールバーが必要です。
ソリューションが純粋なExtJSであることはそれほど重要ではありません。2つのパネルのコンテナーがExtJSパネルであり、内部の2つのパネルのコンテンツがjavascriptによって駆動されるプレーンなhtmlであるということだけです。
どこから始めればよいか手がかりを持っている人はいますか?
編集
問題の一部は「サイズ変更」イベントの欠如だと思います。半動的/静的な解決策で逃げて、下のパネルの高さを計算してみることができると思います
これは簡単に解決できる問題ではありません。問題の説明によると、パネル2にはautoHeight: true
が必要ですが、それに応じてトップパネルのサイズを自動的に設定するようにブラウザまたはExtに指示する方法はありません。
私が思いつくことができる最善のことは、タイマーで手動でそれを行うことです:
config x: 0, y: 0, anchor: "100% 100%", autoScroll: true
がありますautoHeight: true
でカスタムstyle: "top: auto; bottom: 0"
もっと簡単な方法があるかもしれません。 ExtJS 4(3でテストしていませんが、機能する可能性があります)で、子アイテムのflex
が0
またはundefined
レイアウトマネージャーはそのアイテムの高さを調整しません。
したがって、あなたの例では、上部パネルのflex
は1
で、下部パネルのflex
は0
です。
Ext.create("widget.panel", {
renderTo: Ext.getBody(),
height: 300, width: 400,
layout: { type: 'vbox', pack: 'start', align: 'stretch' },
items: [{
// our top panel
xtype: 'container',
flex: 1, // take remaining available vert space
layout: 'fit',
autoScroll: true,
items: [{
xtype: 'component',
// some long html to demonstrate scrolling
html: '<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>'
}]
},{
// our bottom panel
xtype: 'container',
flex: 0, // dont change height of component (i.e. let children dictate size.)
items: [{
xtype: 'button',
height: 200,
text: 'Hello World'
}]
}]
});
これで、下部パネルは子コンポーネントの高さだけを取得し、上部パネルは残りの使用可能な高さを取得します。
'layout'および 'flex' ExtJSフィールドの代わりにCSSトリック( 'max-height' CSSフィールド)を使用することもできます。そのためには、スクロール可能である必要がある要素に次の行を追加するだけです。
bodyStyle: { maxHeight: '300px' },
autoScroll: true,
ExtJS3.4.0でテスト済み。
質問が正しければ、2つのパネルは、コンテンツがない限り固定サイズにするべきではありません。コンテンツがある場合は、スクロールしますか?通常、パネルの少なくとも1つは「マスター」コンテンツを表し、固定サイズであることをお勧めします。それ以外の場合、これは機能するはずです。
layout:'vbox',
layoutConfig: {
align : 'stretch',
pack : 'start',
},
items: [
{html:'panel 1', flex:1},
{html:'panel 2', flex:2}
]
その構成を「holding」要素に指定し、適切と思われるように「panel1」と「panel2」を設定します(つまり、「{html: 'panel 1'、flex:1}」をコンポーネントの名前に置き換えます)