javascript - 使用 ReactJS 的跨浏览器 flexbox 内联样式

标签 javascript html css reactjs flexbox

我正在 React 中构建一个使用内联样式的网络应用。

我想支持最新版本的主流浏览器(safari、chrome、FF、IE)。我也想用 flexbox。

以下样式 var,不适用于所有浏览器:

var ContainerStyle = {
  display: 'flex',
  flexDirection: 'row',
  flex: '1 1 auto',
  backgroundColor: '#EFEFEF',
  alignItems: 'center',
  justifyContent: 'center',
  textAlign: 'center'
};

我想我需要在之前的对象中添加这样的东西:

{
    display: '-webkit-flex',
    display: '-moz-flex',
    display: '-ms-flex',
    display: '-o-flex',
    display: 'flex',
    -webkit-flex-direction: 'row',
    -moz-flex-direction: 'row',
    -ms-flex-direction: 'row',
    -o-flex-direction: 'row',
    flex-direction: 'row'
}

但是,将其放置在任何地方都相当费力。是否有任何 polyfill 可以帮助解决这个问题?或者可能会转换代码的东西?

谢谢!

最佳答案

一个快速的建议是使用 Radium ( http://formidable.com/open-source/radium/ )。它支持自动前缀、媒体查询和伪选择器。

或者,您可以围绕您的样式对象编写自己的包装器。请记住,您是在 Javascript 和客户端上创建样式,因此您知道正在运行的浏览器,并且您应该只能使用所需的前缀。

像这样:

var ContainerStyle = {
  display: (browser.webkit) ? '-webkit-flex' : 'flex',
  //flexDirection: 'row', not here!
};

// but here:
if (browser.webkit) {
    ContainerStyle.WebkitFlexDirection = 'row'
}

当然,您可以将所有这些放在一个模块中,并在应用前将需要修改的样式传递给它。我相信 Radium(类似于其他库)在某种意义上做了类似的事情(尽管我认为它们只是输出整个带前缀的 CSS 属性而不是选择)。

关于javascript - 使用 ReactJS 的跨浏览器 flexbox 内联样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35492119/

相关文章:

具有数据库连接的 JavaScript/HTML5 游戏?

html - 如果不将第三个 float 推到下一行,则无法将边距添加到 .col-*-4 类

javascript - 如何让固定标题在滚动 html 表中工作(当标题有多行时)

html - 'right'组成一行元素的方式是什么? UL/DIVS?

javascript - 动态播放 youtube 视频

javascript - Div 拖动不作为背景

javascript - 如何在结果表中只显示选定的记录

html - CSS 不起作用,W3.CSS 覆盖?

javascript - 如何在 JavaScript 中将日期转换为本地等效日期

javascript - Moment.js 时区 valueOf 返回错误的时间戳