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);
我相信你通常會使用flexbox來允許孩子以某種方式填充容器,所以你可以在容器上設置尺寸,並在孩子身上使用'flex'風格。 [示例](http://jsfiddle.net/gpg1Lgc5/) – 2014-08-31 01:18:11
Brandon,在一些複雜的佈局情況下,我們可能需要設置flex項目的寬度。我創建了這個場景來展示我正面臨的跨瀏覽器問題。 – kiran 2014-08-31 05:18:18