抛砖引玉:如何在 React 中使用 semantic-ui 的 fixed menu 和 sidebar

semantic-ui 的 fixed menu 和 sidebar 放在 body 中运行的很好(这是 sui 的默认设计),但是在 react 应用中,组件体系都是放在比较深的地方,很难直接放在body中,这时,问题很多。

基本思路:创建一个 sidebar 组件,以此作为 sidebar 的 context,并将内容全部放到 pusher 部分中。

如此构建,会发现很多问题:navbar 和 sidebar 不再是 fixed,显示问题,滚动问题……

究其原因,是使用了 css3 transform 属性,这会导致 fixed 元素失效。经过一番探索,这里贴出来一个不完美但还过得去的解决方案。

首先,构建 sidebar 组件

<div ref="context" className="pushable patch">
<div ref="sidebar" className="ui sidebar inverted vertical left menu patch">
...
</div>
<div className="pusher">
{children}
</div>
</div>

注意添加了 .patch 类以便后面进行修复

然后,在 componentDidMount 中初始化 sidebar

$(this.refs.sidebar).sidebar({
    context: $(this.refs.context),
    transition: 'overlay',
    mobileTransition: 'overlay'
});

注意我们指定了 context,并且使用 overlay 来用作 transition,以避免使用 transform 属性,这是一大限制。

然后,打 css 补丁

.pushable:not(body).patch {    -webkit-transform: unset;
    transform: unset;
}

.pushable:not(body) .patch.ui.sidebar {
    position: fixed;
}

首先,消除 context 的 transform 设置,然后,固定 sidebar 位置。大功告成。

这篇文章仅仅是抛砖引玉,同样面对了这个问题的大神能分享更加优秀的解决方案。

posted @ 2016-06-18 00:42  我不是照耀  阅读(3182)  评论(0编辑  收藏  举报