0

我有一个使用 grommet ux 框架的 React/redux 应用程序。基本结构是:

    <App className="gol">
      <Article>
        <GLHeader />
          <SideSplit active={props.nav} onResponsive={checkMobile} >
             <GLNav />
             <GLBoard />
          </SideSplit>
        <Footer colorIndex="neutral-1-a" justify="center">&copy;&nbsp;2016 </Footer>
      </Article>
    </App>

<GLNav />除非单击“设置”图标,否则我希望隐藏该组件,从而允许该<GLBoard />组件填满屏幕。我有一个连接到图标的 redux 状态变量来切换active道具并切换<GLNav />组件上的 CSS 类。CSS 将宽度设置为 0,以便 NAV 组件滑入和滑出:

.hide{
  width: 0 !important;
  transition: width .3s ease-out;
}
.show{
  transition: width .3s ease-out;
}

所有这些都可以在 Chrome 中完美运行。但是在 Safari 中,当 SideSplit 组件处于非移动模式(屏幕宽度大于 750 像素)时 - 即使activeprop 为 false 并且.hide应用了 CSS 类 -<GLNav />组件也具有宽度值。如果我将宽度更改为小于 750 像素,扣眼会应用一个hidden类,这将<GLNav />根据需要隐藏。

这是<GLNav />课程:

const GLNav = props => {
    return(
      <SideBar colorIndex="neutral-1-a" className={props.nav}>
        <Header pad="medium" justify="between">
          <Title>
            Settings
          </Title>
          <Button icon={<Close />} onClick={() => props.actions.toggleNav()} />
        </Header>
     </SideBar>
  )
}
4

2 回答 2

1

尽管此解决方案有效,但我相信有一种更好的方法可以实现您想要做的事情,而无需直接操作 css。

您见过 Grommet 中的 Animate 实用程序吗?

https://grommet.github.io/docs/animate/examples/#1

它允许您使用纯反应方法来隐藏元素,而无需依赖 css 来隐藏元素(它react-addons-transition-group在幕后使用)。

在你的例子中,我会做这样的事情:

export default MyComponent extends Component {
  state = { navActive: false }

  render () {
    const { navActive } = this.state;

    let navNode;
    if (navActive) {
      navNode = (
        <Animate leave={{"animation": "slide-left", "duration": 1000}}
          visible={true}>
          <GLNav />
        </Animate>
      );
    }

    <App className="gol">
      <Article>
        <GLHeader />
          <SideSplit active={props.nav} onResponsive={checkMobile} >
             {navNode}
             <GLBoard />
          </SideSplit>
        <Footer colorIndex="neutral-1-a" justify="center">&copy;&nbsp;2016 </Footer>
      </Article>
    </App>

  }
}
于 2016-12-02T17:53:22.917 回答
0

复制我的评论以回答它的工作。

让我们强制.hide类最大宽度为 0

.hide{
  width: 0 !important; /* may be you don't need !important anymore */
  max-width: 0;
  transition: width .3s ease-out;
}
于 2016-12-02T05:11:30.443 回答