React bootstrap Navbar: How to right align a navbar item

I'm trying to right align a navbar item (Contribute) within a navbar.js but I can't seem to figure it out. The navbar is a React component and looks like the following,

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" 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"> <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" 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;

Presently, my navbar looks like the following,

navbar

2

12 Answers

The best and easiest approach which works is to add following class to the NAV node like following:

<Nav className="ml-auto">

Unfortunately adding "pullRight" wasn't the solution and it won't work.

3

The other way you could do it is:

<Nav className="ms-auto">

Unfortunately adding "pullRight" wasn't the solution and it won't work.

This one works for me

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

If you want to make your navigation look something like as shown in below screen shot:enter image description here

Then you would need to apply the class container-fluid on Nav and class ml-auto on the Nav.Item on the navigation item which you wish to right align.

Below is the code:

<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>
1

For those with version 5 of bootstrap, we have to use ms-auto instead of ml-auto because there has been migration and changes in the class name.

.ml-* and .mr-* to .ms-* and .me-*

In Bootstrap 5 you can use use ms-auto instead of ml-auto or mr-auto

use the class navbar-right the reach what you want

This is working for me on version - 'v2.0.0-rc.0 (Bootstrap 5.1)'

<Nav className='ms-auto'>

complete,

<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>

The below code solved my issue of alignment.

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> ); }
});

Give css property float : left to the division or to whatever you want to align right :)

You can target the dropdown menu with a dropdown-menu-right to align the Contribute nav item right. bootstrap dropdown alignment docs

3

So far, I've discovered an easier way to do it from their official documentation, though it may be a little unconventional.

Here's the code

<Navbar collapseOnSelect expand="lg" bg="dark" variant="dark"> <Container> <Navbar.Brand href="#home">React-Bootstrap</Navbar.Brand> <Navbar.Toggle aria-controls="responsive-navbar-nav" /> <Navbar.Collapse>
{/*This totally empty navbar with the class 'me-auto' is significant. */} <Nav className="me-auto"> </Nav>
{/*It is responsible for the other nav bar content moving to the right.*/} <Nav> <Nav.Link href="#deets">More deets</Nav.Link> <Nav.Link eventKey={2} href="#memes"> Dank memes </Nav.Link> </Nav> </Navbar.Collapse> </Container>
</Navbar>

Sample of Code

The simple hack is to add an empty nav bar before your own nav bar content with the class me-auto, as shown below.

{/*This is the hack */} <Nav className="me-auto"> </Nav>
{/*Any nav bar created beneath this now aligns to the right.*/}

You can ask questions if you don't quite understand.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like