抛砖引玉:如何在 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 位置。大功告成。

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

时间: 2024-12-28 14:09:31

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

[译] 如何在React中写出更优秀的代码

目录 我们先来看 Linting 利用组件模块性.复用性和组合性 propTypes 和 defaultProps 知道何时创建新组件 组件 vs 纯组件 vs 无状态函数组件 无状态函数组件 纯组件 使用 React 开发工具 使用内联条件语句 尽可能使用代码片段库 React 本质 - 学习 React 是如何工作的 快速回顾 在React中写出更好代码的9条建议:学习关于 Linting, propTypes, PureComponent 等. Rajat S · 2018 年 4 月 1

【转】如何在IOS中使用3D UI - CALayer的透视投影

原文网址:http://www.tairan.com/archives/2041/ 例子代码可以在 http://www.tairan.com/thread-3607-1-1.html 下载 iOS的UI是基于UIView类的,我们能看到的每个UI元素都是UIView或者UIView的子类.View按树形结构组织起来,树根是UIWindow. View负责界面的交互和显示,其中显示部分由CALayer来完成.每个UIView包含一个CALayer实例.可以这么认为,UIView本身是不可见的,我

如何在React中处理REST API请求

REST API通常用于Web开发中.它们是Web应用程序用来彼此"交谈"的编程接口.它们用于访问功能部件和数据." REST"(代表性状态转移)是定义API属性的概念.本文将重点介绍如何使用基于Web的API从数据库中检索数据. Axios是一个npm软件包,允许应用程序将HTTP请求发送到Web API.要在您的React应用程序中使用Axios,请使用以下命令: npm install axios 要么 yarn add axios 在创建react组件之前,

如何在react中实现一个table切换?

废话不说,直接贴代码,供新手参考 export default class TabComponent extends Component { constructor(props){ super(props); this.state = { }; } render(){ return ( <TabController> <div name="one"> 第一部分 </div> <div name="two"> 第二部分

在react中使用intro.js的的一些经验

react逐渐热了起来,但是新的东西毕竟前辈的经验少一些,前段时间自己在react中用到intro.js时,得到的资料甚少,摸索后便将一些心得记录下来了~ 1 intro.js的引入,这一点请看上一篇博文关于如何在react中引入文件 2 在需要的页面引入文件后, 可以给intro.js的出发点绑定函数 showIntrojs(){ introJs().start(); } 这样intro.js就可以在页面发挥作用了~ 3 intro.js只会对整个组件起作用,并且要在组件外面添加一层父元素(d

React中使用百度地图API

今天我们来搞一搞如何在React中使用百度地图API好吧,最近忙的头皮发麻,感觉身体被掏空,所以很久都没来写博客了,但今天我一定要来一篇好吧 话不多说,我们直接开始好吧 特别注意:该React项目是用create react app 创建的(以下所有操作都在该基础上进行) 1.去百度地图登录 http://lbsyun.baidu.com/ 2.获取密钥 登录后在右上角的控制台里面申请(由于这个我早已申请过了,就不给大家演示了,大家照着它的提示走就可以了) 3.拿到密钥后,将百度API的scri

如何在Service中更新Activity的UI?

============问题描述============ 如何在Service中更新Activity的UI? 不想用广播.  有人说用接口,具体如何实现我一直不懂? 请赐教. ============解决方案1============ 将activity 实例传过来不就OK 了?然后调用其方法更新UI ============解决方案2============ 一般都用广播,否则在Activity也创建一个Messenger,也就是AIDL方式通信. ============解决方案3=====

Semantic UI中的验证控件的事件的使用

1.Semantic UI中的验证控件,功能挺不错的,中文官网的文档写的都比较详细了,我再这里就不再进行重复了,主要是想说一下它的事件的使用方法,这个可能有部分朋友刚开始接触的时候不太了解 注意看这几个事件:前两个是对于字段验证通过和失败之后的事件的调用,后两个是对整个form是否都验证通过或者失败时调用的事件,于是我们在调用的时候可以这么写 function login() { $(".ui.form").form( { username: { identifier: 'userNa

webpack 解决 semantic ui 中 google fonts 引用的问题

semantic ui css 的第一行引用了 google web font api,由于不可告人而又众所周知的原因,这条链接在国内无法访问: @import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin'); css 是阻塞渲染的,而 css 中的 import 又会进一步阻塞加载和渲染,所以就导致页面样式加载十分缓慢. 像 semantic ui 这样的开