Что означает свойство "flex" любого макета ExtJS4?

Я видел примеры, когда некоторое число указано против flex, например, say

{text: 'Actual', xtype : 'gridcolumn', dataIndex: 'some_data', flex: 1}

что передается этим свойством? Указанная документация немного трудна для понимания, поэтому более простое объяснение очень помогло бы!

3 ответов


чтобы избежать использования описания документации, которое вы сказали, что нашли немного сложным:

Flex используется как свойство в макетах hbox и vbox и указывает объем пространства, который этот компонент займет в Родительском контейнере.

вы можете использовать любое число больше нуля в качестве значения свойства flex - некоторые люди любят использовать целые числа для простоты, другие, которые я видел, используют значения, такие как 0.25, чтобы легче представлять проценты.

базовый пример flex в действии:

var myPanel = Ext.create('Ext.panel.Panel', {
    width: 100,
    height: 100,
    layout: {
        type: 'hbox',
        align: 'stretch' // Stretches child items to the height of this panel.
    },
    items: [{
        xtype: 'container',
        html: 'Container one!',
        flex: 5 // This takes up 50% of the container.
    }, {
        xtype: 'container',
        html: 'Container two!',
        flex: 3 // This takes up 30% of the container.
    }, {
        xtype: 'container',
        html: 'Container three!',
        flex: 2 // This takes up 20% of the container.
    }]
});

ключом здесь является знание того, что не значение каждого flex определяет макет, а то, как эти значения связаны друг с другом. Если бы я добавил в этот макет еще один контейнер с flex 10, это заняло бы половину макета, так как 10-это половина 10 + 5 + 3 + 2 = 20.

надеюсь, что это поможет!


рассмотрим пример для этого, если есть родительский контейнер, имеющий ширину 100 и имеющий три дочерних элемента со следующими конфигурациями:

1st Element - width:70
2nd Element - flex:2
3rd Element - flex:1

Итак, теперь двигатель сначала выделит 70 для первого элемента. А затем он разделит оставшуюся доступную ширину в соотношении 2: 1 и выделит 20 на второй и 10 на третий элемент.

таким образом, flex-это способ указания относительной ширины среди дочерних элементов. Кроме того, просто добавить, интенсивное использование flex может создать проблему в жидких макетах, учитывая тот факт, что flex обычно действует на оставшуюся доступную ширину, которая может быть даже 0, если общая ширина контейнера уменьшается, и это может привести к перекрытию полей. пример здесь.


Он используется в макетах VBox и HBox:

этот параметр конфигурации должен применяться к дочерним элементам контейнер, управляемый этим макетом. Каждый дочерний элемент со свойством flex будет изгибаться горизонтально в соответствии с относительным изгибом каждого элемента значение по сравнению с суммой всех элементов с указанным значением flex. Любые дочерние элементы, имеющие flex = 0 или flex = undefined, будут не "сгибаться" (начальный размер не будет измененный.)

см.http://docs.sencha.com/ext-js/4-0/#!/api / Ext.макет.контейнер.HBox etc.