1、Extjs 布局非常是灵活。可是吐槽下CSS,太难重写,想自己重构一套都难哎...
var viewport = new Ext.Viewport({ layout:'border', items:[ { //中间部分 region:'center', id: 'centerPanel', iconCls:'', title:'${centerTitle}', autoScroll:false, header:false, layout: 'fit', items:[mainTabs]}, { //布局左边west部分 region : 'west', 220, collapsible: true, split:true, header:false, border:false, frame:false, xtype:'panel', layout:'anchor', collapseMode:'mini', layoutConfig:{columns:1}, items:[{ split:true, region:'west', header:false, autoScroll:false, border:false, anchor:'100% 10%', xtype: 'panel', html:'<table border="0" cellpadding="0" cellspacing="0" width="100%" height="60" background="./resource/image/banner_background/${theme}.png"> <tr > <td style="padding-left:15px;padding-top:10px"><img class="IEPNG" src="${banner}" /> </td> </tr></table>', collapsible: true },{region:'west', 220, anchor:'100% 84%', collapsible: true, minSize: 200, border:false, maxSize: 350, split: true, collapseMode:'mini', iconCls:'book_previousIcon', title: '${westTitle}', layout:'accordion', layoutConfig:{ animate:true, activeOnTop : ${activeOnTop} }, items: [ #foreach($card in $cardList) { autoScroll:true, border:false, contentEl: 'div.card.${card.menuid}', #if(${card.iconcls}&&${card.iconcls}!="") iconCls:'${card.iconcls}', #end title:'${card.menuname}' } #if(${card.isNotLast}) , #end #end ] },{ split:true, region:'west', collapsible: true, header:false, autoScroll:false, //border:false, anchor:'100% 6%', region:'center', layout: { type:'hbox', padding:'3 3 3 3', pack:'start', align:'top' }, defaults:{margins:'0 5 0 0'}, xtype: 'panel', items:[configButton,closeButton] }] } ]});
说明
1.Viewport一个panel 来固定region:'center', 也就是center部分
2.再使用一个panel,使用layout:'anchor',布局方式,anchor布局将使组件固定于父容器的某一个位置,使用anchor布局的子组件尺寸相对于容器的尺寸,即父容器容器的大小发生变化时,使用anchor布局的组件会依据规定的规则又一次渲染位置和大小。
3.新增第二部的panel。加入3个子panel布局。而且配置它们的anchor。来填充父容器,保证改变3个中得一个,其它2个能自己主动填充空间,进行自己主动适应。
4.这里提示一点:因为是使用4个panel 组装成的区域,能够使用collapseMode:'mini',来控制关闭右側的面板。
实现效果: