2014-08-30 62 views
1

我正在嘗試使用Flexbox和React構建帶動態佈局的網頁。 當flex-direction從列切換到列並切換回列時,flex項目的寬度在chrome中未按預期反映。Flexbox在Chrome和Firefox中的不同行爲

我創建一個的jsfiddle解釋這個問題

http://jsfiddle.net/kirana/u44fjqdj/4/(Reactjs版)

http://jsfiddle.net/kirana/vm9jcr1t/2/(Jquery的版本)

在上述的jsfiddle例如,柔性容器具有的400像素和四個寬度子彈性項目的寬度爲400px,從上到下流動。 將彈性方向更改爲行時,子項寬度將減少到100px以適合該行。 當彈性方向改回列時,子項目寬度應該恢復爲400px,但Chrome中的寬度仍爲100px,並且在Firefox中按預期工作;

如何解決這個問題?

var FlexItem = React.createClass({ 
    render: function() { 
     var itemStyle = { 
      width: 400, 
      height: 100, 
      border: '1px solid red', 
     }; 
     return React.DOM.div({ 
      style: itemStyle 
     }, 'some text'); 
    } 
}); 

var FlexContainer = React.createClass({ 
    getInitialState: function() { 
     return { 
      direction: 'column' 
     }; 
    }, 
    toggle: function() { 
     this.setState({ 
      direction: (this.state.direction === 'row') ? 'column' : 'row' 
     }); 
    }, 
    render: function() { 
     var containerStyle = { 
      display: '-moz-flex', 
      display: '-webkit-flex', 
      display: 'flex', 
      MozFlexDirection: this.state.direction, 
      WebkitFlexDirection: this.state.direction, 
      flexDirection: this.state.direction, 
      width: 400, 
      border: '1px solid green', 
     }; 

     var container = React.DOM.div({ 
      style: containerStyle 
     }, FlexItem(), FlexItem(), FlexItem(), FlexItem()); 

     var button = React.DOM.button({ 
      onClick: this.toggle, 
      className: 'button' 
     }, 'Toggle'); 

     return React.DOM.div({}, button, container); 
    } 
}); 

React.renderComponent(FlexContainer(), document.body); 
+0

我相信你通常會使用flexbox來允許孩子以某種方式填充容器,所以你可以在容器上設置尺寸,並在孩子身上使用'flex'風格。 [示例](http://jsfiddle.net/gpg1Lgc5/) – 2014-08-31 01:18:11

+0

Brandon,在一些複雜的佈局情況下,我們可能需要設置flex項目的寬度。我創建了這個場景來展示我正面臨的跨瀏覽器問題。 – kiran 2014-08-31 05:18:18

回答

相關問題