extjs - 将 formPanel 放在普通面板上居中

发布于 2024-09-02 13:07:50 字数 431 浏览 11 评论 0原文

我正在使用 extjs,只是想解决一个简单的问题: 我有一个固定宽度的表格。我想将此表单放在普通的 Ext.Panel 中居中。 我试图通过“css-way”来实现这一点 - 将左右边距设置为“auto”。

但这不起作用,似乎边距被忽略了。

代码:

var curStateForm = new Ext.FormPanel({
    title:'test',
    width:300,
    bodyStyle:'margin:5px auto 0 auto',
    items: [edIst, edAdjust, edSumme]
});   


var testPanel = new Ext.Panel({
    width: '100%',
    frame:true,
    items: [curStateForm]
});  

I'm using extjs and just trying to solve a simple problem:
I have a form with a fixed width. I want to Center this form within a normal Ext.Panel.
I'm trying to achieve this the 'css-way' - setting the left and right margin to 'auto'.

But this doesn' work, it seems the margins are just ignored.

The Code:

var curStateForm = new Ext.FormPanel({
    title:'test',
    width:300,
    bodyStyle:'margin:5px auto 0 auto',
    items: [edIst, edAdjust, edSumme]
});   


var testPanel = new Ext.Panel({
    width: '100%',
    frame:true,
    items: [curStateForm]
});  

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

久夏青 2024-09-09 13:07:50

这对我来说非常适合 Ext 4

在任何容器上使用它

    layout: {
        type: 'vbox',
        align: 'center',
        pack: 'center'
    },
    items: [{
        title: 'Centered Panel',
        width: 200,
        height: 200
    }]

This works perfect for me in Ext 4

Use it on any container

    layout: {
        type: 'vbox',
        align: 'center',
        pack: 'center'
    },
    items: [{
        title: 'Centered Panel',
        width: 200,
        height: 200
    }]
不羁少年 2024-09-09 13:07:50
    style: {
        marginLeft: 'auto',
        marginRight: 'auto'
    },
    style: {
        marginLeft: 'auto',
        marginRight: 'auto'
    },
自此以后,行同陌路 2024-09-09 13:07:50

我刚刚对一个为我工作的小组做了这个

listeners: {
    afterlayout : function(container, layout, eOpts) {
    panel.center();
    }
}

I just did this to a panel

listeners: {
    afterlayout : function(container, layout, eOpts) {
    panel.center();
    }
}

Worked for me.

帥小哥 2024-09-09 13:07:50

您看过此示例吗?查看“自定义布局/中心”下的示例。

编辑:在 Ext 3 中,该示例就是正确的选择。现在在 Ext 4 中,最好在外部容器上使用中心对齐的 vbox 布局,如 A1rPun 的回答 所示。

Have you seen this sample? Look at the example under "custom layouts / center".

EDIT: In Ext 3, that sample was the way to go. Now in Ext 4, it would be best to use a vbox layout on the outer container with center alignment as shown in A1rPun's answer.

带上头具痛哭 2024-09-09 13:07:50

在面板中:

bodyStyle: "padding: 15px;"  // may also be only padding-left/right

In panel:

bodyStyle: "padding: 15px;"  // may also be only padding-left/right
探春 2024-09-09 13:07:50

例如,我使用以下布局:

Ext.layout.AbsoluteCenterLayout = Ext.extend(Ext.layout.ContainerLayout, {
    monitorResize:true,
    onLayout : function(ct, target){
        Ext.layout.AbsoluteCenterLayout.superclass.onLayout.call(this, ct, target);
        if(!this.container.collapsed){
            var sz = (Ext.isIE6 && Ext.isStrict && target.dom == document.body) ? target.getViewSize() : target.getStyleSize();
            this.setItemSize(this.activeItem || ct.items.itemAt(0), sz);
        }
    },
    setItemSize : function(item, size){
        if(item && size.height > 0){ // display none?
            formEl = item.getEl();
            var widthCenter = (size.width/2)-(formEl.getWidth()/2);
            var heightCenter = (size.height/2)-(formEl.getHeight()/2);
            formEl.setStyle({
                left: widthCenter+'px',
                top: heightCenter+'px',
                position: 'absolute',
            });
        }
    }
});
Ext.Container.LAYOUTS['absolutecenter'] = Ext.layout.AbsoluteCenterLayout;

我的表单:

    Viewport = new Ext.Viewport({
                renderTo: Ext.getBody(),
                layout: 'border',
                items: [{
                    region: 'center',
                    xtype: 'panel',
                    layout: 'absolutecenter',
                    baseCls: 'x-plain',
                    items:[{
                        id: 'form',
                        formId: 'admin-loginform',
                        xtype: 'form',
                        title: 'Authentication',
                        iconCls: 'admin-wnd-authentication',
                        frame: true,
                        autoHeight: true,
                        width: 270,
                        defaultType: 'textfield',
                        labelAlign: 'right',
...

For instance, I use this layout:

Ext.layout.AbsoluteCenterLayout = Ext.extend(Ext.layout.ContainerLayout, {
    monitorResize:true,
    onLayout : function(ct, target){
        Ext.layout.AbsoluteCenterLayout.superclass.onLayout.call(this, ct, target);
        if(!this.container.collapsed){
            var sz = (Ext.isIE6 && Ext.isStrict && target.dom == document.body) ? target.getViewSize() : target.getStyleSize();
            this.setItemSize(this.activeItem || ct.items.itemAt(0), sz);
        }
    },
    setItemSize : function(item, size){
        if(item && size.height > 0){ // display none?
            formEl = item.getEl();
            var widthCenter = (size.width/2)-(formEl.getWidth()/2);
            var heightCenter = (size.height/2)-(formEl.getHeight()/2);
            formEl.setStyle({
                left: widthCenter+'px',
                top: heightCenter+'px',
                position: 'absolute',
            });
        }
    }
});
Ext.Container.LAYOUTS['absolutecenter'] = Ext.layout.AbsoluteCenterLayout;

My form:

    Viewport = new Ext.Viewport({
                renderTo: Ext.getBody(),
                layout: 'border',
                items: [{
                    region: 'center',
                    xtype: 'panel',
                    layout: 'absolutecenter',
                    baseCls: 'x-plain',
                    items:[{
                        id: 'form',
                        formId: 'admin-loginform',
                        xtype: 'form',
                        title: 'Authentication',
                        iconCls: 'admin-wnd-authentication',
                        frame: true,
                        autoHeight: true,
                        width: 270,
                        defaultType: 'textfield',
                        labelAlign: 'right',
...
染火枫林 2024-09-09 13:07:50

在面板中尝试以下操作:

style: {
    "margin-left": "auto",
            "margin-right": "auto"
       }, 

Try the following in the panel:

style: {
    "margin-left": "auto",
            "margin-right": "auto"
       }, 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文