2012-06-04 4 views
1

Je dois placer trois éléments l'un sous l'autre au centre de la page. Ce n'est pas un problème avec HBOX. Mais mes éléments ont des largeurs différentes: deux éléments de largeur 350 et un élément de largeur 1000. voici l'exemple:alignement des éléments dans la disposition HBOX extjs 4

Ext.create('Ext.Viewport', { 
      layout: { 
       type: "hbox", 
       pack: "center", 
       align: "middle" 
      }, 
      items: { 
       xtype: 'container', 
       items:[{ 
        xtype: 'image', 
        height: 350, 
        width: 350, 
        src: '/images/logo.jpg' 
       },{ 
        xtype: 'image', 
        height: 350, 
        width: 350, 
        src: '/images/logo2.jpg' 
       },{ 
        xtype: 'panel', 
        width: 1000, 
        margin: '0px 0px 0px -325px', 
        frame: true, 
        autoscroll: true, 
        title: 'panel title', 
        html: 'some panel with some rows with<br /> some text' 
       }] 
      }, 
      renderTo: Ext.getBody() 
    }); 

Le problème principal est l'alignement horizontal des éléments. Le deuxième problème est: pas de barre de défilement si la résolution de l'écran est petite et j'ai un gros texte dans le panneau.

Ok, un autre exemple:

Ext.create('Ext.Viewport', { 
       layout: { 
        type: "hbox", 
        pack: "center", 
        align: "middle" 
       }, 
       items: { 
        xtype: 'container', 
        items:[{ 
         xtype: 'form', 
         width: 350, 
         title: 'Form Panel', 
         items: [{ 
          xtype: 'textfield', 
          fieldLabel: 'Name' 
         }] 
        },{ 
         xtype: 'panel', 
         width: 1000, 
         frame: true, 
         autoscroll: true, 
         title: 'panel title', 
         html: 'some panel with some rows with<br /> some text' 
        }] 
       }, 
       renderTo: Ext.getBody() 
}); 

Ce panneau sera exactement au milieu de l'écran, mais le formulaire ne sera pas. P.S. J'ai essayé de déplacer la mise en page dans le conteneur - cela ne fonctionne pas

+0

Pouvez-vous s'il vous plaît mettre à jour votre échantillon de code avec la largeur appropriée? et essayez-vous aussi d'utiliser vbox ou hbox? – sha

+0

Je suis désolé, j'étais pressé. Ce code est mon code, donc j'utilise HBOX et mi largeur 350px et 1000px –

+0

encore s'il vous plaît corriger votre question - vous avez VBOX dans le titre et les balises, mais HBOX dans le code. Vous parlez également de la largeur, mais avoir la hauteur dans le code – sha

Répondre

2
Ext.create('Ext.Viewport', { 
    layout : 'fit', 
    autoScroll : true, 
    items: { 
     xtype: 'container', 
     autoScroll : true, 
     minHeight : 1000, 
     layout: { 
      type: "vbox", 
      pack: "center", 
      align: "center" 
     }, 
     items:[{ 
      xtype: 'image', 
      height: 350, 
      width: 350, 
      src: '/images/logo.jpg' 
     },{ 
      xtype: 'image', 
      height: 350, 
      width: 350, 
      src: '/images/logo.jpg' 
     },{ 
      xtype: 'panel', 
      width: 1000, 
      margin: '0px 0px 0px -325px', 
      frame: true, 
      title: 'panel title', 
      html: 'some panel with some rows with<br /> some text' 
     }] 
    }, 
    renderTo: Ext.getBody() 
}); 

Je pense que vous devriez peut-être définir un minHeight au conteneur, et inclure la mise en page 'fit' au conteneur afin d'obtenir le panneau de défilement automatique.

Et d'inclure la disposition vbox aux éléments du contianer.

+0

cela a fonctionné pour moi: 'Ext.create ('Ext.Viewport', { mise en page: 'ajustement', autoscroll: true, articles: { xtype: 'contenant', minHeight: 845,' où 845 est la hauteur de mon contenu.Mais j'ai encore barre horizontale :( –

+0

'' m'a fait plaisir.N'a pas scrollbar horizontal. –

0

Tout d'abord, déplacez votre définition de disposition à l'intérieur du conteneur. Cela n'a rien à voir avec viewport. Deuxièmement pour votre mise en page Je pense que vous devriez utiliser

type: 'vbox', 
align: 'center', 
pack: 'center', 

Je pense aussi qu'il pourrait y avoir quelque chose avec la façon dont ExtJs mises en page des images - parce que quand j'ai essayé votre exemple jsFiddle - les images ne seront toujours pas mise en page Vbox, mais d'autres composants - (boîte ou bouton) serait mise en page jsut fin

+0

J'ai essayé de déplacer la mise en page dans le conteneur et de changer "middle" en "center" - ne fonctionne pas. A propos des images ... J'ai posté un autre code avec des images. –

+0

Sur une note semi-connexe, les images peuvent poser problème car, au niveau de la mise en page, l'image n'est pas encore chargée et a des dimensions 0x0. J'ai dû mettre dans une solution de contournement pour avoir un écouteur sur charger pour appeler doComponentLayout sur le conteneur. –

Questions connexes