【发布时间】:2020-05-05 02:10:28
【问题描述】:
我想构建一个汉堡菜单以显示在我的 React 16.13.0 应用的移动版本上。我正在关注本教程——https://www.zacwillmington.com/how-to-add-a-hamburger-menu-to-your-website/。所以我像这样创建了我的导航栏组件
import React, { Component } from 'react';
import { NavLink } from 'react-router-dom';
import HamburgerMenu from 'react-hamburger-menu';
import {isMobile} from 'react-device-detect';
import './NavBar.css';
class NavBar extends Component {
constructor(){
super()
this.state = {
open: false,
hideOrShowHambugerDropDown: 'nav'
}
}
handleClick = () => {
this.setState({open: !this.state.open});
}
displayHamburgerMenu = () => {
return (
<HamburgerMenu
isOpen={this.state.open}
menuClicked={this.handleClick.bind(this)}
width={18}
height={15}
strokeWidth={1}
rotate={0}
color='black'
borderRadius={0}
animationDuration={0.5}
/>
)
}
displayNavBar = () => {
return (
<ul className='nav'>
<li className='nav-link'><NavLink to='/add'>Add</NavLink></li>
<li className='nav-link'><NavLink to='/search'>Search</NavLink></li>
</ul>
)
}
displayMobileMenu = () => {
return (
<ul className='hamburgerDropDown'>
<li className='nav-link'><NavLink to='/add'>Add</NavLink></li>
<li className='nav-link'><NavLink to='/search'>Search</NavLink></li>
</ul>
)
}
render() {
return (
<div className='navbar'>
{ this.state.open ? this.displayMobileMenu() : null}
{isMobile ? this.displayHamburgerMenu() : this.displayNavBar()}
</div>
);
}
}
export default NavBar;
我正在使用这个样式表来控制它...
.hamburgerDropDown {
background-color: black;
border: 1px solid bisque;
}
ul.hamburgerDropDown {
padding: 10px;
}
.navbar div {
display: inline-block;
}
但是,我遇到了几个问题。菜单没有出现在我的窗口右上角。此外,关闭“x”按钮出现在菜单下方。如何调整这些项目?如果您使用的是移动浏览器,您可以在 http://prod.chicommons.coop/ 看到演示,否则,请参见下文
编辑:如果你有兴趣,这里是 GitHub 上的代码——https://github.com/chicommons/maps/tree/master/client
【问题讨论】:
-
看起来你在菜单之后渲染菜单切换,所以如果没有绝对/固定定位,它会在菜单打开时渲染。是否可以共享一个正在运行的代码框来解决任何进一步的问题,例如您希望菜单切换的物理位置(右上角)?在屏幕截图中很难分辨,因为它看起来像是全部放大了。
-
感谢@DrewReese 的分析。如果对我的问题的编辑有用,我会提供一个 GitHub 链接。
标签: css reactjs css-position hamburger-menu