【问题标题】:React bootstrap Navbar: How to right align a navbar itemReact bootstrap Navbar:如何右对齐导航栏项目
【发布时间】:2017-07-07 18:26:37
【问题描述】:

我正在尝试在 navbar.js 中右对齐导航栏项目(贡献),但我似乎无法弄清楚。导航栏是一个 React 组件,如下所示,

navbar.js here

import React, {PropTypes} from 'react';
import { Link, IndexLink } from 'react-router';
import { browserHistory, Router, Route } from 'react-router'
var ReactDOM = require('react-dom');

// create classes
var NavBar = React.createClass({
  render: function(){
    return(
      <nav className="navbar navbar-inverse navbar-static-top">
        <div className="container-fluid">
          <div className="navbar-header">
            <button type="button" className="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse" aria-expanded="false">
              <span className="sr-only">Toggle navigation</span>
              <span className="icon-bar"></span>
              <span className="icon-bar"></span>
              <span className="icon-bar"></span>
            </button>
            <NavBrand linkTo={this.props.brand.linkTo} text={this.props.brand.text} />
          </div>
          <div className="collapse navbar-collapse" id="navbar-collapse">
            <NavMenu links={this.props.links} />
          </div>
        </div>
      </nav>
    );
  }
});

var NavBrand = React.createClass({
  render: function(){
    return (
      <Link to={ this.props.linkTo }>
        <span className="navbar-brand">{this.props.text}</span>
      </Link>
    );
  }
});

var NavMenu = React.createClass({
  render: function(){
    var links = this.props.links.map(function(link){
      if(link.dropdown) {
        return (
          <NavLinkDropdown key={link.text} links={link.links} text={link.text} active={link.active} />
        );
      }
      else {
        return (
          <NavLink key={link.text} linkTo={link.linkTo} text={link.text} active={link.active} />
        );
      }
    });
    return (
      <ul className="nav navbar-nav">
        {links}
      </ul>
    );
  }
});

var NavLinkDropdown = React.createClass({
  render: function(){
    var active = false;
    var links = this.props.links.map(function(link){
      if(link.active){
        active = true;
      }
      return (

        <NavLink key={link.text} linkTo={link.linkTo} text={link.text} active={link.active} />

      );
    });
    return (
      <ul className="nav navbar-nav navbar-right">
      <li className={"dropdown" + (active ? "active" : "")}>
        <a href="#" className="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
          {this.props.text}
          <span className="caret"></span>
        </a>
        <ul className="dropdown-menu">
          {links}
        </ul>
      </li>
      </ul>

    );
  }
});

var NavLink = React.createClass({
  render: function(){
    return(
      <li className={(this.props.active ? "active" : "")}>
        {/*<a href={this.props.linkTo}>{this.props.text}</a>*/}
        <Link to={ this.props.linkTo }>
          <span className="NavLink">{this.props.text}</span>
        </Link>
      </li>
    );
  }
});

module.exports = NavBar;

目前,我的导航栏如下所示,

【问题讨论】:

  • 您是否希望订单保持不变,而品牌保持左对齐?还是您在寻找“从右到左”风格的解决方案?
  • 我正在尝试使用 ml-auto,但它对我不起作用。 stackoverflow.com/a/65562241/8287187 这帮助了我。长话短说,如果 ml-auto 不起作用,请使用 ms-auto。

标签: javascript reactjs twitter-bootstrap navbar react-bootstrap


【解决方案1】:

在 Bootstrap 5 中,您可以使用 ms-auto 而不是 ml-automr-auto

【讨论】:

    【解决方案2】:

    对于那些使用第 5 版引导程序的人,我们必须使用 ms-auto 而不是 ml-auto,因为已经迁移和更改了类名。

    .ml-* 和 .mr-* 到 .ms-* 和 .me-*

    【讨论】:

      【解决方案3】:

      这适用于我的版本 - 'v2.0.0-rc.0 (Bootstrap 5.1)'

      <Nav className='ms-auto'>
      

      完成,

      <Navbar.Collapse id='basic-navbar-nav'>
          <Nav className='ms-auto'>
              <Nav.Link href='/cart'>Cart</Nav.Link>
              <Nav.Link href='/login'>Sign In</Nav.Link>
          </Nav>
      </Navbar.Collapse>
      

      【讨论】:

        【解决方案4】:

        你可以这样做的另一种方法是:

        &lt;Nav className="ms-auto"&gt;

        很遗憾,添加“pullRight”不是解决方案,也不会起作用。

        【讨论】:

          【解决方案5】:

          如果你想让你的导航看起来像下面的屏幕截图所示:

          然后您需要在您希望右对齐的导航项上应用Nav 上的container-fluid 类和Nav.Item 上的ml-auto 类。

          下面是代码:

          <Navbar bg="dark" variant="dark">
            <Nav className="container-fluid">
              <Nav.Item>
                <Navbar.Brand as={Link} to="/">Demo App</Navbar.Brand>
              </Nav.Item>
              <Nav.Item>
                <Nav.Link as={Link} to="/user-list">User List</Nav.Link>
              </Nav.Item>
              <Nav.Item>
                <Nav.Link onClick={handleClickUserLogOut}>Log Out</Nav.Link>
              </Nav.Item>
              <Nav.Item className="ml-auto">
                <Nav.Link>Hi fname lname!</Nav.Link>
              </Nav.Item>
            </Nav>
          </Navbar>
          

          【讨论】:

          • 自 21 年 8 月 30 日起不再工作,复制粘贴准确代码后,所有项目都均匀分布在导航栏上。
          【解决方案6】:

          最好和最简单的方法是将以下类添加到 NAV 节点,如下所示:

          <Nav className="ml-auto">
          

          不幸的是,添加“pullRight”不是解决方案,也不会奏效。

          【讨论】:

          • 经过这么多尝试和黑客攻击,这个单班轮救了我。这行得通!
          • 非常感谢这一行代码!哈哈哈帮助解决了头痛
          • 它不起作用:(
          【解决方案7】:

          这个适合我

          <Navbar>
              <Navbar.Brand href="/">MyBrand</Navbar.Brand>
              <Navbar.Toggle />
              <Navbar.Collapse>
                  <Nav className="justify-content-end" style={{ width: "100%" }}>
                      ...
                  </Nav>
              </Navbar.Collapse>
          </Navbar>
          

          【讨论】:

            【解决方案8】:

            下面的代码解决了我的对齐问题。

            var NavMenu = React.createClass({
              render: function(){
                var links = this.props.links.reduce(function(acc, current){      
                  current.dropdown ? acc.rightNav.push(current) : acc.leftNav.push(current);
                  return acc;
                }, { leftNav: [], rightNav: [] });
                return (
                  <div>
                    <ul className="nav navbar-nav">
                      {links.leftNav.map( function(link) {
                        return <NavLink key={link.text} linkTo={link.linkTo} text={link.text} active={link.active} />
                      })}
                    </ul>
                    {
                      links.rightNav.length > 0 ?
                        <ul className="nav navbar-nav navbar-right">
                          {
                            links.rightNav.map( function(link) {
                              return <NavLinkDropdown key={link.text} links={link.links} text={link.text} active={link.active} />
                            })
                          }
                        </ul> : false
                    }
                  </div>
                );
              }
            });
            

            【讨论】:

              【解决方案9】:

              您可以使用dropdown-menu-right 定位下拉菜单,以使“贡献”导航项右对齐。 bootstrap dropdown alignment docs

              【讨论】:

              • 尝试将right 添加到dropdown-menu 从而使dropdown-menu-right 但不幸的是它没有将导航栏项目Contribute 拉到右侧。
              • 看起来标记可能有问题。您的下拉菜单是li 中的uldropdown-menu-right 类将下拉菜单与父级的下拉菜单对齐。除非 li 项目延伸到导航栏容器的末尾,否则贡献下拉菜单不会移动。
              • 我认为你在做某事。
              【解决方案10】:

              使用课程navbar-right 达到你想要的效果

              【讨论】:

                【解决方案11】:

                将 css 属性 float : left 分配给除法或任何您想右对齐的东西 :)

                【讨论】:

                  猜你喜欢
                  • 2022-01-03
                  • 2017-05-21
                  • 2017-06-11
                  • 2017-08-02
                  • 2020-04-18
                  • 1970-01-01
                  相关资源
                  最近更新 更多