| // | |
| // Navbars | |
| // -------------------------------------------------- | |
| // Wrapper and base class | |
| // | |
| // Provide a static navbar from which we expand to create full-width, fixed, and | |
| // other navbar variations. | |
| .navbar { | |
| position: relative; | |
| min-height: $navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) | |
| margin-bottom: $navbar-margin-bottom; | |
| border: 1px solid transparent; | |
| // Prevent floats from breaking the navbar | |
| @include clearfix; | |
| @media (min-width: $grid-float-breakpoint) { | |
| border-radius: $navbar-border-radius; | |
| } | |
| } | |
| // Navbar heading | |
| // | |
| // Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy | |
| // styling of responsive aspects. | |
| .navbar-header { | |
| @include clearfix; | |
| @media (min-width: $grid-float-breakpoint) { | |
| float: left; | |
| } | |
| } | |
| // Navbar collapse (body) | |
| // | |
| // Group your navbar content into this for easy collapsing and expanding across | |
| // various device sizes. By default, this content is collapsed when <768px, but | |
| // will expand past that for a horizontal display. | |
| // | |
| // To start (on mobile devices) the navbar links, forms, and buttons are stacked | |
| // vertically and include a `max-height` to overflow in case you have too much | |
| // content for the user's viewport. | |
| .navbar-collapse { | |
| overflow-x: visible; | |
| padding-right: $navbar-padding-horizontal; | |
| padding-left: $navbar-padding-horizontal; | |
| border-top: 1px solid transparent; | |
| box-shadow: inset 0 1px 0 rgba(255,255,255,.1); | |
| @include clearfix; | |
| -webkit-overflow-scrolling: touch; | |
| &.in { | |
| overflow-y: auto; | |
| } | |
| @media (min-width: $grid-float-breakpoint) { | |
| width: auto; | |
| border-top: 0; | |
| box-shadow: none; | |
| &.collapse { | |
| display: block !important; | |
| height: auto !important; | |
| padding-bottom: 0; // Override default setting | |
| overflow: visible !important; | |
| } | |
| &.in { | |
| overflow-y: visible; | |
| } | |
| // Undo the collapse side padding for navbars with containers to ensure | |
| // alignment of right-aligned contents. | |
| .navbar-fixed-top &, | |
| .navbar-static-top &, | |
| .navbar-fixed-bottom & { | |
| padding-left: 0; | |
| padding-right: 0; | |
| } | |
| } | |
| } | |
| .navbar-fixed-top, | |
| .navbar-fixed-bottom { | |
| .navbar-collapse { | |
| max-height: $navbar-collapse-max-height; | |
| @media (max-device-width: $screen-xs-min) and (orientation: landscape) { | |
| max-height: 200px; | |
| } | |
| } | |
| } | |
| // Both navbar header and collapse | |
| // | |
| // When a container is present, change the behavior of the header and collapse. | |
| .container, | |
| .container-fluid { | |
| > .navbar-header, | |
| > .navbar-collapse { | |
| margin-right: -$navbar-padding-horizontal; | |
| margin-left: -$navbar-padding-horizontal; | |
| @media (min-width: $grid-float-breakpoint) { | |
| margin-right: 0; | |
| margin-left: 0; | |
| } | |
| } | |
| } | |
| // | |
| // Navbar alignment options | |
| // | |
| // Display the navbar across the entirety of the page or fixed it to the top or | |
| // bottom of the page. | |
| // Static top (unfixed, but 100% wide) navbar | |
| .navbar-static-top { | |
| z-index: $zindex-navbar; | |
| border-width: 0 0 1px; | |
| @media (min-width: $grid-float-breakpoint) { | |
| border-radius: 0; | |
| } | |
| } | |
| // Fix the top/bottom navbars when screen real estate supports it | |
| .navbar-fixed-top, | |
| .navbar-fixed-bottom { | |
| position: fixed; | |
| right: 0; | |
| left: 0; | |
| z-index: $zindex-navbar-fixed; | |
| // Undo the rounded corners | |
| @media (min-width: $grid-float-breakpoint) { | |
| border-radius: 0; | |
| } | |
| } | |
| .navbar-fixed-top { | |
| top: 0; | |
| border-width: 0 0 1px; | |
| } | |
| .navbar-fixed-bottom { | |
| bottom: 0; | |
| margin-bottom: 0; // override .navbar defaults | |
| border-width: 1px 0 0; | |
| } | |
| // Brand/project name | |
| .navbar-brand { | |
| float: left; | |
| padding: $navbar-padding-vertical $navbar-padding-horizontal; | |
| font-size: $font-size-large; | |
| line-height: $line-height-computed; | |
| height: $navbar-height; | |
| &:hover, | |
| &:focus { | |
| text-decoration: none; | |
| } | |
| > img { | |
| display: block; | |
| } | |
| @media (min-width: $grid-float-breakpoint) { | |
| .navbar > .container &, | |
| .navbar > .container-fluid & { | |
| margin-left: -$navbar-padding-horizontal; | |
| } | |
| } | |
| } | |
| // Navbar toggle | |
| // | |
| // Custom button for toggling the `.navbar-collapse`, powered by the collapse | |
| // JavaScript plugin. | |
| .navbar-toggle { | |
| position: relative; | |
| float: right; | |
| margin-right: $navbar-padding-horizontal; | |
| padding: 9px 10px; | |
| @include navbar-vertical-align(34px); | |
| background-color: transparent; | |
| background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214 | |
| border: 1px solid transparent; | |
| border-radius: $border-radius-base; | |
| // We remove the `outline` here, but later compensate by attaching `:hover` | |
| // styles to `:focus`. | |
| &:focus { | |
| outline: 0; | |
| } | |
| // Bars | |
| .icon-bar { | |
| display: block; | |
| width: 20px; | |
| height: 2px; | |
| border-radius: 1px; | |
| } | |
| .icon-bar + .icon-bar { | |
| margin-top: 4px; | |
| } | |
| @media (min-width: $grid-float-breakpoint) { | |
| display: none; | |
| } | |
| } | |
| // Navbar nav links | |
| // | |
| // Builds on top of the `.nav` components with its own modifier class to make | |
| // the nav the full height of the horizontal nav (above 768px). | |
| .navbar-nav { | |
| margin: ($navbar-padding-vertical / 2) (-$navbar-padding-horizontal); | |
| > li > a { | |
| padding-top: 10px; | |
| padding-bottom: 10px; | |
| line-height: $line-height-computed; | |
| } | |
| @media (max-width: $grid-float-breakpoint-max) { | |
| // Dropdowns get custom display when collapsed | |
| .open .dropdown-menu { | |
| position: static; | |
| float: none; | |
| width: auto; | |
| margin-top: 0; | |
| background-color: transparent; | |
| border: 0; | |
| box-shadow: none; | |
| > li > a, | |
| .dropdown-header { | |
| padding: 5px 15px 5px 25px; | |
| } | |
| > li > a { | |
| line-height: $line-height-computed; | |
| &:hover, | |
| &:focus { | |
| background-image: none; | |
| } | |
| } | |
| } | |
| } | |
| // Uncollapse the nav | |
| @media (min-width: $grid-float-breakpoint) { | |
| float: left; | |
| margin: 0; | |
| > li { | |
| float: left; | |
| > a { | |
| padding-top: $navbar-padding-vertical; | |
| padding-bottom: $navbar-padding-vertical; | |
| } | |
| } | |
| } | |
| } | |
| // Navbar form | |
| // | |
| // Extension of the `.form-inline` with some extra flavor for optimum display in | |
| // our navbars. | |
| .navbar-form { | |
| margin-left: -$navbar-padding-horizontal; | |
| margin-right: -$navbar-padding-horizontal; | |
| padding: 10px $navbar-padding-horizontal; | |
| border-top: 1px solid transparent; | |
| border-bottom: 1px solid transparent; | |
| $shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1); | |
| @include box-shadow($shadow); | |
| // Mixin behavior for optimum display | |
| @include form-inline; | |
| .form-group { | |
| @media (max-width: $grid-float-breakpoint-max) { | |
| margin-bottom: 5px; | |
| &:last-child { | |
| margin-bottom: 0; | |
| } | |
| } | |
| } | |
| // Vertically center in expanded, horizontal navbar | |
| @include navbar-vertical-align($input-height-base); | |
| // Undo 100% width for pull classes | |
| @media (min-width: $grid-float-breakpoint) { | |
| width: auto; | |
| border: 0; | |
| margin-left: 0; | |
| margin-right: 0; | |
| padding-top: 0; | |
| padding-bottom: 0; | |
| @include box-shadow(none); | |
| } | |
| } | |
| // Dropdown menus | |
| // Menu position and menu carets | |
| .navbar-nav > li > .dropdown-menu { | |
| margin-top: 0; | |
| @include border-top-radius(0); | |
| } | |
| // Menu position and menu caret support for dropups via extra dropup class | |
| .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { | |
| margin-bottom: 0; | |
| @include border-top-radius($navbar-border-radius); | |
| @include border-bottom-radius(0); | |
| } | |
| // Buttons in navbars | |
| // | |
| // Vertically center a button within a navbar (when *not* in a form). | |
| .navbar-btn { | |
| @include navbar-vertical-align($input-height-base); | |
| &.btn-sm { | |
| @include navbar-vertical-align($input-height-small); | |
| } | |
| &.btn-xs { | |
| @include navbar-vertical-align(22); | |
| } | |
| } | |
| // Text in navbars | |
| // | |
| // Add a class to make any element properly align itself vertically within the navbars. | |
| .navbar-text { | |
| @include navbar-vertical-align($line-height-computed); | |
| @media (min-width: $grid-float-breakpoint) { | |
| float: left; | |
| margin-left: $navbar-padding-horizontal; | |
| margin-right: $navbar-padding-horizontal; | |
| } | |
| } | |
| // Component alignment | |
| // | |
| // Repurpose the pull utilities as their own navbar utilities to avoid specificity | |
| // issues with parents and chaining. Only do this when the navbar is uncollapsed | |
| // though so that navbar contents properly stack and align in mobile. | |
| // | |
| // Declared after the navbar components to ensure more specificity on the margins. | |
| @media (min-width: $grid-float-breakpoint) { | |
| .navbar-left { | |
| float: left !important; | |
| } | |
| .navbar-right { | |
| float: right !important; | |
| margin-right: -$navbar-padding-horizontal; | |
| ~ .navbar-right { | |
| margin-right: 0; | |
| } | |
| } | |
| } | |
| // Alternate navbars | |
| // -------------------------------------------------- | |
| // Default navbar | |
| .navbar-default { | |
| background-color: $navbar-default-bg; | |
| border-color: $navbar-default-border; | |
| .navbar-brand { | |
| color: $navbar-default-brand-color; | |
| &:hover, | |
| &:focus { | |
| color: $navbar-default-brand-hover-color; | |
| background-color: $navbar-default-brand-hover-bg; | |
| } | |
| } | |
| .navbar-text { | |
| color: $navbar-default-color; | |
| } | |
| .navbar-nav { | |
| > li > a { | |
| color: $navbar-default-link-color; | |
| &:hover, | |
| &:focus { | |
| color: $navbar-default-link-hover-color; | |
| background-color: $navbar-default-link-hover-bg; | |
| } | |
| } | |
| > .active > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| color: $navbar-default-link-active-color; | |
| background-color: $navbar-default-link-active-bg; | |
| } | |
| } | |
| > .disabled > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| color: $navbar-default-link-disabled-color; | |
| background-color: $navbar-default-link-disabled-bg; | |
| } | |
| } | |
| } | |
| .navbar-toggle { | |
| border-color: $navbar-default-toggle-border-color; | |
| &:hover, | |
| &:focus { | |
| background-color: $navbar-default-toggle-hover-bg; | |
| } | |
| .icon-bar { | |
| background-color: $navbar-default-toggle-icon-bar-bg; | |
| } | |
| } | |
| .navbar-collapse, | |
| .navbar-form { | |
| border-color: $navbar-default-border; | |
| } | |
| // Dropdown menu items | |
| .navbar-nav { | |
| // Remove background color from open dropdown | |
| > .open > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| background-color: $navbar-default-link-active-bg; | |
| color: $navbar-default-link-active-color; | |
| } | |
| } | |
| @media (max-width: $grid-float-breakpoint-max) { | |
| // Dropdowns get custom display when collapsed | |
| .open .dropdown-menu { | |
| > li > a { | |
| color: $navbar-default-link-color; | |
| &:hover, | |
| &:focus { | |
| color: $navbar-default-link-hover-color; | |
| background-color: $navbar-default-link-hover-bg; | |
| } | |
| } | |
| > .active > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| color: $navbar-default-link-active-color; | |
| background-color: $navbar-default-link-active-bg; | |
| } | |
| } | |
| > .disabled > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| color: $navbar-default-link-disabled-color; | |
| background-color: $navbar-default-link-disabled-bg; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| // Links in navbars | |
| // | |
| // Add a class to ensure links outside the navbar nav are colored correctly. | |
| .navbar-link { | |
| color: $navbar-default-link-color; | |
| &:hover { | |
| color: $navbar-default-link-hover-color; | |
| } | |
| } | |
| .btn-link { | |
| color: $navbar-default-link-color; | |
| &:hover, | |
| &:focus { | |
| color: $navbar-default-link-hover-color; | |
| } | |
| &[disabled], | |
| fieldset[disabled] & { | |
| &:hover, | |
| &:focus { | |
| color: $navbar-default-link-disabled-color; | |
| } | |
| } | |
| } | |
| } | |
| // Inverse navbar | |
| .navbar-inverse { | |
| background-color: $navbar-inverse-bg; | |
| border-color: $navbar-inverse-border; | |
| .navbar-brand { | |
| color: $navbar-inverse-brand-color; | |
| &:hover, | |
| &:focus { | |
| color: $navbar-inverse-brand-hover-color; | |
| background-color: $navbar-inverse-brand-hover-bg; | |
| } | |
| } | |
| .navbar-text { | |
| color: $navbar-inverse-color; | |
| } | |
| .navbar-nav { | |
| > li > a { | |
| color: $navbar-inverse-link-color; | |
| &:hover, | |
| &:focus { | |
| color: $navbar-inverse-link-hover-color; | |
| background-color: $navbar-inverse-link-hover-bg; | |
| } | |
| } | |
| > .active > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| color: $navbar-inverse-link-active-color; | |
| background-color: $navbar-inverse-link-active-bg; | |
| } | |
| } | |
| > .disabled > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| color: $navbar-inverse-link-disabled-color; | |
| background-color: $navbar-inverse-link-disabled-bg; | |
| } | |
| } | |
| } | |
| // Darken the responsive nav toggle | |
| .navbar-toggle { | |
| border-color: $navbar-inverse-toggle-border-color; | |
| &:hover, | |
| &:focus { | |
| background-color: $navbar-inverse-toggle-hover-bg; | |
| } | |
| .icon-bar { | |
| background-color: $navbar-inverse-toggle-icon-bar-bg; | |
| } | |
| } | |
| .navbar-collapse, | |
| .navbar-form { | |
| border-color: darken($navbar-inverse-bg, 7%); | |
| } | |
| // Dropdowns | |
| .navbar-nav { | |
| > .open > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| background-color: $navbar-inverse-link-active-bg; | |
| color: $navbar-inverse-link-active-color; | |
| } | |
| } | |
| @media (max-width: $grid-float-breakpoint-max) { | |
| // Dropdowns get custom display | |
| .open .dropdown-menu { | |
| > .dropdown-header { | |
| border-color: $navbar-inverse-border; | |
| } | |
| .divider { | |
| background-color: $navbar-inverse-border; | |
| } | |
| > li > a { | |
| color: $navbar-inverse-link-color; | |
| &:hover, | |
| &:focus { | |
| color: $navbar-inverse-link-hover-color; | |
| background-color: $navbar-inverse-link-hover-bg; | |
| } | |
| } | |
| > .active > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| color: $navbar-inverse-link-active-color; | |
| background-color: $navbar-inverse-link-active-bg; | |
| } | |
| } | |
| > .disabled > a { | |
| &, | |
| &:hover, | |
| &:focus { | |
| color: $navbar-inverse-link-disabled-color; | |
| background-color: $navbar-inverse-link-disabled-bg; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| .navbar-link { | |
| color: $navbar-inverse-link-color; | |
| &:hover { | |
| color: $navbar-inverse-link-hover-color; | |
| } | |
| } | |
| .btn-link { | |
| color: $navbar-inverse-link-color; | |
| &:hover, | |
| &:focus { | |
| color: $navbar-inverse-link-hover-color; | |
| } | |
| &[disabled], | |
| fieldset[disabled] & { | |
| &:hover, | |
| &:focus { | |
| color: $navbar-inverse-link-disabled-color; | |
| } | |
| } | |
| } | |
| } |