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">© 2016 </Footer>
</Article>
</App>
<GLNav />
設定アイコンをクリックしない限り、コンポーネントを非表示にして、<GLBoard />
コンポーネントが画面全体に表示されるようにしたいと考えています。アイコンに接続された redux 状態変数を使用して、active
小道具を切り替え、コンポーネントの CSS クラスを切り替え<GLNav />
ます。CSS は幅を 0 に設定して、NAV コンポーネントがスライドインおよびスライドアウトするようにします。
.hide{
width: 0 !important;
transition: width .3s ease-out;
}
.show{
transition: width .3s ease-out;
}
これらはすべて Chrome で完全に機能します。ただし、SideSplit コンポーネントが非モバイル モード (画面幅が 750px より大きい) の Safari では、active
小道具が false で、CSS クラス.hide
が適用されている場合でも、<GLNav />
コンポーネントには幅の値があります。幅を 750px 未満に変更すると、グロメットが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>
)
}