【发布时间】:2015-06-22 15:21:02
【问题描述】:
我一直在使用text-align: justify 来平均分配菜单。遵循此tutorial,它运行良好。
但是,当我使用 ReactJS 创建视图时,它会中断。可以在此处找到比较:http://jsfiddle.net/j7pLprza/1/。我使用这两个简单的组件来填充菜单:
var MenuItem = React.createClass({
render: function() {
return (
<li>
{this.props.title}
</li>
);
}
});
var TopMenus = React.createClass({
render: function() {
return (
<div className="break">
<nav>
<ul>
{this.props.menus.map(function(menu) {
return (<MenuItem title={menu.title} />);
})}
</ul>
</nav>
</div>
);
}
});
经过探索,我认为是ReactJS造成的,它删除了<li>项之后的所有换行符和空格。这将禁用text-align: justify。
AngularJS 也会发生这种情况(但我可以通过使用 add-space-all 指令来修复它)。
我在谷歌搜索后只遇到了这个问题:https://github.com/facebook/jsx/issues/19。但我很快就迷路了。
我尝试添加一些额外的内容,例如{'\n'} 和{' '},但是ReactJS 报告语法错误。
请帮忙。谢谢。
更新 1:
按照接受的答案,我的菜单可以在 Chrome 模拟器中使用。但是,当我从 iPhone 5c(Chrome 浏览器)访问时,结果好像无法识别额外的空间。
在尝试了不同的组合之后,这一个有效:
var TopMenus = React.createClass({
render: function() {
return (
<div className="break">
<nav>
<ul>
{this.props.menus.map(function(menu) {
return [(<MenuItem title={menu.title} />), ' '];
})}
</ul>
</nav>
</div>
);
}
});
请注意&nbsp; 中的额外空格是必需的。缺少&nbsp; 或 会破坏它。
它可以在 Nexus 7、iPhone 5c(Chrome 和 Safari)上运行。但是,我不知道确切的原因。如果有人知道,请帮忙。
更新 2:
还是有问题。所以我切换到Flex layout。这非常容易。一个例子是:http://jsfiddle.net/j7pLprza/4/
【问题讨论】:
-
React 在这种情况下不会删除任何东西,因为元素之间首先没有空格。如果要在 li 元素之间添加空格,可以将数组与
' '交错。示例:jsfiddle.net/j7pLprza/2 -
谢谢@FelixKling。有用!。请把它放在答案中。
-
我没有回答,因为 iPad 有点烦人。然而,事实证明它与 StackExchange 应用程序配合得很好:)
-
@ShaojiangCai 你能提供你找到的flex布局解决方案吗?
-
@HelpMeStackOverflowMyOnlyHope 请查看:jsfiddle.net/j7pLprza/4
标签: javascript css reactjs text-justify