1//
2// Navs
3// --------------------------------------------------
4
5
6// Base class
7// --------------------------------------------------
8
9.nav {
10  margin-bottom: 0;
11  padding-left: 0; // Override default ul/ol
12  list-style: none;
13  &:extend(.clearfix all);
14
15  > li {
16    position: relative;
17    display: block;
18
19    > a {
20      position: relative;
21      display: block;
22      padding: @nav-link-padding;
23      &:hover,
24      &:focus {
25        text-decoration: none;
26        background-color: @nav-link-hover-bg;
27      }
28    }
29
30    // Disabled state sets text to gray and nukes hover/tab effects
31    &.disabled > a {
32      color: @nav-disabled-link-color;
33
34      &:hover,
35      &:focus {
36        color: @nav-disabled-link-hover-color;
37        text-decoration: none;
38        background-color: transparent;
39        cursor: @cursor-disabled;
40      }
41    }
42  }
43
44  // Open dropdowns
45  .open > a {
46    &,
47    &:hover,
48    &:focus {
49      background-color: @nav-link-hover-bg;
50      border-color: @link-color;
51    }
52  }
53
54  // Nav dividers (deprecated with v3.0.1)
55  //
56  // This should have been removed in v3 with the dropping of `.nav-list`, but
57  // we missed it. We don't currently support this anywhere, but in the interest
58  // of maintaining backward compatibility in case you use it, it's deprecated.
59  .nav-divider {
60    .nav-divider();
61  }
62
63  // Prevent IE8 from misplacing imgs
64  //
65  // See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989
66  > li > a > img {
67    max-width: none;
68  }
69}
70
71
72// Tabs
73// -------------------------
74
75// Give the tabs something to sit on
76.nav-tabs {
77  border-bottom: 1px solid @nav-tabs-border-color;
78  > li {
79    float: left;
80    // Make the list-items overlay the bottom border
81    margin-bottom: -1px;
82
83    // Actual tabs (as links)
84    > a {
85      margin-right: 2px;
86      line-height: @line-height-base;
87      border: 1px solid transparent;
88      border-radius: @border-radius-base @border-radius-base 0 0;
89      &:hover {
90        border-color: @nav-tabs-link-hover-border-color @nav-tabs-link-hover-border-color @nav-tabs-border-color;
91      }
92    }
93
94    // Active state, and its :hover to override normal :hover
95    &.active > a {
96      &,
97      &:hover,
98      &:focus {
99        color: @nav-tabs-active-link-hover-color;
100        background-color: @nav-tabs-active-link-hover-bg;
101        border: 1px solid @nav-tabs-active-link-hover-border-color;
102        border-bottom-color: transparent;
103        cursor: default;
104      }
105    }
106  }
107  // pulling this in mainly for less shorthand
108  &.nav-justified {
109    .nav-justified();
110    .nav-tabs-justified();
111  }
112}
113
114
115// Pills
116// -------------------------
117.nav-pills {
118  > li {
119    float: left;
120
121    // Links rendered as pills
122    > a {
123      border-radius: @nav-pills-border-radius;
124    }
125    + li {
126      margin-left: 2px;
127    }
128
129    // Active state
130    &.active > a {
131      &,
132      &:hover,
133      &:focus {
134        color: @nav-pills-active-link-hover-color;
135        background-color: @nav-pills-active-link-hover-bg;
136      }
137    }
138  }
139}
140
141
142// Stacked pills
143.nav-stacked {
144  > li {
145    float: none;
146    + li {
147      margin-top: 2px;
148      margin-left: 0; // no need for this gap between nav items
149    }
150  }
151}
152
153
154// Nav variations
155// --------------------------------------------------
156
157// Justified nav links
158// -------------------------
159
160.nav-justified {
161  width: 100%;
162
163  > li {
164    float: none;
165    > a {
166      text-align: center;
167      margin-bottom: 5px;
168    }
169  }
170
171  > .dropdown .dropdown-menu {
172    top: auto;
173    left: auto;
174  }
175
176  @media (min-width: @screen-sm-min) {
177    > li {
178      display: table-cell;
179      width: 1%;
180      > a {
181        margin-bottom: 0;
182      }
183    }
184  }
185}
186
187// Move borders to anchors instead of bottom of list
188//
189// Mixin for adding on top the shared `.nav-justified` styles for our tabs
190.nav-tabs-justified {
191  border-bottom: 0;
192
193  > li > a {
194    // Override margin from .nav-tabs
195    margin-right: 0;
196    border-radius: @border-radius-base;
197  }
198
199  > .active > a,
200  > .active > a:hover,
201  > .active > a:focus {
202    border: 1px solid @nav-tabs-justified-link-border-color;
203  }
204
205  @media (min-width: @screen-sm-min) {
206    > li > a {
207      border-bottom: 1px solid @nav-tabs-justified-link-border-color;
208      border-radius: @border-radius-base @border-radius-base 0 0;
209    }
210    > .active > a,
211    > .active > a:hover,
212    > .active > a:focus {
213      border-bottom-color: @nav-tabs-justified-active-link-border-color;
214    }
215  }
216}
217
218
219// Tabbable tabs
220// -------------------------
221
222// Hide tabbable panes to start, show them when `.active`
223.tab-content {
224  > .tab-pane {
225    display: none;
226  }
227  > .active {
228    display: block;
229  }
230}
231
232
233// Dropdowns
234// -------------------------
235
236// Specific dropdowns
237.nav-tabs .dropdown-menu {
238  // make dropdown border overlap tab border
239  margin-top: -1px;
240  // Remove the top rounded corners here since there is a hard edge above the menu
241  .border-top-radius(0);
242}
243