navbar.less 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621
  1. //
  2. // Navbars
  3. // --------------------------------------------------
  4. // Wrapper and base class
  5. //
  6. // Provide a static navbar from which we expand to create full-width, fixed, and
  7. // other navbar variations.
  8. .navbar {
  9. position: relative;
  10. z-index: @zindex-navbar;
  11. min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode)
  12. margin-bottom: @navbar-margin-bottom;
  13. border: 1px solid transparent;
  14. // Prevent floats from breaking the navbar
  15. .clearfix();
  16. @media (min-width: @grid-float-breakpoint) {
  17. border-radius: @navbar-border-radius;
  18. }
  19. }
  20. // Navbar heading
  21. //
  22. // Groups `.navbar-brand` and `.navbar-toggle` into a single component for easy
  23. // styling of responsive aspects.
  24. .navbar-header {
  25. .clearfix();
  26. @media (min-width: @grid-float-breakpoint) {
  27. float: left;
  28. }
  29. }
  30. // Navbar collapse (body)
  31. //
  32. // Group your navbar content into this for easy collapsing and expanding across
  33. // various device sizes. By default, this content is collapsed when <768px, but
  34. // will expand past that for a horizontal display.
  35. //
  36. // To start (on mobile devices) the navbar links, forms, and buttons are stacked
  37. // vertically and include a `max-height` to overflow in case you have too much
  38. // content for the user's viewport.
  39. .navbar-collapse {
  40. max-height: 340px;
  41. overflow-x: visible;
  42. padding-right: @navbar-padding-horizontal;
  43. padding-left: @navbar-padding-horizontal;
  44. border-top: 1px solid transparent;
  45. box-shadow: inset 0 1px 0 rgba(255,255,255,.1);
  46. .clearfix();
  47. -webkit-overflow-scrolling: touch;
  48. &.in {
  49. overflow-y: auto;
  50. }
  51. @media (min-width: @grid-float-breakpoint) {
  52. width: auto;
  53. border-top: 0;
  54. box-shadow: none;
  55. &.collapse {
  56. display: block !important;
  57. height: auto !important;
  58. padding-bottom: 0; // Override default setting
  59. overflow: visible !important;
  60. }
  61. &.in {
  62. overflow-y: visible;
  63. }
  64. // Account for first and last children spacing
  65. .navbar-nav.navbar-left:first-child {
  66. margin-left: -@navbar-padding-horizontal;
  67. }
  68. .navbar-nav.navbar-right:last-child {
  69. margin-right: -@navbar-padding-horizontal;
  70. }
  71. .navbar-text:last-child {
  72. margin-right: 0;
  73. }
  74. }
  75. }
  76. // Both navbar header and collapse
  77. //
  78. // When a container is present, change the behavior of the header and collapse.
  79. .container > .navbar-header,
  80. .container > .navbar-collapse {
  81. margin-right: -@navbar-padding-horizontal;
  82. margin-left: -@navbar-padding-horizontal;
  83. @media (min-width: @grid-float-breakpoint) {
  84. margin-right: 0;
  85. margin-left: 0;
  86. }
  87. }
  88. //
  89. // Navbar alignment options
  90. //
  91. // Display the navbar across the entirity of the page or fixed it to the top or
  92. // bottom of the page.
  93. // Static top (unfixed, but 100% wide) navbar
  94. .navbar-static-top {
  95. border-width: 0 0 1px;
  96. @media (min-width: @grid-float-breakpoint) {
  97. border-radius: 0;
  98. }
  99. }
  100. // Fix the top/bottom navbars when screen real estate supports it
  101. .navbar-fixed-top,
  102. .navbar-fixed-bottom {
  103. position: fixed;
  104. right: 0;
  105. left: 0;
  106. border-width: 0 0 1px;
  107. // Undo the rounded corners
  108. @media (min-width: @grid-float-breakpoint) {
  109. border-radius: 0;
  110. }
  111. }
  112. .navbar-fixed-top {
  113. z-index: @zindex-navbar-fixed;
  114. top: 0;
  115. }
  116. .navbar-fixed-bottom {
  117. bottom: 0;
  118. margin-bottom: 0; // override .navbar defaults
  119. }
  120. // Brand/project name
  121. .navbar-brand {
  122. float: left;
  123. padding: @navbar-padding-vertical @navbar-padding-horizontal;
  124. font-size: @font-size-large;
  125. line-height: @line-height-computed;
  126. &:hover,
  127. &:focus {
  128. text-decoration: none;
  129. }
  130. @media (min-width: @grid-float-breakpoint) {
  131. .navbar > .container & {
  132. margin-left: -@navbar-padding-horizontal;
  133. }
  134. }
  135. }
  136. // Navbar toggle
  137. //
  138. // Custom button for toggling the `.navbar-collapse`, powered by the collapse
  139. // JavaScript plugin.
  140. .navbar-toggle {
  141. position: relative;
  142. float: right;
  143. margin-right: @navbar-padding-horizontal;
  144. padding: 9px 10px;
  145. .navbar-vertical-align(34px);
  146. background-color: transparent;
  147. border: 1px solid transparent;
  148. border-radius: @border-radius-base;
  149. // Bars
  150. .icon-bar {
  151. display: block;
  152. width: 22px;
  153. height: 2px;
  154. border-radius: 1px;
  155. }
  156. .icon-bar + .icon-bar {
  157. margin-top: 4px;
  158. }
  159. @media (min-width: @grid-float-breakpoint) {
  160. display: none;
  161. }
  162. }
  163. // Navbar nav links
  164. //
  165. // Builds on top of the `.nav` components with it's own modifier class to make
  166. // the nav the full height of the horizontal nav (above 768px).
  167. .navbar-nav {
  168. margin: (@navbar-padding-vertical / 2) -@navbar-padding-horizontal;
  169. > li > a {
  170. padding-top: 10px;
  171. padding-bottom: 10px;
  172. line-height: @line-height-computed;
  173. }
  174. @media (max-width: @screen-xs-max) {
  175. // Dropdowns get custom display when collapsed
  176. .open .dropdown-menu {
  177. position: static;
  178. float: none;
  179. width: auto;
  180. margin-top: 0;
  181. background-color: transparent;
  182. border: 0;
  183. box-shadow: none;
  184. > li > a,
  185. .dropdown-header {
  186. padding: 5px 15px 5px 25px;
  187. }
  188. > li > a {
  189. line-height: @line-height-computed;
  190. &:hover,
  191. &:focus {
  192. background-image: none;
  193. }
  194. }
  195. }
  196. }
  197. // Uncollapse the nav
  198. @media (min-width: @grid-float-breakpoint) {
  199. float: left;
  200. margin: 0;
  201. > li {
  202. float: left;
  203. > a {
  204. padding-top: ((@navbar-height - @line-height-computed) / 2);
  205. padding-bottom: ((@navbar-height - @line-height-computed) / 2);
  206. }
  207. }
  208. }
  209. }
  210. // Component alignment
  211. //
  212. // Repurpose the pull utilities as their own navbar utilities to avoid specifity
  213. // issues with parents and chaining. Only do this when the navbar is uncollapsed
  214. // though so that navbar contents properly stack and align in mobile.
  215. @media (min-width: @grid-float-breakpoint) {
  216. .navbar-left { .pull-left(); }
  217. .navbar-right { .pull-right(); }
  218. }
  219. // Navbar form
  220. //
  221. // Extension of the `.form-inline` with some extra flavor for optimum display in
  222. // our navbars.
  223. .navbar-form {
  224. margin-left: -@navbar-padding-horizontal;
  225. margin-right: -@navbar-padding-horizontal;
  226. padding: 10px @navbar-padding-horizontal;
  227. border-top: 1px solid transparent;
  228. border-bottom: 1px solid transparent;
  229. @shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1);
  230. .box-shadow(@shadow);
  231. // Mixin behavior for optimum display
  232. .form-inline();
  233. .form-group {
  234. @media (max-width: @screen-xs-max) {
  235. margin-bottom: 5px;
  236. }
  237. }
  238. // Vertically center in expanded, horizontal navbar
  239. .navbar-vertical-align(@input-height-base);
  240. // Undo 100% width for pull classes
  241. @media (min-width: @grid-float-breakpoint) {
  242. width: auto;
  243. border: 0;
  244. margin-left: 0;
  245. margin-right: 0;
  246. padding-top: 0;
  247. padding-bottom: 0;
  248. .box-shadow(none);
  249. }
  250. }
  251. // Dropdown menus
  252. // Menu position and menu carets
  253. .navbar-nav > li > .dropdown-menu {
  254. margin-top: 0;
  255. .border-top-radius(0);
  256. }
  257. // Menu position and menu caret support for dropups via extra dropup class
  258. .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {
  259. .border-bottom-radius(0);
  260. }
  261. // Right aligned menus need alt position
  262. .navbar-nav.pull-right > li > .dropdown-menu,
  263. .navbar-nav > li > .dropdown-menu.pull-right {
  264. left: auto;
  265. right: 0;
  266. }
  267. // Buttons in navbars
  268. //
  269. // Vertically center a button within a navbar (when *not* in a form).
  270. .navbar-btn {
  271. .navbar-vertical-align(@input-height-base);
  272. }
  273. // Text in navbars
  274. //
  275. // Add a class to make any element properly align itself vertically within the navbars.
  276. .navbar-text {
  277. float: left;
  278. .navbar-vertical-align(@line-height-computed);
  279. @media (min-width: @grid-float-breakpoint) {
  280. margin-left: @navbar-padding-horizontal;
  281. margin-right: @navbar-padding-horizontal;
  282. }
  283. }
  284. // Alternate navbars
  285. // --------------------------------------------------
  286. // Default navbar
  287. .navbar-default {
  288. background-color: @navbar-default-bg;
  289. border-color: @navbar-default-border;
  290. .navbar-brand {
  291. color: @navbar-default-brand-color;
  292. &:hover,
  293. &:focus {
  294. color: @navbar-default-brand-hover-color;
  295. background-color: @navbar-default-brand-hover-bg;
  296. }
  297. }
  298. .navbar-text {
  299. color: @navbar-default-color;
  300. }
  301. .navbar-nav {
  302. > li > a {
  303. color: @navbar-default-link-color;
  304. &:hover,
  305. &:focus {
  306. color: @navbar-default-link-hover-color;
  307. background-color: @navbar-default-link-hover-bg;
  308. }
  309. }
  310. > .active > a {
  311. &,
  312. &:hover,
  313. &:focus {
  314. color: @navbar-default-link-active-color;
  315. background-color: @navbar-default-link-active-bg;
  316. }
  317. }
  318. > .disabled > a {
  319. &,
  320. &:hover,
  321. &:focus {
  322. color: @navbar-default-link-disabled-color;
  323. background-color: @navbar-default-link-disabled-bg;
  324. }
  325. }
  326. }
  327. .navbar-toggle {
  328. border-color: @navbar-default-toggle-border-color;
  329. &:hover,
  330. &:focus {
  331. background-color: @navbar-default-toggle-hover-bg;
  332. }
  333. .icon-bar {
  334. background-color: @navbar-default-toggle-icon-bar-bg;
  335. }
  336. }
  337. .navbar-collapse,
  338. .navbar-form {
  339. border-color: darken(@navbar-default-bg, 7%);
  340. }
  341. // Dropdown menu items and carets
  342. .navbar-nav {
  343. // Caret should match text color on hover
  344. > .dropdown > a:hover .caret,
  345. > .dropdown > a:focus .caret {
  346. border-top-color: @navbar-default-link-hover-color;
  347. border-bottom-color: @navbar-default-link-hover-color;
  348. }
  349. // Remove background color from open dropdown
  350. > .open > a {
  351. &,
  352. &:hover,
  353. &:focus {
  354. background-color: @navbar-default-link-active-bg;
  355. color: @navbar-default-link-active-color;
  356. .caret {
  357. border-top-color: @navbar-default-link-active-color;
  358. border-bottom-color: @navbar-default-link-active-color;
  359. }
  360. }
  361. }
  362. > .dropdown > a .caret {
  363. border-top-color: @navbar-default-link-color;
  364. border-bottom-color: @navbar-default-link-color;
  365. }
  366. @media (max-width: @screen-xs-max) {
  367. // Dropdowns get custom display when collapsed
  368. .open .dropdown-menu {
  369. > li > a {
  370. color: @navbar-default-link-color;
  371. &:hover,
  372. &:focus {
  373. color: @navbar-default-link-hover-color;
  374. background-color: @navbar-default-link-hover-bg;
  375. }
  376. }
  377. > .active > a {
  378. &,
  379. &:hover,
  380. &:focus {
  381. color: @navbar-default-link-active-color;
  382. background-color: @navbar-default-link-active-bg;
  383. }
  384. }
  385. > .disabled > a {
  386. &,
  387. &:hover,
  388. &:focus {
  389. color: @navbar-default-link-disabled-color;
  390. background-color: @navbar-default-link-disabled-bg;
  391. }
  392. }
  393. }
  394. }
  395. }
  396. // Links in navbars
  397. //
  398. // Add a class to ensure links outside the navbar nav are colored correctly.
  399. .navbar-link {
  400. color: @navbar-default-link-color;
  401. &:hover {
  402. color: @navbar-default-link-hover-color;
  403. }
  404. }
  405. }
  406. // Inverse navbar
  407. .navbar-inverse {
  408. background-color: @navbar-inverse-bg;
  409. border-color: @navbar-inverse-border;
  410. .navbar-brand {
  411. color: @navbar-inverse-brand-color;
  412. &:hover,
  413. &:focus {
  414. color: @navbar-inverse-brand-hover-color;
  415. background-color: @navbar-inverse-brand-hover-bg;
  416. }
  417. }
  418. .navbar-text {
  419. color: @navbar-inverse-color;
  420. }
  421. .navbar-nav {
  422. > li > a {
  423. color: @navbar-inverse-link-color;
  424. &:hover,
  425. &:focus {
  426. color: @navbar-inverse-link-hover-color;
  427. background-color: @navbar-inverse-link-hover-bg;
  428. }
  429. }
  430. > .active > a {
  431. &,
  432. &:hover,
  433. &:focus {
  434. color: @navbar-inverse-link-active-color;
  435. background-color: @navbar-inverse-link-active-bg;
  436. }
  437. }
  438. > .disabled > a {
  439. &,
  440. &:hover,
  441. &:focus {
  442. color: @navbar-inverse-link-disabled-color;
  443. background-color: @navbar-inverse-link-disabled-bg;
  444. }
  445. }
  446. }
  447. // Darken the responsive nav toggle
  448. .navbar-toggle {
  449. border-color: @navbar-inverse-toggle-border-color;
  450. &:hover,
  451. &:focus {
  452. background-color: @navbar-inverse-toggle-hover-bg;
  453. }
  454. .icon-bar {
  455. background-color: @navbar-inverse-toggle-icon-bar-bg;
  456. }
  457. }
  458. .navbar-collapse,
  459. .navbar-form {
  460. border-color: darken(@navbar-inverse-bg, 7%);
  461. }
  462. // Dropdowns
  463. .navbar-nav {
  464. > .open > a {
  465. &,
  466. &:hover,
  467. &:focus {
  468. background-color: @navbar-inverse-link-active-bg;
  469. color: @navbar-inverse-link-active-color;
  470. }
  471. }
  472. > .dropdown > a:hover .caret {
  473. border-top-color: @navbar-inverse-link-hover-color;
  474. border-bottom-color: @navbar-inverse-link-hover-color;
  475. }
  476. > .dropdown > a .caret {
  477. border-top-color: @navbar-inverse-link-color;
  478. border-bottom-color: @navbar-inverse-link-color;
  479. }
  480. > .open > a {
  481. &,
  482. &:hover,
  483. &:focus {
  484. .caret {
  485. border-top-color: @navbar-inverse-link-active-color;
  486. border-bottom-color: @navbar-inverse-link-active-color;
  487. }
  488. }
  489. }
  490. @media (max-width: @screen-xs-max) {
  491. // Dropdowns get custom display
  492. .open .dropdown-menu {
  493. > .dropdown-header {
  494. border-color: @navbar-inverse-border;
  495. }
  496. > li > a {
  497. color: @navbar-inverse-link-color;
  498. &:hover,
  499. &:focus {
  500. color: @navbar-inverse-link-hover-color;
  501. background-color: @navbar-inverse-link-hover-bg;
  502. }
  503. }
  504. > .active > a {
  505. &,
  506. &:hover,
  507. &:focus {
  508. color: @navbar-inverse-link-active-color;
  509. background-color: @navbar-inverse-link-active-bg;
  510. }
  511. }
  512. > .disabled > a {
  513. &,
  514. &:hover,
  515. &:focus {
  516. color: @navbar-inverse-link-disabled-color;
  517. background-color: @navbar-inverse-link-disabled-bg;
  518. }
  519. }
  520. }
  521. }
  522. }
  523. .navbar-link {
  524. color: @navbar-inverse-link-color;
  525. &:hover {
  526. color: @navbar-inverse-link-hover-color;
  527. }
  528. }
  529. }