gpt4 book ai didi

css - 如何隐藏 Grommet SideSplit 组件

转载 作者:太空宇宙 更新时间:2023-11-04 09:28:47 24 4
gpt4 key购买 nike

我有一个使用 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 prop 并在 <GLNav /> 上切换一个 CSS 类成分。 CSS 将宽度设置为 0,以便 NAV 组件滑入和滑出:

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

所有这些在 Chrome 中都能完美运行。但是在 Safari 中,当 SideSplit 组件处于非移动模式(屏幕宽度大于 750 像素)时 - 即使 active prop 为假,CSS 类 .hide已应用 - <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>
)
}

最佳答案

虽然这个解决方案有效,但我相信有更好的方法可以实现您想要做的事情,而无需直接操作 css。

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

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

它允许您使用纯 React 方法来隐藏元素,而无需依赖 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>

}
}

关于css - 如何隐藏 Grommet SideSplit 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40923326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com