如何使用 Bootstrap / React 制作响应式汉堡菜单?

时间:2021-05-13 23:20:01

标签: html css reactjs twitter-bootstrap bootstrap-4

编辑:我相信我的问题是在 jquery 和 bootstrap JS 脚本中加载。我如何在 React 中执行此操作?

我一直在尝试针对移动设备优化我的 React 网站,并且有一个导航栏,可以在移动设备上转换为汉堡菜单样式的导航栏。到目前为止,在 Bootstrap Navbar Documentation 之后,我已经能够让我的导航栏删除项目并在缩小到移动尺寸时显示一个汉堡包图标,但是当我点击该图标时,没有任何下拉。

需要注意的一点:每次加载页面时,我都会使用 props 将类传递给 Navbar,这样我就可以使用一个组件为不同的页面设置各种 Navbar 样式。我将在我的 About.js(我的投资组合中“关于我”页面的页面)中提供一个这样的调用,与大多数其他调用相同。

导航栏.JS

// navigation bar class
class NavBar extends Component {
    render() {
        return (
            <nav id={this.props.navId} className={this.props.class}>
                <li id={this.props.logoId} className={this.props.logoClass}><p>{this.props.logoText}</p></li>
                <button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo03" aria-controls="navbarTogglerDemo03" aria-expanded="false" aria-label="Toggle navigation">
                    <span className="navbar-toggler-icon"><i className="fas fa-bars"></i></span>
                </button>
                <div className="collapse navbar-collapse">
                    <ul id="links" className="navbar-nav ml-auto">
                        <li className="nav-item active textlink"><Link className="nav-link" to="/home">Home</Link></li>
                        <li className="nav-item active textlink"><Link className="nav-link" to="/about">About Me</Link></li>
                        <li className="nav-item active textlink"><Link className="nav-link" to="/projects">Projects</Link></li>
                        <li className="nav-item active"><a className="nav-link" target="blank" href="https://github.com/QuintonPrice"><i className="fab fa-github"></i></a></li>
                        <li className="nav-item active"><a className="nav-link" target="blank" href="https://www.linkedin.com/in/quinton-price/"><i className="fab fa-linkedin"></i></a></li>
                    </ul>
                </div>
            </nav >
        );
    }
}

export default NavBar;

我的“关于”页面中 Navbar 组件的示例调用(这与我用于除主页之外的所有其他页面的调用相同)

<Navbar navId="navb" logoId="logo" logoText="qprice" logoClass="mr-auto" class="navbar bg-white navbar-expand-lg sticky-top navbar-fixed-top shadow ml-auto"/>

Navbar.css(注意:.navHome 类用于主页上显示的导航栏,.navb 用于我在其他所有页面上使用的导航栏样式):

/* nav bar */
nav {
    margin-bottom: 20px;
}

/* qprice logo */
#logo p {
    font-family: 'Raleway', sans-serif;
    font-weight: 700;
    color: #52B788;
    font-size: 2.3rem;
    margin-left: 15%;
    margin-right: 15%;
}

/* nav bar home links */
#navHome a {
    color: white;
    padding: 10px 15px;
    font-size: 1.5em;
    float: left;
    text-align: center;
    text-decoration: none;
    position: relative;
}

#navHome a:hover, #navb a:hover {
    color: #52B788;
}

/* nav bar home list items */
#navHome li {
    display: inline;
    margin-right: .5rem;
}

/* nav links */ 
#navb a {
    color: #343a40;
    padding: 15px;
    font-size: 1.5em;
    float: left;
    text-align: center;
    text-decoration: none;
    position: relative;
}

/* navigation list items */
#navb li {
    display: inline;
    margin-right: .5rem;
}

/* navbar link hover */
.textlink a:hover {
    color: #52B788;
}

.textlink a::before {
    content: "";
    position: absolute;
    width: 100%;
    height: 1px;
    bottom: 0;
    left: 0;
    background-color: #52B788;
    visibility: hidden;
    transform: scaleX(0);
    transition: all .15s ease-in-out .05s;
  }

.textlink a:hover::before {
    visibility: visible;
    transform: scaleX(1);
  }

.fab {
    margin-right: .7rem;
    font-size: 1.5em;
    text-align: center;
    text-decoration: none;
  }

.fab:hover {
    color: #52B788;
    opacity: 0.7;
}

1 个答案:

答案 0 :(得分:0)

我昨天刚遇到同样的问题。我通过将 script 标签移到 html 文件的底部关闭 body 标签之前解决了这个问题,并重新排列顺序,以便 JQuery 脚本在 Bootstrap 脚本之前先运行。