2017-02-18 4 views
0

Я пытаюсь выровнять элемент navbar (Contribute) в пределах navbar.js, но я не могу понять это. Navbar является Реагировать компонент и выглядит следующим образом,Как правильно выровнять элемент navbar в twitter bootstrap navbar, используя реакцию

navbar.jshere

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; 

В настоящее время мой Navbar выглядит следующим образом,

navbar

+0

Вы ожидаете, что приказ останется таким же, и бренд останется на месте? или вы ищете решение стиля «справа налево»? – haxxxton

ответ

0

В приведенном ниже коде была решена проблема выравнивания.

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

Дают Css недвижимость float : left к разделу или к тому, что вы хотите выровнять по правому краю :)

1

использовать класс navbar-right досягаемость, что вы хотите

0

Вы можете настроить выпадающее меню с помощью dropdown-menu-right, чтобы выровнять позицию Contribute nav. bootstrap dropdown alignment docs

+0

попытался добавить 'right' в' dropdown-menu', что сделало 'dropdown-menu-right', но, к сожалению, он не потянул элемент navbar' Contribute'. – Chris

+0

Похоже, что разметка может быть проблемой. Выпадающее меню - 'ul' в' li'. Класс 'dropdown-menu-right' будет выравнивать прямо в раскрывающемся меню с родительским. Если этот элемент 'li' не будет растянут до конца контейнера навигатора, раскрывающийся список вкладов не будет перемещаться. – xarthnax

+0

Я думаю, что ты на что-то. – Chris