diff --git a/docs/examples/CollapsableNav.js b/docs/examples/CollapsableNav.js
new file mode 100644
index 0000000000..7211b1342d
--- /dev/null
+++ b/docs/examples/CollapsableNav.js
@@ -0,0 +1,23 @@
+var navbarInstance = (
+
+ {/* This is the eventKey referenced */}
+
+
+
+
+ );
+
+React.render(navbarInstance, mountNode);
diff --git a/docs/src/ComponentsPage.js b/docs/src/ComponentsPage.js
index 7a611b42c6..315f8a8019 100644
--- a/docs/src/ComponentsPage.js
+++ b/docs/src/ComponentsPage.js
@@ -357,6 +357,16 @@ var ComponentsPage = React.createClass({
+
+
Mobile Friendly (Multiple Nav Components)
+
To have a mobile friendly Navbar that handles multiple Nav components use CollapsableNav. The toggleNavKey must still be set, however, the corresponding eventKey must now be on the CollapsableNav component.
+
+
Div collapse
+
The navbar-collapse div gets created as the collapsable element which follows the bootstrap collapsable navbar documentation.
+
<div class="collapse navbar-collapse"></div>
+
+
+
{/* Tabbed Areas */}
diff --git a/docs/src/ReactPlayground.js b/docs/src/ReactPlayground.js
index 8a23add10d..b91c26ee63 100644
--- a/docs/src/ReactPlayground.js
+++ b/docs/src/ReactPlayground.js
@@ -9,6 +9,7 @@ var Button = require('../../lib/Button');
var ButtonGroup = require('../../lib/ButtonGroup');
var ButtonToolbar = require('../../lib/ButtonToolbar');
var CollapsableMixin = require('../../lib/CollapsableMixin');
+var CollapsableNav = require('../../lib/CollapsableNav');
var Carousel = require('../../lib/Carousel');
var CarouselItem = require('../../lib/CarouselItem');
var Col = require('../../lib/Col');
diff --git a/src/CollapsableNav.jsx b/src/CollapsableNav.jsx
new file mode 100644
index 0000000000..65e37931e7
--- /dev/null
+++ b/src/CollapsableNav.jsx
@@ -0,0 +1,110 @@
+var React = require('react');
+var joinClasses = require('./utils/joinClasses');
+var BootstrapMixin = require('./BootstrapMixin');
+var CollapsableMixin = require('./CollapsableMixin');
+var classSet = require('./utils/classSet');
+var domUtils = require('./utils/domUtils');
+var cloneWithProps = require('./utils/cloneWithProps');
+
+var ValidComponentChildren = require('./utils/ValidComponentChildren');
+var createChainedFunction = require('./utils/createChainedFunction');
+
+
+var CollapsableNav = React.createClass({
+ mixins: [BootstrapMixin, CollapsableMixin],
+
+ propTypes: {
+ onSelect: React.PropTypes.func,
+ expanded: React.PropTypes.bool,
+ eventKey: React.PropTypes.any
+ },
+
+ getCollapsableDOMNode: function () {
+ return this.getDOMNode();
+ },
+
+ getCollapsableDimensionValue: function () {
+ var height = 0;
+ var nodes = this.refs;
+ for (var key in nodes) {
+ if (nodes.hasOwnProperty(key)) {
+
+ var n = nodes[key].getDOMNode()
+ , h = n.offsetHeight
+ , computedStyles = domUtils.getComputedStyles(n);
+
+ height += (h + parseInt(computedStyles.marginTop, 10) + parseInt(computedStyles.marginBottom, 10));
+ }
+ }
+ return height;
+ },
+
+ render: function () {
+ /*
+ * this.props.collapsable is set in NavBar when a eventKey is supplied.
+ */
+ var classes = this.props.collapsable ? this.getCollapsableClassSet() : {};
+ /*
+ * prevent duplicating navbar-collapse call if passed as prop. kind of overkill... good cadidate to have check implemented as a util that can
+ * also be used elsewhere.
+ */
+ if (this.props.className == undefined || this.props.className.split(" ").indexOf('navbar-collapse') == -1)
+ classes['navbar-collapse'] = this.props.collapsable;
+
+ return (
+