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