diff options
| author | Jacob Thornton <[email protected]> | 2012-08-20 16:13:46 -0700 |
|---|---|---|
| committer | Jacob Thornton <[email protected]> | 2012-08-20 16:13:46 -0700 |
| commit | 5d63e8e2a84468351b4c1ee6cc21f48e95ea27bf (patch) | |
| tree | 2d760c794e61c15850d14d5eee1c565ab4f9a871 /less | |
| parent | 5df1e2c00a295c45db7fa75dba333dc9464b128c (diff) | |
| parent | aa2cec6f2f706f8c1754f8bf79a8c9f094445bd8 (diff) | |
| download | bootstrap-5d63e8e2a84468351b4c1ee6cc21f48e95ea27bf.tar.xz bootstrap-5d63e8e2a84468351b4c1ee6cc21f48e95ea27bf.zip | |
fMerge branch '2.1.0-wip'
Conflicts:
docs/index.html
Diffstat (limited to 'less')
42 files changed, 1741 insertions, 766 deletions
diff --git a/less/accordion.less b/less/accordion.less index 31b8cdc33..c13c7be26 100644 --- a/less/accordion.less +++ b/less/accordion.less @@ -1,5 +1,6 @@ -// ACCORDION -// --------- +// +// Accordion +// -------------------------------------------------- // Parent container diff --git a/less/alerts.less b/less/alerts.less index 46a0d77bf..6df5fd72d 100644 --- a/less/alerts.less +++ b/less/alerts.less @@ -1,7 +1,11 @@ -// ALERT STYLES -// ------------ +// +// Alerts +// -------------------------------------------------- + + +// Base styles +// ------------------------- -// Base alert styles .alert { padding: 8px 35px 8px 14px; margin-bottom: @baseLineHeight; @@ -11,8 +15,8 @@ .border-radius(4px); color: @warningText; } -.alert-heading { - color: inherit; +.alert h4 { + margin: 0; } // Adjust close link position @@ -20,15 +24,16 @@ position: relative; top: -2px; right: -21px; - line-height: 18px; + line-height: @baseLineHeight; } + // Alternate styles -// ---------------- +// ------------------------- .alert-success { background-color: @successBackground; - border-color: @successBorder; + border-color: @successBorder; color: @successText; } .alert-danger, @@ -43,8 +48,10 @@ color: @infoText; } + // Block alerts -// ------------------------ +// ------------------------- + .alert-block { padding-top: 14px; padding-bottom: 14px; diff --git a/less/bootstrap.less b/less/bootstrap.less index c43875a80..f0df4f1d5 100644 --- a/less/bootstrap.less +++ b/less/bootstrap.less @@ -1,5 +1,5 @@ /*! - * Bootstrap v2.0.4 + * Bootstrap v2.1.0 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 diff --git a/less/breadcrumbs.less b/less/breadcrumbs.less index 111f12279..fd269b31a 100644 --- a/less/breadcrumbs.less +++ b/less/breadcrumbs.less @@ -1,14 +1,14 @@ -// BREADCRUMBS -// ----------- +// +// Breadcrumbs +// -------------------------------------------------- + .breadcrumb { - padding: 7px 14px; + padding: 8px 15px; margin: 0 0 @baseLineHeight; list-style: none; - #gradient > .vertical(@white, #f5f5f5); - border: 1px solid #ddd; - .border-radius(3px); - .box-shadow(inset 0 1px 0 @white); + background-color: #f5f5f5; + .border-radius(4px); li { display: inline-block; .ie7-inline-block(); @@ -16,9 +16,9 @@ } .divider { padding: 0 5px; - color: @grayLight; + color: #ccc; } - .active a { - color: @grayDark; + .active { + color: @grayLight; } } diff --git a/less/button-groups.less b/less/button-groups.less index 5338c5a45..77496d6ab 100644 --- a/less/button-groups.less +++ b/less/button-groups.less @@ -1,11 +1,13 @@ -// BUTTON GROUPS -// ------------- +// +// Button groups +// -------------------------------------------------- // Make the div behave like a button .btn-group { position: relative; - .clearfix(); // clears the floated buttons + font-size: 0; // remove as part 1 of font-size inline-block hack + white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page) .ie7-restore-left-whitespace(); } @@ -16,21 +18,44 @@ // Optional: Group multiple button groups together for a toolbar .btn-toolbar { + font-size: 0; // Hack to remove whitespace that results from using inline-block margin-top: @baseLineHeight / 2; margin-bottom: @baseLineHeight / 2; .btn-group { display: inline-block; .ie7-inline-block(); } + .btn + .btn, + .btn-group + .btn, + .btn + .btn-group { + margin-left: 5px; + } } // Float them, remove border radius, then re-add to first and last elements .btn-group > .btn { position: relative; - float: left; - margin-left: -1px; .border-radius(0); } +.btn-group > .btn + .btn { + margin-left: -1px; +} +.btn-group > .btn, +.btn-group > .dropdown-menu { + font-size: @baseFontSize; // redeclare as part 2 of font-size inline-block hack +} + +// Reset fonts for other sizes +.btn-group > .btn-mini { + font-size: 11px; +} +.btn-group > .btn-small { + font-size: 12px; +} +.btn-group > .btn-large { + font-size: 16px; +} + // Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match .btn-group > .btn:first-child { margin-left: 0; @@ -91,24 +116,28 @@ // ---------------------- // Give the line between buttons some depth -.btn-group > .dropdown-toggle { +.btn-group > .btn + .dropdown-toggle { padding-left: 8px; padding-right: 8px; .box-shadow(~"inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); - *padding-top: 4px; - *padding-bottom: 4px; + *padding-top: 5px; + *padding-bottom: 5px; } -.btn-group > .btn-mini.dropdown-toggle { +.btn-group > .btn-mini + .dropdown-toggle { padding-left: 5px; padding-right: 5px; + *padding-top: 2px; + *padding-bottom: 2px; } -.btn-group > .btn-small.dropdown-toggle { - *padding-top: 4px; +.btn-group > .btn-small + .dropdown-toggle { + *padding-top: 5px; *padding-bottom: 4px; } -.btn-group > .btn-large.dropdown-toggle { +.btn-group > .btn-large + .dropdown-toggle { padding-left: 12px; padding-right: 12px; + *padding-top: 7px; + *padding-bottom: 7px; } .btn-group.open { @@ -147,22 +176,16 @@ // Reposition the caret .btn .caret { - margin-top: 7px; + margin-top: 8px; margin-left: 0; } -.btn:hover .caret, -.open.btn-group .caret { - .opacity(100); -} // Carets in other button sizes -.btn-mini .caret { - margin-top: 5px; -} -.btn-small .caret { +.btn-mini .caret, +.btn-small .caret, +.btn-large .caret { margin-top: 6px; } .btn-large .caret { - margin-top: 6px; border-left-width: 5px; border-right-width: 5px; border-top-width: 5px; @@ -185,7 +208,37 @@ .caret { border-top-color: @white; border-bottom-color: @white; - .opacity(75); } } + + +// Vertical button groups +// ---------------------- + +.btn-group-vertical { + display: inline-block; // makes buttons only take up the width they need + .ie7-inline-block(); +} +.btn-group-vertical .btn { + display: block; + float: none; + width: 100%; + .border-radius(0); +} +.btn-group-vertical .btn + .btn { + margin-left: 0; + margin-top: -1px; +} +.btn-group-vertical .btn:first-child { + .border-radius(4px 4px 0 0); +} +.btn-group-vertical .btn:last-child { + .border-radius(0 0 4px 4px); +} +.btn-group-vertical .btn-large:first-child { + .border-radius(6px 6px 0 0); +} +.btn-group-vertical .btn-large:last-child { + .border-radius(0 0 6px 6px); +} diff --git a/less/buttons.less b/less/buttons.less index c44ff3e6f..077616e99 100644 --- a/less/buttons.less +++ b/less/buttons.less @@ -1,5 +1,6 @@ -// BUTTON STYLES -// ------------- +// +// Buttons +// -------------------------------------------------- // Base styles @@ -9,64 +10,64 @@ .btn { display: inline-block; .ie7-inline-block(); - padding: 4px 10px 4px; + padding: 4px 14px; margin-bottom: 0; // For input.btn font-size: @baseFontSize; line-height: @baseLineHeight; - *line-height: 20px; - color: @grayDark; + *line-height: @baseLineHeight; text-align: center; - text-shadow: 0 1px 1px rgba(255,255,255,.75); vertical-align: middle; cursor: pointer; - .buttonBackground(@btnBackground, @btnBackgroundHighlight); + .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75)); border: 1px solid @btnBorder; *border: 0; // Remove the border to prevent IE7's black border on input:focus border-bottom-color: darken(@btnBorder, 10%); .border-radius(4px); .ie7-restore-left-whitespace(); // Give IE7 some love .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); -} -// Hover state -.btn:hover { - color: @grayDark; - text-decoration: none; - background-color: darken(@white, 10%); - *background-color: darken(@white, 15%); /* Buttons in IE7 don't get borders, so darken on hover */ - background-position: 0 -15px; + // Hover state + &:hover { + color: @grayDark; + text-decoration: none; + background-color: darken(@white, 10%); + *background-color: darken(@white, 15%); /* Buttons in IE7 don't get borders, so darken on hover */ + background-position: 0 -15px; + + // transition is only when going to hover, otherwise the background + // behind the gradient (there for IE<=9 fallback) gets mismatched + .transition(background-position .1s linear); + } - // transition is only when going to hover, otherwise the background - // behind the gradient (there for IE<=9 fallback) gets mismatched - .transition(background-position .1s linear); -} + // Focus state for keyboard and accessibility + &:focus { + .tab-focus(); + } -// Focus state for keyboard and accessibility -.btn:focus { - .tab-focus(); -} + // Active state + &.active, + &:active { + background-color: darken(@white, 10%); + background-color: darken(@white, 15%) e("\9"); + background-image: none; + outline: 0; + .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); + } -// Active state -.btn.active, -.btn:active { - background-color: darken(@white, 10%); - background-color: darken(@white, 15%) e("\9"); - background-image: none; - outline: 0; - .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); -} + // Disabled state + &.disabled, + &[disabled] { + cursor: default; + background-color: darken(@white, 10%); + background-image: none; + .opacity(65); + .box-shadow(none); + } -// Disabled state -.btn.disabled, -.btn[disabled] { - cursor: default; - background-color: darken(@white, 10%); - background-image: none; - .opacity(65); - .box-shadow(none); } + // Button Sizes // -------------------------------------------------- @@ -78,47 +79,42 @@ .border-radius(5px); } .btn-large [class^="icon-"] { - margin-top: 1px; + margin-top: 2px; } // Small .btn-small { - padding: 5px 9px; + padding: 3px 9px; font-size: @baseFontSize - 2px; line-height: @baseLineHeight - 2px; } .btn-small [class^="icon-"] { - margin-top: -1px; + margin-top: 0; } // Mini .btn-mini { padding: 2px 6px; - font-size: @baseFontSize - 2px; + font-size: @baseFontSize - 3px; line-height: @baseLineHeight - 4px; } +// Block button +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; + .box-sizing(border-box); +} +.btn-block + .btn-block { + margin-top: 5px; +} + // Alternate buttons // -------------------------------------------------- -// Set text color -// ------------------------- -.btn-primary, -.btn-primary:hover, -.btn-warning, -.btn-warning:hover, -.btn-danger, -.btn-danger:hover, -.btn-success, -.btn-success:hover, -.btn-info, -.btn-info:hover, -.btn-inverse, -.btn-inverse:hover { - color: @white; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); -} // Provide *some* extra contrast for those who can get it .btn-primary.active, .btn-warning.active, @@ -133,8 +129,8 @@ // ------------------------- .btn { // reset here as of 2.0.3 due to Recess property order - border-color: #ccc; - border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.25); + border-color: #c5c5c5; + border-color: rgba(0,0,0,.15) rgba(0,0,0,.15) rgba(0,0,0,.25); } .btn-primary { .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight); @@ -174,8 +170,9 @@ input[type="submit"].btn { } // IE7 has some default padding on button controls - *padding-top: 2px; - *padding-bottom: 2px; + *padding-top: 3px; + *padding-bottom: 3px; + &.btn-large { *padding-top: 7px; *padding-bottom: 7px; @@ -189,3 +186,26 @@ input[type="submit"].btn { *padding-bottom: 1px; } } + + +// Link buttons +// -------------------------------------------------- + +// Make a button look and behave like a link +.btn-link, +.btn-link:active { + background-color: transparent; + background-image: none; + .box-shadow(none); +} +.btn-link { + border-color: transparent; + cursor: pointer; + color: @linkColor; + .border-radius(0); +} +.btn-link:hover { + color: @linkColorHover; + text-decoration: underline; + background-color: transparent; +} diff --git a/less/carousel.less b/less/carousel.less index 8fbd30315..33f98ac4d 100644 --- a/less/carousel.less +++ b/less/carousel.less @@ -1,5 +1,7 @@ -// CAROUSEL -// -------- +// +// Carousel +// -------------------------------------------------- + .carousel { position: relative; @@ -103,6 +105,7 @@ } } + // Caption for text below images // ----------------------------- @@ -111,11 +114,18 @@ left: 0; right: 0; bottom: 0; - padding: 10px 15px 5px; + padding: 15px; background: @grayDark; background: rgba(0,0,0,.75); } .carousel-caption h4, .carousel-caption p { color: @white; + line-height: @baseLineHeight; +} +.carousel-caption h4 { + margin: 0 0 5px; +} +.carousel-caption p { + margin-bottom: 0; } diff --git a/less/close.less b/less/close.less index 31fe6fcb3..c71a508f3 100644 --- a/less/close.less +++ b/less/close.less @@ -1,5 +1,7 @@ -// CLOSE ICONS -// ----------- +// +// Close icons +// -------------------------------------------------- + .close { float: right; diff --git a/less/code.less b/less/code.less index 0cae749a0..f1851a074 100644 --- a/less/code.less +++ b/less/code.less @@ -1,13 +1,14 @@ -// Code.less -// Code typography styles for the <code> and <pre> elements -// -------------------------------------------------------- +// +// Code (inline and blocK) +// -------------------------------------------------- + // Inline and block code styles code, pre { padding: 0 3px 2px; #font > #family > .monospace; - font-size: @baseFontSize - 1; + font-size: @baseFontSize - 2; color: @grayDark; .border-radius(3px); } @@ -25,7 +26,7 @@ pre { display: block; padding: (@baseLineHeight - 1) / 2; margin: 0 0 @baseLineHeight / 2; - font-size: @baseFontSize * .925; // 13px to 12px + font-size: @baseFontSize - 1; // 14px to 13px line-height: @baseLineHeight; word-break: break-all; word-wrap: break-word; diff --git a/less/component-animations.less b/less/component-animations.less index 1e1e78b85..2166776d9 100644 --- a/less/component-animations.less +++ b/less/component-animations.less @@ -1,5 +1,7 @@ -// COMPONENT ANIMATIONS -// -------------------- +// +// Component animations +// -------------------------------------------------- + .fade { opacity: 0; @@ -13,6 +15,7 @@ position: relative; height: 0; overflow: hidden; + overflow: visible \9; .transition(height .35s ease); &.in { height: auto; diff --git a/less/dropdowns.less b/less/dropdowns.less index 5e232556a..e83915dba 100644 --- a/less/dropdowns.less +++ b/less/dropdowns.less @@ -1,5 +1,7 @@ -// DROPDOWN MENUS -// -------------- +// +// Dropdown menus +// -------------------------------------------------- + // Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns .dropup, @@ -26,7 +28,6 @@ border-right: 4px solid transparent; border-left: 4px solid transparent; content: ""; - .opacity(30); } // Place the caret @@ -34,10 +35,6 @@ margin-top: 8px; margin-left: 2px; } -.dropdown:hover .caret, -.open .caret { - .opacity(100); -} // The dropdown menu (ul) // ---------------------- @@ -49,15 +46,15 @@ display: none; // none by default, but block on "open" of the menu float: left; min-width: 160px; - padding: 4px 0; - margin: 1px 0 0; // override default ul + padding: 5px 0; + margin: 2px 0 0; // override default ul list-style: none; background-color: @dropdownBackground; - border: 1px solid #ccc; - border: 1px solid rgba(0,0,0,.2); + border: 1px solid #ccc; // Fallback for IE7-8 + border: 1px solid @dropdownBorder; *border-right-width: 2px; *border-bottom-width: 2px; - .border-radius(5px); + .border-radius(6px); .box-shadow(0 5px 10px rgba(0,0,0,.2)); -webkit-background-clip: padding-box; -moz-background-clip: padding; @@ -77,7 +74,7 @@ // Links within the dropdown menu a { display: block; - padding: 3px 15px; + padding: 3px 20px; clear: both; font-weight: normal; line-height: @baseLineHeight; @@ -89,11 +86,37 @@ // Hover state // ----------- .dropdown-menu li > a:hover, +.dropdown-menu li > a:focus, +.dropdown-submenu:hover > a { + text-decoration: none; + color: @dropdownLinkColorHover; + background-color: @dropdownLinkBackgroundHover; + #gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%)); +} + +// Active state +// ------------ .dropdown-menu .active > a, .dropdown-menu .active > a:hover { color: @dropdownLinkColorHover; text-decoration: none; - background-color: @dropdownLinkBackgroundHover; + outline: 0; + background-color: @dropdownLinkBackgroundActive; + #gradient > .vertical(@dropdownLinkBackgroundActive, darken(@dropdownLinkBackgroundActive, 5%)); +} + +// Disabled state +// -------------- +// Gray out text and ensure the hover state remains gray +.dropdown-menu .disabled > a, +.dropdown-menu .disabled > a:hover { + color: @grayLight; +} +// Nuke hover effects +.dropdown-menu .disabled > a:hover { + text-decoration: none; + background-color: transparent; + cursor: default; } // Open state for the dropdown @@ -135,6 +158,50 @@ } } +// Sub menus +// --------------------------- +.dropdown-submenu { + position: relative; +} +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} +.dropdown-submenu:hover .dropdown-menu { + display: block; +} + +.dropdown-submenu > a:after { + display: block; + content: " "; + float: right; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + border-width: 5px 0 5px 5px; + border-left-color: darken(@dropdownBackground, 20%); + margin-top: 5px; + margin-right: -10px; +} +.dropdown-submenu:hover > a:after { + border-left-color: @dropdownLinkColorHover; +} + + +// Tweak nav headers +// ----------------- +// Increase padding from 15px to 20px on sides +.dropdown .dropdown-menu .nav-header { + padding-left: 20px; + padding-right: 20px; +} + // Typeahead // --------- .typeahead { diff --git a/less/forms.less b/less/forms.less index 1163fe914..77b5135a4 100644 --- a/less/forms.less +++ b/less/forms.less @@ -1,6 +1,6 @@ -// Forms.less -// Base styles for various input types, form layouts, and states -// ------------------------------------------------------------- +// +// Forms +// -------------------------------------------------- // GENERAL STYLES @@ -22,7 +22,7 @@ legend { display: block; width: 100%; padding: 0; - margin-bottom: @baseLineHeight * 1.5; + margin-bottom: @baseLineHeight; font-size: @baseFontSize * 1.5; line-height: @baseLineHeight * 2; color: @grayDark; @@ -80,11 +80,12 @@ input[type="color"], .uneditable-input { display: inline-block; height: @baseLineHeight; - padding: 4px; + padding: 4px 6px; margin-bottom: 9px; font-size: @baseFontSize; line-height: @baseLineHeight; color: @gray; + .border-radius(@inputBorderRadius); } // Reset appearance properties for textual inputs and textarea @@ -116,10 +117,8 @@ input[type="color"], .uneditable-input { background-color: @inputBackground; border: 1px solid @inputBorder; - .border-radius(@inputBorderRadius); .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); - @transition: border linear .2s, box-shadow linear .2s; - .transition(@transition); + .transition(~"border linear .2s, box-shadow linear .2s"); // Focus state &:focus { @@ -133,13 +132,16 @@ input[type="color"], // Position radios and checkboxes better input[type="radio"], input[type="checkbox"] { - margin: 3px 0; + margin: 4px 0 0; *margin-top: 0; /* IE7 */ + margin-top: 1px \9; /* IE8-9 */ line-height: normal; cursor: pointer; } -// Reset width of input buttons, radios, checkboxes +// Reset width of input images, buttons, radios, checkboxes +input[type="file"], +input[type="image"], input[type="submit"], input[type="reset"], input[type="button"], @@ -148,24 +150,19 @@ input[type="checkbox"] { width: auto; // Override of generic input selector } -// Make uneditable textareas behave like a textarea -.uneditable-textarea { - width: auto; - height: auto; -} - // Set the height of select and file controls to match text inputs select, input[type="file"] { - height: 28px; /* In IE7, the height of the select element cannot be changed by height, only font-size */ + height: 30px; /* In IE7, the height of the select element cannot be changed by height, only font-size */ *margin-top: 4px; /* For IE7, add top margin to align select with labels */ - line-height: 28px; + line-height: 30px; } // Make select elements obey height by applying a border select { width: 220px; // default input width + 10px of padding that doesn't get applied border: 1px solid #bbb; + background-color: @inputBackground; // Chrome on Linux and Mobile Safari need background-color } // Make multiple select elements height not fixed @@ -183,6 +180,41 @@ input[type="checkbox"]:focus { } +// Uneditable inputs +// ------------------------- + +// Make uneditable inputs look inactive +.uneditable-input, +.uneditable-textarea { + color: @grayLight; + background-color: darken(@inputBackground, 1%); + border-color: @inputBorder; + .box-shadow(inset 0 1px 2px rgba(0,0,0,.025)); + cursor: not-allowed; +} + +// For text that needs to appear as an input but should not be an input +.uneditable-input { + overflow: hidden; // prevent text from wrapping, but still cut it off like an input does + white-space: nowrap; +} + +// Make uneditable textareas behave like a textarea +.uneditable-textarea { + width: auto; + height: auto; +} + + +// Placeholder +// ------------------------- + +// Placeholder text gets special styles; can't be bundled together though for some reason +input, +textarea { + .placeholder(); +} + // CHECKBOXES & RADIOS // ------------------- @@ -250,6 +282,10 @@ textarea[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], +.row-fluid input[class*="span"], +.row-fluid select[class*="span"], +.row-fluid textarea[class*="span"], +.row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { display: inline-block; @@ -260,8 +296,18 @@ textarea[class*="span"], // GRID SIZING FOR INPUTS // ---------------------- +// Grid sizes #grid > .input(@gridColumnWidth, @gridGutterWidth); +// Control row for multiple inputs per line +.controls-row { + .clearfix(); // Clear the float from controls +} +.controls-row [class*="span"] { + float: left; // Float to collapse white-space for proper grid alignment +} + + // DISABLED STATE @@ -276,7 +322,6 @@ select[readonly], textarea[readonly] { cursor: not-allowed; background-color: @inputDisabledBackground; - border-color: #ddd; } // Explicitly reset the colors here input[type="radio"][disabled], @@ -332,19 +377,6 @@ select:focus:required:invalid { .clearfix(); // Adding clearfix to allow for .pull-right button containers } -// For text that needs to appear as an input but should not be an input -.uneditable-input { - overflow: hidden; // prevent text from wrapping, but still cut it off like an input does - white-space: nowrap; - cursor: not-allowed; - background-color: @inputBackground; - border-color: #eee; - .box-shadow(inset 0 1px 2px rgba(0,0,0,.025)); -} - -// Placeholder text gets special styles; can't be bundled together though for some reason -.placeholder(); - // HELP TEXT @@ -352,7 +384,7 @@ select:focus:required:invalid { .help-block, .help-inline { - color: @gray; // lighten the text some for contrast + color: lighten(@textColor, 15%); // lighten the text some for contrast } .help-block { @@ -373,42 +405,44 @@ select:focus:required:invalid { // ------------ // Allow us to put symbols and text within the input field for a cleaner look -.input-prepend, -.input-append { +.input-append, +.input-prepend { margin-bottom: 5px; + font-size: 0; + white-space: nowrap; // Prevent span and input from separating + input, select, .uneditable-input { position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms *margin-left: 0; - vertical-align: middle; + font-size: @baseFontSize; + vertical-align: top; .border-radius(0 @inputBorderRadius @inputBorderRadius 0); // Make input on top when focused so blue border and shadow always show &:focus { z-index: 2; } } - .uneditable-input { - border-left-color: #ccc; - } .add-on { display: inline-block; width: auto; height: @baseLineHeight; min-width: 16px; padding: 4px 5px; + font-size: @baseFontSize; font-weight: normal; line-height: @baseLineHeight; text-align: center; text-shadow: 0 1px 0 @white; - vertical-align: middle; background-color: @grayLighter; border: 1px solid #ccc; } .add-on, .btn { margin-left: -1px; + vertical-align: top; .border-radius(0); } .active { @@ -432,10 +466,6 @@ select:focus:required:invalid { .uneditable-input { .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); } - .uneditable-input { - border-right-color: #ccc; - border-left-color: #eee; - } .add-on:last-child, .btn:last-child { .border-radius(0 @inputBorderRadius @inputBorderRadius 0); @@ -465,17 +495,36 @@ select:focus:required:invalid { // SEARCH FORM // ----------- -.search-query { +input.search-query { padding-right: 14px; padding-right: 4px \9; padding-left: 14px; padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */ - margin-bottom: 0; // remove the default margin on all inputs - .border-radius(14px); + margin-bottom: 0; // Remove the default margin on all inputs + .border-radius(15px); +} + +/* Allow for input prepend/append in search forms */ +.form-search .input-append .search-query, +.form-search .input-prepend .search-query { + .border-radius(0); // Override due to specificity +} +.form-search .input-append .search-query { + .border-radius(14px 0 0 14px) +} +.form-search .input-append .btn { + .border-radius(0 14px 14px 0) +} +.form-search .input-prepend .search-query { + .border-radius(0 14px 14px 0) +} +.form-search .input-prepend .btn { + .border-radius(14px 0 0 14px) } + // HORIZONTAL & VERTICAL FORMS // --------------------------- @@ -495,6 +544,7 @@ select:focus:required:invalid { display: inline-block; .ie7-inline-block(); margin-bottom: 0; + vertical-align: middle; } // Re-hide hidden elements due to specifity .hide { @@ -502,7 +552,9 @@ select:focus:required:invalid { } } .form-search label, -.form-inline label { +.form-inline label, +.form-search .btn-group, +.form-inline .btn-group { display: inline-block; } // Remove margin for input-prepend/-append diff --git a/less/grid.less b/less/grid.less index e62a96093..750d20351 100644 --- a/less/grid.less +++ b/less/grid.less @@ -1,5 +1,21 @@ +// +// Grid system +// -------------------------------------------------- + + // Fixed (940px) #grid > .core(@gridColumnWidth, @gridGutterWidth); // Fluid (940px) -#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth);
\ No newline at end of file +#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth); + +// Reset utility classes due to specificity +[class*="span"].hide, +.row-fluid [class*="span"].hide { + display: none; +} + +[class*="span"].pull-right, +.row-fluid [class*="span"].pull-right { + float: right; +} diff --git a/less/hero-unit.less b/less/hero-unit.less index 0ffe82962..672b7d7c7 100644 --- a/less/hero-unit.less +++ b/less/hero-unit.less @@ -1,5 +1,7 @@ -// HERO UNIT -// --------- +// +// Hero unit +// -------------------------------------------------- + .hero-unit { padding: 60px; diff --git a/less/labels-badges.less b/less/labels-badges.less index 0fbd7bbc6..2f15fec05 100644 --- a/less/labels-badges.less +++ b/less/labels-badges.less @@ -1,5 +1,7 @@ -// LABELS & BADGES -// --------------- +// +// Labels and badges +// -------------------------------------------------- + // Base classes .label, @@ -53,3 +55,18 @@ a { &-inverse { background-color: @grayDark; } &-inverse[href] { background-color: darken(@grayDark, 10%); } } + +// Quick fix for labels/badges in buttons +.btn { + .label, + .badge { + position: relative; + top: -1px; + } +} +.btn-mini { + .label, + .badge { + top: 0; + } +} diff --git a/less/layouts.less b/less/layouts.less index cc53627ff..24a206211 100644 --- a/less/layouts.less +++ b/less/layouts.less @@ -1,7 +1,6 @@ // // Layouts -// Fixed-width and fluid (with sidebar) layouts -// -------------------------------------------- +// -------------------------------------------------- // Container (centered, fixed-width layouts) diff --git a/less/mixins.less b/less/mixins.less index c3b57ed14..db60f1aea 100644 --- a/less/mixins.less +++ b/less/mixins.less @@ -1,6 +1,6 @@ -// Mixins.less -// Snippets of reusable CSS to develop faster and keep code readable -// ----------------------------------------------------------------- +// +// Mixins +// -------------------------------------------------- // UTILITY MIXINS @@ -15,6 +15,9 @@ &:after { display: table; content: ""; + // Fixes Opera/contenteditable bug: + // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 + line-height: 0; } &:after { clear: both; @@ -62,10 +65,6 @@ .ie7-restore-right-whitespace() { *margin-right: .3em; - - &:last-child { - *margin-left: 0; - } } // Sizing shortcuts @@ -155,11 +154,12 @@ .input-block-level { display: block; width: 100%; - min-height: 28px; // Make inputs at least the height of their button counterpart + min-height: 30px; // Make inputs at least the height of their button counterpart .box-sizing(border-box); // Makes inputs behave like true block-level elements } + // Mixin for form field states .formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) { // Set the text color @@ -176,9 +176,13 @@ textarea { color: @textColor; border-color: @borderColor; + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work &:focus { border-color: darken(@borderColor, 10%); - .box-shadow(0 0 6px lighten(@borderColor, 20%)); + // Write out in full since the lighten() function isn't easily escaped + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%); + -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%); } } // Give a small background color for input-prepend/-append @@ -202,6 +206,46 @@ border-radius: @radius; } +// Single Corner Border Radius +.border-top-left-radius(@radius) { + -webkit-border-top-left-radius: @radius; + -moz-border-radius-topleft: @radius; + border-top-left-radius: @radius; +} +.border-top-right-radius(@radius) { + -webkit-border-top-right-radius: @radius; + -moz-border-radius-topright: @radius; + border-top-right-radius: @radius; +} +.border-bottom-right-radius(@radius) { + -webkit-border-bottom-right-radius: @radius; + -moz-border-radius-bottomright: @radius; + border-bottom-right-radius: @radius; +} +.border-bottom-left-radius(@radius) { + -webkit-border-bottom-left-radius: @radius; + -moz-border-radius-bottomleft: @radius; + border-bottom-left-radius: @radius; +} + +// Single Side Border Radius +.border-top-radius(@radius) { + .border-top-right-radius(@radius); + .border-top-left-radius(@radius); +} +.border-right-radius(@radius) { + .border-top-right-radius(@radius); + .border-bottom-right-radius(@radius); +} +.border-bottom-radius(@radius) { + .border-bottom-right-radius(@radius); + .border-bottom-left-radius(@radius); +} +.border-left-radius(@radius) { + .border-top-left-radius(@radius); + .border-bottom-left-radius(@radius); +} + // Drop shadows .box-shadow(@shadow) { -webkit-box-shadow: @shadow; @@ -213,7 +257,6 @@ .transition(@transition) { -webkit-transition: @transition; -moz-transition: @transition; - -ms-transition: @transition; -o-transition: @transition; transition: @transition; } @@ -248,11 +291,10 @@ transform: skew(@x, @y); } .translate3d(@x, @y, @z) { - -webkit-transform: translate(@x, @y, @z); - -moz-transform: translate(@x, @y, @z); - -ms-transform: translate(@x, @y, @z); - -o-transform: translate(@x, @y, @z); - transform: translate(@x, @y, @z); + -webkit-transform: translate3d(@x, @y, @z); + -moz-transform: translate3d(@x, @y, @z); + -o-transform: translate3d(@x, @y, @z); + transform: translate3d(@x, @y, @z); } // Backface visibility @@ -262,7 +304,6 @@ .backface-visibility(@visibility){ -webkit-backface-visibility: @visibility; -moz-backface-visibility: @visibility; - -ms-backface-visibility: @visibility; backface-visibility: @visibility; } @@ -287,7 +328,6 @@ .box-sizing(@boxmodel) { -webkit-box-sizing: @boxmodel; -moz-box-sizing: @boxmodel; - -ms-box-sizing: @boxmodel; box-sizing: @boxmodel; } @@ -350,7 +390,9 @@ } // Gradient Bar Colors for buttons and alerts -.gradientBar(@primaryColor, @secondaryColor) { +.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { + color: @textColor; + text-shadow: @textShadow; #gradient > .vertical(@primaryColor, @secondaryColor); border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%); border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%); @@ -361,60 +403,54 @@ .horizontal(@startColor: #555, @endColor: #333) { background-color: @endColor; background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+ - background-image: -ms-linear-gradient(left, @startColor, @endColor); // IE10 background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+ background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(left, @startColor, @endColor); // Le standard + background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10 background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",@startColor,@endColor)); // IE9 and down + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down } .vertical(@startColor: #555, @endColor: #333) { background-color: mix(@startColor, @endColor, 60%); background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+ - background-image: -ms-linear-gradient(top, @startColor, @endColor); // IE10 background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+ background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(top, @startColor, @endColor); // The standard + background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10 background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down } .directional(@startColor: #555, @endColor: #333, @deg: 45deg) { background-color: @endColor; background-repeat: repeat-x; background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+ - background-image: -ms-linear-gradient(@deg, @startColor, @endColor); // IE10 background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+ background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(@deg, @startColor, @endColor); // The standard + background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10 } .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) { background-color: mix(@midColor, @endColor, 80%); background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor); - background-image: -ms-linear-gradient(@startColor, @midColor @colorStop, @endColor); + background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop*100%, @endColor); background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor); background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor); background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",@startColor,@endColor)); // IE9 and down, gets no color-stop at all for proper fallback + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback } .radial(@innerColor: #555, @outerColor: #333) { background-color: @outerColor; background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor)); background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor); background-image: -moz-radial-gradient(circle, @innerColor, @outerColor); - background-image: -ms-radial-gradient(circle, @innerColor, @outerColor); background-image: -o-radial-gradient(circle, @innerColor, @outerColor); background-repeat: no-repeat; } - .striped(@color, @angle: -45deg) { + .striped(@color, @angle: 45deg) { background-color: @color; background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent)); background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); } @@ -448,14 +484,15 @@ // Button backgrounds // ------------------ -.buttonBackground(@startColor, @endColor) { +.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { // gradientBar will set the background to a pleasing blend of these, to support IE<=9 - .gradientBar(@startColor, @endColor); + .gradientBar(@startColor, @endColor, @textColor, @textShadow); *background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */ .reset-filter(); // in these cases the gradient won't cover the background, so we override &:hover, &:active, &.active, &.disabled, &[disabled] { + color: @textColor; background-color: @endColor; *background-color: darken(@endColor, 5%); } @@ -475,43 +512,7 @@ margin-top: (@navbarHeight - @elementHeight) / 2; } -// Popover arrows -// ------------------------- -// For tipsies and popovers -#popoverArrow { - .top(@arrowWidth: 5px, @color: @black) { - bottom: 0; - left: 50%; - margin-left: -@arrowWidth; - border-left: @arrowWidth solid transparent; - border-right: @arrowWidth solid transparent; - border-top: @arrowWidth solid @color; - } - .left(@arrowWidth: 5px, @color: @black) { - top: 50%; - right: 0; - margin-top: -@arrowWidth; - border-top: @arrowWidth solid transparent; - border-bottom: @arrowWidth solid transparent; - border-left: @arrowWidth solid @color; - } - .bottom(@arrowWidth: 5px, @color: @black) { - top: 0; - left: 50%; - margin-left: -@arrowWidth; - border-left: @arrowWidth solid transparent; - border-right: @arrowWidth solid transparent; - border-bottom: @arrowWidth solid @color; - } - .right(@arrowWidth: 5px, @color: @black) { - top: 50%; - left: 0; - margin-top: -@arrowWidth; - border-top: @arrowWidth solid transparent; - border-bottom: @arrowWidth solid transparent; - border-right: @arrowWidth solid @color; - } -} + // Grid System // ----------- @@ -579,6 +580,7 @@ // Set the container width, and override it for fixed navbars in media queries .container, + .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { .span(@gridColumns); } @@ -596,6 +598,23 @@ } .spanX (0) {} + .offsetX (@index) when (@index > 0) { + (~'.offset@{index}') { .offset(@index); } + (~'.offset@{index}:first-child') { .offsetFirstChild(@index); } + .offsetX(@index - 1); + } + .offsetX (0) {} + + .offset (@columns) { + margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2); + *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%); + } + + .offsetFirstChild (@columns) { + margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth); + *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%); + } + .span (@columns) { width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)); *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%); @@ -614,8 +633,9 @@ margin-left: 0; } - // generate .spanX + // generate .spanX and .offsetX .spanX (@gridColumns); + .offsetX (@gridColumns); } } @@ -629,7 +649,7 @@ .spanX (0) {} .span(@columns) { - width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 10; + width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14; } input, @@ -638,6 +658,11 @@ margin-left: 0; // override margin-left from core grid system } + // Space grid-sized controls properly if multiple per line + .controls-row [class*="span"] + [class*="span"] { + margin-left: @gridGutterWidth; + } + // generate .spanX .spanX (@gridColumns); diff --git a/less/modals.less b/less/modals.less index 870ad0dfe..e515bb796 100644 --- a/less/modals.less +++ b/less/modals.less @@ -1,5 +1,7 @@ -// MODALS -// ------ +// +// Modals +// -------------------------------------------------- + // Recalculate z-index where appropriate .modal-open { @@ -54,6 +56,11 @@ border-bottom: 1px solid #eee; // Close icon .close { margin-top: 2px; } + // Heading + h3 { + margin: 0; + line-height: 30px; + } } // Body (where all modal content resides) diff --git a/less/navbar.less b/less/navbar.less index 818f8a5a2..70501e459 100644 --- a/less/navbar.less +++ b/less/navbar.less @@ -1,27 +1,32 @@ -// NAVBAR (FIXED AND STATIC) -// ------------------------- +// +// Navbars (Redux) +// -------------------------------------------------- // COMMON STYLES // ------------- +// Base class and wrapper .navbar { + overflow: visible; + margin-bottom: @baseLineHeight; + color: @navbarText; + // Fix for IE7's bad z-indexing so dropdowns don't appear below content that follows the navbar *position: relative; *z-index: 2; - - overflow: visible; - margin-bottom: @baseLineHeight; } -// Gradient is applied to it's own element because overflow visible is not honored by IE when filter is present +// Inner for background effects +// Gradient is applied to its own element because overflow visible is not honored by IE when filter is present .navbar-inner { min-height: @navbarHeight; padding-left: 20px; padding-right: 20px; #gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground); + border: 1px solid @navbarBorder; .border-radius(4px); - .box-shadow(~"0 1px 3px rgba(0,0,0,.25), inset 0 -1px 0 rgba(0,0,0,.1)"); + .box-shadow(0 1px 4px rgba(0,0,0,.065)); } // Set width to auto for default container @@ -36,48 +41,58 @@ } -// Brand, links, text, and buttons -.navbar { - color: @navbarText; - // Hover and active states - .brand:hover { +// Brand: website or project name +// ------------------------- +.navbar .brand { + float: left; + display: block; + // Vertically center the text given @navbarHeight + padding: ((@navbarHeight - @baseLineHeight) / 2) 20px ((@navbarHeight - @baseLineHeight) / 2); + margin-left: -20px; // negative indent to left-align the text down the page + font-size: 20px; + font-weight: 200; + color: @navbarBrandColor; + text-shadow: 0 1px 0 @navbarBackgroundHighlight; + &:hover { text-decoration: none; } - // Website or project name - .brand { - float: left; - display: block; - // Vertically center the text given @navbarHeight - @elementHeight: 20px; - padding: ((@navbarHeight - @elementHeight) / 2 - 2) 20px ((@navbarHeight - @elementHeight) / 2 + 2); - margin-left: -20px; // negative indent to left-align the text down the page - font-size: 20px; - font-weight: 200; - line-height: 1; - color: @navbarBrandColor; - } - // Plain text in topbar - .navbar-text { - margin-bottom: 0; - line-height: @navbarHeight; - } - // Janky solution for now to account for links outside the .nav - .navbar-link { - color: @navbarLinkColor; - &:hover { - color: @navbarLinkColorHover; - } - } - // Buttons in navbar - .btn, - .btn-group { - .navbarVerticalAlign(30px); // Vertically center in navbar - } - .btn-group .btn { - margin: 0; // then undo the margin here so we don't accidentally double it +} + +// Plain text in topbar +// ------------------------- +.navbar-text { + margin-bottom: 0; + line-height: @navbarHeight; +} + +// Janky solution for now to account for links outside the .nav +// ------------------------- +.navbar-link { + color: @navbarLinkColor; + &:hover { + color: @navbarLinkColorHover; } } +// Dividers in navbar +// ------------------------- +.navbar .divider-vertical { + height: @navbarHeight; + margin: 0 9px; + border-left: 1px solid @navbarBackground; + border-right: 1px solid @navbarBackgroundHighlight; +} + +// Buttons in navbar +// ------------------------- +.navbar .btn, +.navbar .btn-group { + .navbarVerticalAlign(28px); // Vertically center in navbar +} +.navbar .btn-group .btn { + margin: 0; // then undo the margin here so we don't accidentally double it +} + // Navbar forms .navbar-form { margin-bottom: 0; // remove default bottom margin @@ -89,7 +104,8 @@ .navbarVerticalAlign(30px); // Vertically center in navbar } input, - select { + select, + .btn { display: inline-block; margin-bottom: 0; } @@ -112,37 +128,34 @@ .navbar-search { position: relative; float: left; - .navbarVerticalAlign(28px); // Vertically center in navbar + .navbarVerticalAlign(30px); // Vertically center in navbar margin-bottom: 0; .search-query { - padding: 4px 9px; + margin-bottom: 0; + padding: 4px 14px; #font > .sans-serif(13px, normal, 1); - color: @white; - background-color: @navbarSearchBackground; - border: 1px solid @navbarSearchBorder; - .box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)"); - .transition(none); - - .placeholder(@navbarSearchPlaceholderColor); - - // Focus states (we use .focused since IE7-8 and down doesn't support :focus) - &:focus, - &.focused { - padding: 5px 10px; - color: @grayDark; - text-shadow: 0 1px 0 @white; - background-color: @navbarSearchBackgroundFocus; - border: 0; - .box-shadow(0 0 3px rgba(0,0,0,.15)); - outline: 0; - } + .border-radius(15px); // redeclare because of specificity of the type attribute } } -// FIXED NAVBAR -// ------------ +// Static navbar +// ------------------------- + +.navbar-static-top { + position: static; + width: 100%; + margin-bottom: 0; // remove 18px margin for default navbar + .navbar-inner { + .border-radius(0); + } +} + + + +// Fixed navbar +// ------------------------- // Shared (top/bottom) styles .navbar-fixed-top, @@ -151,7 +164,14 @@ right: 0; left: 0; z-index: @zindexFixedNavbar; - margin-bottom: 0; // remove 18px margin for static navbar + margin-bottom: 0; // remove 18px margin for default navbar +} +.navbar-fixed-top, +.navbar-fixed-bottom, +.navbar-static-top { + .navbar-inner { + border: 0; + } } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { @@ -160,6 +180,9 @@ .border-radius(0); } +// Reset container width +// Required here as we reset the width earlier on and the grid mixins don't override early enough +.navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { #grid > .core > .span(@gridColumns); @@ -169,10 +192,19 @@ .navbar-fixed-top { top: 0; } +.navbar-fixed-top, +.navbar-static-top { + .navbar-inner { + .box-shadow(~"inset 0 -1px 0 rgba(0,0,0,.1), 0 1px 10px rgba(0,0,0,.1)"); + } +} // Fixed to bottom .navbar-fixed-bottom { bottom: 0; + .navbar-inner { + .box-shadow(~"inset 0 1px 0 rgba(0,0,0,.1), 0 -1px 10px rgba(0,0,0,.1)"); + } } @@ -191,7 +223,6 @@ float: right; // redeclare due to specificity } .navbar .nav > li { - display: block; float: left; } @@ -199,29 +230,17 @@ .navbar .nav > li > a { float: none; // Vertically center the text given @navbarHeight - @elementHeight: 20px; - padding: ((@navbarHeight - @elementHeight) / 2 - 1) 10px ((@navbarHeight - @elementHeight) / 2 + 1); - line-height: 19px; + padding: ((@navbarHeight - @baseLineHeight) / 2) 15px ((@navbarHeight - @baseLineHeight) / 2); color: @navbarLinkColor; text-decoration: none; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); -} -// Buttons -.navbar .btn { - display: inline-block; - padding: 4px 10px 4px; - // Vertically center the button given @navbarHeight - @elementHeight: 28px; - margin: ((@navbarHeight - @elementHeight) / 2 - 1) 5px ((@navbarHeight - @elementHeight) / 2); - line-height: @baseLineHeight; + text-shadow: 0 1px 0 @navbarBackgroundHighlight; } -.navbar .btn-group { - margin: 0; - // Vertically center the button given @navbarHeight - @elementHeight: 28px; - padding: ((@navbarHeight - @elementHeight) / 2 - 1) 5px ((@navbarHeight - @elementHeight) / 2); +.navbar .nav .dropdown-toggle .caret { + margin-top: 8px; } + // Hover +.navbar .nav > li > a:focus, .navbar .nav > li > a:hover { background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover from .active color: @navbarLinkColorHover; @@ -229,27 +248,15 @@ } // Active nav items -.navbar .nav .active > a, -.navbar .nav .active > a:hover { +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { color: @navbarLinkColorActive; text-decoration: none; background-color: @navbarLinkBackgroundActive; -} - -// Dividers (basically a vertical hr) -.navbar .divider-vertical { - height: @navbarHeight; - width: 1px; - margin: 0 9px; - overflow: hidden; - background-color: @navbarBackground; - border-right: 1px solid @navbarBackgroundHighlight; -} - -// Secondary (floated right) nav in topbar -.navbar .nav.pull-right { - margin-left: 10px; - margin-right: 0; + -webkit-box-shadow: inset 0 3px 8px rgba(0,0,0,.125); + -moz-box-shadow: inset 0 3px 8px rgba(0,0,0,.125); + box-shadow: inset 0 3px 8px rgba(0,0,0,.125); } // Navbar button for toggling navbar items in responsive layouts @@ -260,7 +267,7 @@ padding: 7px 10px; margin-left: 5px; margin-right: 5px; - .buttonBackground(@navbarBackgroundHighlight, @navbarBackground); + .buttonBackground(darken(@navbarBackgroundHighlight, 5%), darken(@navbarBackground, 5%)); .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)"); } .navbar .btn-navbar .icon-bar { @@ -276,11 +283,12 @@ } + // Dropdown menus // -------------- // Menu position and menu carets -.navbar .dropdown-menu { +.navbar .nav > li > .dropdown-menu { &:before { content: ''; display: inline-block; @@ -304,7 +312,7 @@ } } // Menu position and menu caret support for dropups via extra dropup class -.navbar-fixed-bottom .dropdown-menu { +.navbar-fixed-bottom .nav > li > .dropdown-menu { &:before { border-top: 7px solid #ccc; border-top-color: @dropdownBorder; @@ -319,32 +327,28 @@ top: auto; } } -// Dropdown toggle caret -.navbar .nav li.dropdown .dropdown-toggle .caret, -.navbar .nav li.dropdown.open .caret { - border-top-color: @white; - border-bottom-color: @white; -} -.navbar .nav li.dropdown.active .caret { - .opacity(100); -} // Remove background color from open dropdown .navbar .nav li.dropdown.open > .dropdown-toggle, .navbar .nav li.dropdown.active > .dropdown-toggle, .navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: transparent; + background-color: @navbarLinkBackgroundActive; + color: @navbarLinkColorActive; } - -// Dropdown link on hover -.navbar .nav li.dropdown.active > .dropdown-toggle:hover { - color: @white; +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: @navbarLinkColor; + border-bottom-color: @navbarLinkColor; +} +.navbar .nav li.dropdown.open > .dropdown-toggle .caret, +.navbar .nav li.dropdown.active > .dropdown-toggle .caret, +.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: @navbarLinkColorActive; + border-bottom-color: @navbarLinkColorActive; } // Right aligned menus need alt position -// TODO: rejigger this at some point to simplify the selectors -.navbar .pull-right .dropdown-menu, -.navbar .dropdown-menu.pull-right { +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { left: auto; right: 0; &:before { @@ -355,4 +359,111 @@ left: auto; right: 13px; } -}
\ No newline at end of file + .dropdown-menu { + left: auto; + right: 100%; + margin-left: 0; + margin-right: -1px; + .border-radius(6px 0 6px 6px); + } +} + + +// Inverted navbar +// ------------------------- + +.navbar-inverse { + color: @navbarInverseText; + + .navbar-inner { + #gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground); + border-color: @navbarInverseBorder; + } + + .brand, + .nav > li > a { + color: @navbarInverseLinkColor; + text-shadow: 0 -1px 0 rgba(0,0,0,.25); + &:hover { + color: @navbarInverseLinkColorHover; + } + } + + .nav > li > a:focus, + .nav > li > a:hover { + background-color: @navbarInverseLinkBackgroundHover; + color: @navbarInverseLinkColorHover; + } + + .nav .active > a, + .nav .active > a:hover, + .nav .active > a:focus { + color: @navbarInverseLinkColorActive; + background-color: @navbarInverseLinkBackgroundActive; + } + + // Inline text links + .navbar-link { + color: @navbarInverseLinkColor; + &:hover { + color: @navbarInverseLinkColorHover; + } + } + + // Dividers in navbar + .divider-vertical { + border-left-color: @navbarInverseBackground; + border-right-color: @navbarInverseBackgroundHighlight; + } + + // Dropdowns + .nav li.dropdown.open > .dropdown-toggle, + .nav li.dropdown.active > .dropdown-toggle, + .nav li.dropdown.open.active > .dropdown-toggle { + background-color: @navbarInverseLinkBackgroundActive; + color: @navbarInverseLinkColorActive; + } + .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: @navbarInverseLinkColor; + border-bottom-color: @navbarInverseLinkColor; + } + .nav li.dropdown.open > .dropdown-toggle .caret, + .nav li.dropdown.active > .dropdown-toggle .caret, + .nav li.dropdown.open.active > .dropdown-toggle .caret { + border-top-color: @navbarInverseLinkColorActive; + border-bottom-color: @navbarInverseLinkColorActive; + } + + // Navbar search + .navbar-search { + .search-query { + color: @white; + background-color: @navbarInverseSearchBackground; + border-color: @navbarInverseSearchBorder; + .box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)"); + .transition(none); + .placeholder(@navbarInverseSearchPlaceholderColor); + + // Focus states (we use .focused since IE7-8 and down doesn't support :focus) + &:focus, + &.focused { + padding: 5px 15px; + color: @grayDark; + text-shadow: 0 1px 0 @white; + background-color: @navbarInverseSearchBackgroundFocus; + border: 0; + .box-shadow(0 0 3px rgba(0,0,0,.15)); + outline: 0; + } + } + } + + // Navbar collapse button + .btn-navbar { + .buttonBackground(darken(@navbarInverseBackgroundHighlight, 5%), darken(@navbarInverseBackground, 5%)); + } + +} + + + diff --git a/less/navs.less b/less/navs.less index 5cb9f9f3a..4c38f7dbf 100644 --- a/less/navs.less +++ b/less/navs.less @@ -1,6 +1,6 @@ -// NAVIGATIONS -// ----------- - +// +// Navs +// -------------------------------------------------- // BASE CLASS @@ -27,7 +27,7 @@ } // Nav headers (for dropdowns and lists) -.nav .nav-header { +.nav-header { display: block; padding: 3px 15px; font-size: 11px; @@ -43,6 +43,7 @@ } + // NAV LIST // -------- @@ -170,10 +171,10 @@ .border-radius(0); } .nav-tabs.nav-stacked > li:first-child > a { - .border-radius(4px 4px 0 0); + .border-top-radius(4px); } .nav-tabs.nav-stacked > li:last-child > a { - .border-radius(0 0 4px 4px); + .border-bottom-radius(4px); } .nav-tabs.nav-stacked > li > a:hover { border-color: #ddd; @@ -194,39 +195,43 @@ // --------- .nav-tabs .dropdown-menu { - .border-radius(0 0 5px 5px); // remove the top rounded corners here since there is a hard edge above the menu + .border-radius(0 0 6px 6px); // remove the top rounded corners here since there is a hard edge above the menu } .nav-pills .dropdown-menu { - .border-radius(4px); // make rounded corners match the pills + .border-radius(6px); // make rounded corners match the pills } // Default dropdown links // ------------------------- // Make carets use linkColor to start -.nav-tabs .dropdown-toggle .caret, -.nav-pills .dropdown-toggle .caret { +.nav .dropdown-toggle .caret { border-top-color: @linkColor; border-bottom-color: @linkColor; margin-top: 6px; } -.nav-tabs .dropdown-toggle:hover .caret, -.nav-pills .dropdown-toggle:hover .caret { +.nav .dropdown-toggle:hover .caret { border-top-color: @linkColorHover; border-bottom-color: @linkColorHover; } +/* move down carets for tabs */ +.nav-tabs .dropdown-toggle .caret { + margin-top: 8px; +} // Active dropdown links // ------------------------- -.nav-tabs .active .dropdown-toggle .caret, -.nav-pills .active .dropdown-toggle .caret { - border-top-color: @grayDark; - border-bottom-color: @grayDark; +.nav .active .dropdown-toggle .caret { + border-top-color: #fff; + border-bottom-color: #fff; +} +.nav-tabs .active .dropdown-toggle .caret { + border-top-color: @gray; + border-bottom-color: @gray; } // Active:hover dropdown links // ------------------------- .nav > .dropdown.active > a:hover { - color: @black; cursor: pointer; } @@ -361,3 +366,19 @@ border-color: #ddd #ddd #ddd transparent; *border-left-color: @white; } + + + +// DISABLED STATES +// --------------- + +// Gray out text +.nav > .disabled > a { + color: @grayLight; +} +// Nuke hover effects +.nav > .disabled > a:hover { + text-decoration: none; + background-color: transparent; + cursor: default; +} diff --git a/less/pager.less b/less/pager.less index 4244b5eb8..2b854b4be 100644 --- a/less/pager.less +++ b/less/pager.less @@ -1,9 +1,10 @@ -// PAGER -// ----- +// +// Pager pagination +// -------------------------------------------------- + .pager { - margin-left: 0; - margin-bottom: @baseLineHeight; + margin: @baseLineHeight 0; list-style: none; text-align: center; .clearfix(); diff --git a/less/pagination.less b/less/pagination.less index 38cf65cc4..2c19880c0 100644 --- a/less/pagination.less +++ b/less/pagination.less @@ -1,5 +1,7 @@ -// PAGINATION -// ---------- +// +// Pagination (multiple pages) +// -------------------------------------------------- + .pagination { height: @baseLineHeight * 2; @@ -16,19 +18,23 @@ .pagination li { display: inline; } -.pagination a { +.pagination a, +.pagination span { float: left; padding: 0 14px; line-height: (@baseLineHeight * 2) - 2; text-decoration: none; - border: 1px solid #ddd; + background-color: @paginationBackground; + border: 1px solid @paginationBorder; border-left-width: 0; } .pagination a:hover, -.pagination .active a { +.pagination .active a, +.pagination .active span { background-color: #f5f5f5; } -.pagination .active a { +.pagination .active a, +.pagination .active span { color: @grayLight; cursor: default; } @@ -39,11 +45,13 @@ background-color: transparent; cursor: default; } -.pagination li:first-child a { +.pagination li:first-child a, +.pagination li:first-child span { border-left-width: 1px; .border-radius(3px 0 0 3px); } -.pagination li:last-child a { +.pagination li:last-child a, +.pagination li:last-child span { .border-radius(0 3px 3px 0); } diff --git a/less/popovers.less b/less/popovers.less index 558d99ec9..2b3f1b059 100644 --- a/less/popovers.less +++ b/less/popovers.less @@ -1,5 +1,7 @@ -// POPOVERS -// -------- +// +// Popovers +// -------------------------------------------------- + .popover { position: absolute; @@ -7,43 +9,109 @@ left: 0; z-index: @zindexPopover; display: none; - padding: 5px; - &.top { margin-top: -5px; } - &.right { margin-left: 5px; } - &.bottom { margin-top: 5px; } - &.left { margin-left: -5px; } - &.top .arrow { #popoverArrow > .top(); } - &.right .arrow { #popoverArrow > .right(); } - &.bottom .arrow { #popoverArrow > .bottom(); } - &.left .arrow { #popoverArrow > .left(); } - .arrow { - position: absolute; - width: 0; - height: 0; - } -} -.popover-inner { - padding: 3px; - width: 280px; - overflow: hidden; - background: @black; // has to be full background declaration for IE fallback - background: rgba(0,0,0,.8); + width: 236px; + padding: 1px; + background-color: @popoverBackground; + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0,0,0,.2); .border-radius(6px); - .box-shadow(0 3px 7px rgba(0,0,0,0.3)); + .box-shadow(0 5px 10px rgba(0,0,0,.2)); + + // Offset the popover to account for the popover arrow + &.top { margin-bottom: 10px; } + &.right { margin-left: 10px; } + &.bottom { margin-top: 10px; } + &.left { margin-right: 10px; } + } + .popover-title { - padding: 9px 15px; - line-height: 1; - background-color: #f5f5f5; - border-bottom:1px solid #eee; - .border-radius(3px 3px 0 0); + margin: 0; // reset heading margin + padding: 8px 14px; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: @popoverTitleBackground; + border-bottom: 1px solid darken(@popoverTitleBackground, 5%); + .border-radius(5px 5px 0 0); } + .popover-content { - padding: 14px; - background-color: @white; - .border-radius(0 0 3px 3px); - .background-clip(padding-box); + padding: 9px 14px; p, ul, ol { margin-bottom: 0; } } + +// Arrows +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: inline-block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover .arrow:after { + content: ""; + z-index: -1; +} + +.popover { + &.top .arrow { + bottom: -@popoverArrowWidth; + left: 50%; + margin-left: -@popoverArrowWidth; + border-width: @popoverArrowWidth @popoverArrowWidth 0; + border-top-color: @popoverArrowColor; + &:after { + border-width: @popoverArrowOuterWidth @popoverArrowOuterWidth 0; + border-top-color: @popoverArrowOuterColor; + bottom: -1px; + left: -@popoverArrowOuterWidth; + } + } + &.right .arrow { + top: 50%; + left: -@popoverArrowWidth; + margin-top: -@popoverArrowWidth; + border-width: @popoverArrowWidth @popoverArrowWidth @popoverArrowWidth 0; + border-right-color: @popoverArrowColor; + &:after { + border-width: @popoverArrowOuterWidth @popoverArrowOuterWidth @popoverArrowOuterWidth 0; + border-right-color: @popoverArrowOuterColor; + bottom: -@popoverArrowOuterWidth; + left: -1px; + } + } + &.bottom .arrow { + top: -@popoverArrowWidth; + left: 50%; + margin-left: -@popoverArrowWidth; + border-width: 0 @popoverArrowWidth @popoverArrowWidth; + border-bottom-color: @popoverArrowColor; + &:after { + border-width: 0 @popoverArrowOuterWidth @popoverArrowOuterWidth; + border-bottom-color: @popoverArrowOuterColor; + top: -1px; + left: -@popoverArrowOuterWidth; + } + } + &.left .arrow { + top: 50%; + right: -@popoverArrowWidth; + margin-top: -@popoverArrowWidth; + border-width: @popoverArrowWidth 0 @popoverArrowWidth @popoverArrowWidth; + border-left-color: @popoverArrowColor; + &:after { + border-width: @popoverArrowOuterWidth 0 @popoverArrowOuterWidth @popoverArrowOuterWidth; + border-left-color: @popoverArrowOuterColor; + bottom: -@popoverArrowOuterWidth; + right: -1px; + } + } +} diff --git a/less/progress-bars.less b/less/progress-bars.less index 3b47e6482..36744d89c 100644 --- a/less/progress-bars.less +++ b/less/progress-bars.less @@ -1,5 +1,6 @@ -// PROGRESS BARS -// ------------- +// +// Progress bars +// -------------------------------------------------- // ANIMATIONS @@ -43,8 +44,8 @@ // Outer container .progress { overflow: hidden; - height: 18px; - margin-bottom: 18px; + height: @baseLineHeight; + margin-bottom: @baseLineHeight; #gradient > .vertical(#f5f5f5, #f9f9f9); .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); .border-radius(4px); @@ -53,8 +54,9 @@ // Bar of progress .progress .bar { width: 0%; - height: 18px; + height: 100%; color: @white; + float: left; font-size: 12px; text-align: center; text-shadow: 0 -1px 0 rgba(0,0,0,.25); @@ -63,6 +65,9 @@ .box-sizing(border-box); .transition(width .6s ease); } +.progress .bar + .bar { + .box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)"); +} // Striped bars .progress-striped .bar { @@ -85,33 +90,33 @@ // ------ // Danger (red) -.progress-danger .bar { +.progress-danger .bar, .progress .bar-danger { #gradient > .vertical(#ee5f5b, #c43c35); } -.progress-danger.progress-striped .bar { +.progress-danger.progress-striped .bar, .progress-striped .bar-danger { #gradient > .striped(#ee5f5b); } // Success (green) -.progress-success .bar { +.progress-success .bar, .progress .bar-success { #gradient > .vertical(#62c462, #57a957); } -.progress-success.progress-striped .bar { +.progress-success.progress-striped .bar, .progress-striped .bar-success { #gradient > .striped(#62c462); } // Info (teal) -.progress-info .bar { +.progress-info .bar, .progress .bar-info { #gradient > .vertical(#5bc0de, #339bb9); } -.progress-info.progress-striped .bar { +.progress-info.progress-striped .bar, .progress-striped .bar-info { #gradient > .striped(#5bc0de); } // Warning (orange) -.progress-warning .bar { +.progress-warning .bar, .progress .bar-warning { #gradient > .vertical(lighten(@orange, 15%), @orange); } -.progress-warning.progress-striped .bar { +.progress-warning.progress-striped .bar, .progress-striped .bar-warning { #gradient > .striped(lighten(@orange, 15%)); } diff --git a/less/reset.less b/less/reset.less index 2332e03c3..fc27e9c87 100644 --- a/less/reset.less +++ b/less/reset.less @@ -1,6 +1,8 @@ -// Reset.less -// Adapted from Normalize.css http://github.com/necolas/normalize.css -// ------------------------------------------------------------------------ +// +// Modals +// Adapted from http://github.com/necolas/normalize.css +// -------------------------------------------------- + // Display in IE6-9 and FF3 // ------------------------- @@ -76,6 +78,7 @@ sub { img { max-width: 100%; // Make images inherently responsive + height: auto; // Make images inherently responsive vertical-align: middle; border: 0; -ms-interpolation-mode: bicubic; diff --git a/less/responsive-1200px-min.less b/less/responsive-1200px-min.less index a7c9f4e00..4f35ba6ca 100644 --- a/less/responsive-1200px-min.less +++ b/less/responsive-1200px-min.less @@ -1,23 +1,25 @@ -// LARGE DESKTOP & UP -// ------------------ +// +// Responsive: Large desktop and up +// -------------------------------------------------- + @media (min-width: 1200px) { // Fixed grid - #grid > .core(70px, 30px); + #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200); // Fluid grid - #grid > .fluid(5.982905983%, 2.564102564%); + #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200); // Input grid - #grid > .input(70px, 30px); + #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200); // Thumbnails .thumbnails { - margin-left: -30px; + margin-left: -@gridGutterWidth1200; } .thumbnails > li { - margin-left: 30px; + margin-left: @gridGutterWidth1200; } .row-fluid .thumbnails { margin-left: 0; diff --git a/less/responsive-767px-max.less b/less/responsive-767px-max.less index 614c6905c..b2e3da25c 100644 --- a/less/responsive-767px-max.less +++ b/less/responsive-767px-max.less @@ -1,73 +1,8 @@ -// UP TO LANDSCAPE PHONE -// --------------------- - -@media (max-width: 480px) { - - // Smooth out the collapsing/expanding nav - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); // activate the GPU - } - - // Block level the page header small tag for readability - .page-header h1 small { - display: block; - line-height: @baseLineHeight; - } - - // Update checkboxes for iOS - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - - // Remove the horizontal form styles - .form-horizontal .control-group > label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - // Move over all input controls and content - .form-horizontal .controls { - margin-left: 0; - } - // Move the options list down to align with labels - .form-horizontal .control-list { - padding-top: 0; // has to be padding because margin collaspes - } - // Move over buttons in .form-actions to align with .controls - .form-horizontal .form-actions { - padding-left: 10px; - padding-right: 10px; - } - - // Modals - .modal { - position: absolute; - top: 10px; - left: 10px; - right: 10px; - width: auto; - margin: 0; - &.fade.in { top: auto; } - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - - // Carousel - .carousel-caption { - position: static; - } - -} - - - -// LANDSCAPE PHONE TO SMALL DESKTOP & PORTRAIT TABLET +// +// Responsive: Landscape phone to desktop/tablet // -------------------------------------------------- + @media (max-width: 767px) { // Padding to set content in a bit @@ -116,6 +51,10 @@ .thumbnails { margin-left: 0; } + .thumbnails > li { + float: none; + margin-left: 0; // Reset the default margin for all li elements when no .span* classes are present + } // Make all grid-sized elements block level again [class*="span"], .row-fluid [class*="span"] { @@ -124,6 +63,11 @@ width: auto; margin-left: 0; } + .span12, + .row-fluid .span12 { + width: 100%; + .box-sizing(border-box); + } // FORM FIELDS // ----------- @@ -146,4 +90,78 @@ width: auto; } + // Modals + .modal { + position: fixed; + top: 20px; + left: 20px; + right: 20px; + width: auto; + margin: 0; + &.fade.in { top: auto; } + } + +} + + + +// UP TO LANDSCAPE PHONE +// --------------------- + +@media (max-width: 480px) { + + // Smooth out the collapsing/expanding nav + .nav-collapse { + -webkit-transform: translate3d(0, 0, 0); // activate the GPU + } + + // Block level the page header small tag for readability + .page-header h1 small { + display: block; + line-height: @baseLineHeight; + } + + // Update checkboxes for iOS + input[type="checkbox"], + input[type="radio"] { + border: 1px solid #ccc; + } + + // Remove the horizontal form styles + .form-horizontal .control-group > label { + float: none; + width: auto; + padding-top: 0; + text-align: left; + } + // Move over all input controls and content + .form-horizontal .controls { + margin-left: 0; + } + // Move the options list down to align with labels + .form-horizontal .control-list { + padding-top: 0; // has to be padding because margin collaspes + } + // Move over buttons in .form-actions to align with .controls + .form-horizontal .form-actions { + padding-left: 10px; + padding-right: 10px; + } + + // Modals + .modal { + top: 10px; + left: 10px; + right: 10px; + } + .modal-header .close { + padding: 10px; + margin: -10px; + } + + // Carousel + .carousel-caption { + position: static; + } + } diff --git a/less/responsive-768px-979px.less b/less/responsive-768px-979px.less index 76f4f6df1..8e8c486a0 100644 --- a/less/responsive-768px-979px.less +++ b/less/responsive-768px-979px.less @@ -1,16 +1,18 @@ -// PORTRAIT TABLET TO DEFAULT DESKTOP -// ---------------------------------- +// +// Responsive: Tablet to desktop +// -------------------------------------------------- + @media (min-width: 768px) and (max-width: 979px) { // Fixed grid - #grid > .core(42px, 20px); + #grid > .core(@gridColumnWidth768, @gridGutterWidth768); // Fluid grid - #grid > .fluid(5.801104972%, 2.762430939%); + #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768); // Input grid - #grid > .input(42px, 20px); + #grid > .input(@gridColumnWidth768, @gridGutterWidth768); // No need to reset .thumbnails here since it's the same @gridGutterWidth diff --git a/less/responsive-navbar.less b/less/responsive-navbar.less index 8d31db531..3498863c8 100644 --- a/less/responsive-navbar.less +++ b/less/responsive-navbar.less @@ -1,6 +1,11 @@ +// +// Responsive: Navbar +// -------------------------------------------------- + + // TABLETS AND BELOW // ----------------- -@media (max-width: 979px) { +@media (max-width: @navbarCollapseWidth) { // UNFIX THE TOPBAR // ---------------- @@ -8,7 +13,7 @@ body { padding-top: 0; } - // Unfix the navbar + // Unfix the navbars .navbar-fixed-top, .navbar-fixed-bottom { position: static; @@ -61,7 +66,7 @@ // Nav and dropdown links in navbar .nav-collapse .nav > li > a, .nav-collapse .dropdown-menu a { - padding: 6px 15px; + padding: 9px 15px; font-weight: bold; color: @navbarLinkColor; .border-radius(3px); @@ -79,6 +84,10 @@ .nav-collapse .dropdown-menu a:hover { background-color: @navbarBackground; } + .navbar-inverse .nav-collapse .nav > li > a:hover, + .navbar-inverse .nav-collapse .dropdown-menu a:hover { + background-color: @navbarInverseBackground; + } // Buttons in the navbar .nav-collapse.in .btn-group { margin-top: 5px; @@ -138,16 +147,20 @@ padding-left: 10px; padding-right: 10px; } + + } // DEFAULT DESKTOP // --------------- -// Required to make the collapsing navbar work on regular desktops @media (min-width: 980px) { + + // Required to make the collapsing navbar work on regular desktops .nav-collapse.collapse { height: auto !important; overflow: visible !important; } -}
\ No newline at end of file + +} diff --git a/less/responsive-utilities.less b/less/responsive-utilities.less index 572846c0f..2c3f6c15f 100644 --- a/less/responsive-utilities.less +++ b/less/responsive-utilities.less @@ -1,5 +1,7 @@ -// RESPONSIVE CLASSES -// ------------------ +// +// Responsive: Utility classes +// -------------------------------------------------- + // Hide from screenreaders and browsers // Credit: HTML5 Boilerplate @@ -13,29 +15,29 @@ // For desktops .visible-phone { display: none !important; } .visible-tablet { display: none !important; } -.visible-desktop { } // Don't set initially .hidden-phone { } .hidden-tablet { } .hidden-desktop { display: none !important; } - -// Phones only -@media (max-width: 767px) { - // Show - .visible-phone { display: inherit !important; } // Use inherit to restore previous behavior - // Hide - .hidden-phone { display: none !important; } - // Hide everything else - .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important; } -} +.visible-desktop { display: inherit !important; } // Tablets & small desktops only @media (min-width: 768px) and (max-width: 979px) { + // Hide everything else + .hidden-desktop { display: inherit !important; } + .visible-desktop { display: none !important ; } // Show .visible-tablet { display: inherit !important; } // Hide .hidden-tablet { display: none !important; } +} + +// Phones only +@media (max-width: 767px) { // Hide everything else .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important ; } + .visible-desktop { display: none !important; } + // Show + .visible-phone { display: inherit !important; } // Use inherit to restore previous behavior + // Hide + .hidden-phone { display: none !important; } } diff --git a/less/responsive.less b/less/responsive.less index 734b1988b..5a62e4a50 100644 --- a/less/responsive.less +++ b/less/responsive.less @@ -1,5 +1,5 @@ /*! - * Bootstrap Responsive v2.0.4 + * Bootstrap Responsive v2.1.0 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 @@ -31,14 +31,14 @@ // MEDIA QUERIES // ------------------ -// Phones to portrait tablets and narrow desktops -@import "responsive-767px-max.less"; +// Large desktops +@import "responsive-1200px-min.less"; // Tablets to regular desktops @import "responsive-768px-979px.less"; -// Large desktops -@import "responsive-1200px-min.less"; +// Phones to portrait tablets and narrow desktops +@import "responsive-767px-max.less"; // RESPONSIVE NAVBAR diff --git a/less/scaffolding.less b/less/scaffolding.less index 57c74eda0..342dcf705 100644 --- a/less/scaffolding.less +++ b/less/scaffolding.less @@ -1,10 +1,10 @@ +// // Scaffolding -// Basic and global styles for generating a grid system, structural layout, and page templates -// ------------------------------------------------------------------------------------------- +// -------------------------------------------------- // Body reset -// ---------- +// ------------------------- body { margin: 0; @@ -17,7 +17,7 @@ body { // Links -// ----- +// ------------------------- a { color: @linkColor; @@ -27,3 +27,25 @@ a:hover { color: @linkColorHover; text-decoration: underline; } + + +// Images +// ------------------------- + +.img-rounded { + .border-radius(6px); +} + +.img-polaroid { + padding: 4px; + background-color: #fff; + border: 1px solid #ccc; + border: 1px solid rgba(0,0,0,.2); + -webkit-box-shadow: 0 1px 3px rgba(0,0,0,.1); + -moz-box-shadow: 0 1px 3px rgba(0,0,0,.1); + box-shadow: 0 1px 3px rgba(0,0,0,.1); +} + +.img-circle { + .border-radius(500px); +} diff --git a/less/sprites.less b/less/sprites.less index 72a3a916b..8d5e40e7a 100644 --- a/less/sprites.less +++ b/less/sprites.less @@ -1,6 +1,6 @@ -// SPRITES -// Glyphs and icons for buttons, nav, and more -// ------------------------------------------- +// +// Sprites +// -------------------------------------------------- // ICONS @@ -25,9 +25,17 @@ background-image: url("@{iconSpritePath}"); background-position: 14px 14px; background-repeat: no-repeat; - + margin-top: 1px; } -.icon-white { + +/* White icons with optional class, or on hover/active states of certain elements */ +.icon-white, +.nav > .active > a > [class^="icon-"], +.nav > .active > a > [class*=" icon-"], +.dropdown-menu > li > a:hover > [class^="icon-"], +.dropdown-menu > li > a:hover > [class*=" icon-"], +.dropdown-menu > .active > a > [class^="icon-"], +.dropdown-menu > .active > a > [class*=" icon-"] { background-image: url("@{iconWhiteSpritePath}"); } @@ -145,7 +153,7 @@ .icon-warning-sign { background-position: -144px -120px; } .icon-plane { background-position: -168px -120px; } .icon-calendar { background-position: -192px -120px; } -.icon-random { background-position: -216px -120px; } +.icon-random { background-position: -216px -120px; width: 16px; } .icon-comment { background-position: -240px -120px; } .icon-magnet { background-position: -264px -120px; } .icon-chevron-up { background-position: -288px -120px; } @@ -153,7 +161,7 @@ .icon-retweet { background-position: -336px -120px; } .icon-shopping-cart { background-position: -360px -120px; } .icon-folder-close { background-position: -384px -120px; } -.icon-folder-open { background-position: -408px -120px; } +.icon-folder-open { background-position: -408px -120px; width: 16px; } .icon-resize-vertical { background-position: -432px -119px; } // 1px, 1px off .icon-resize-horizontal { background-position: -456px -118px; } // 1px, 2px off @@ -177,15 +185,3 @@ .icon-filter { background-position: -408px -144px; } .icon-briefcase { background-position: -432px -144px; } .icon-fullscreen { background-position: -456px -144px; } - - - - - - - - - - - - diff --git a/less/tables.less b/less/tables.less index b4f6027bf..853b97e39 100644 --- a/less/tables.less +++ b/less/tables.less @@ -1,7 +1,6 @@ // -// Tables.less -// Tables for, you guessed it, tabular data -// ---------------------------------------- +// Tables +// -------------------------------------------------- // BASE TABLES @@ -70,7 +69,7 @@ table { .table-bordered { border: 1px solid @tableBorder; border-collapse: separate; // Done so we can round those corners! - *border-collapse: collapsed; // IE7 can't round corners anyway + *border-collapse: collapse; // IE7 can't round corners anyway border-left: 0; .border-radius(4px); th, @@ -104,21 +103,44 @@ table { } // For first th or td in the first row in the first thead or tbody thead:last-child tr:last-child th:first-child, - tbody:last-child tr:last-child td:first-child { + tbody:last-child tr:last-child td:first-child, + tfoot:last-child tr:last-child td:first-child { .border-radius(0 0 0 4px); -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomleft: 4px; } thead:last-child tr:last-child th:last-child, - tbody:last-child tr:last-child td:last-child { + tbody:last-child tr:last-child td:last-child, + tfoot:last-child tr:last-child td:last-child { -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; -moz-border-radius-bottomright: 4px; } + + // Special fixes to round the left border on the first td/th + caption + thead tr:first-child th:first-child, + caption + tbody tr:first-child td:first-child, + colgroup + thead tr:first-child th:first-child, + colgroup + tbody tr:first-child td:first-child { + -webkit-border-top-left-radius: 4px; + border-top-left-radius: 4px; + -moz-border-radius-topleft: 4px; + } + caption + thead tr:first-child th:last-child, + caption + tbody tr:first-child td:last-child, + colgroup + thead tr:first-child th:last-child, + colgroup + tbody tr:first-child td:last-child { + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; + -moz-border-right-topleft: 4px; + } + } + + // ZEBRA-STRIPING // -------------- @@ -136,10 +158,12 @@ table { // HOVER EFFECT // ------------ // Placed here since it has to come after the potential zebra striping -.table { - tbody tr:hover td, - tbody tr:hover th { - background-color: @tableBackgroundHover; +.table-hover { + tbody { + tr:hover td, + tr:hover th { + background-color: @tableBackgroundHover; + } } } @@ -147,7 +171,15 @@ table { // TABLE CELL SIZING // ----------------- -// Change the columns +// Reset default grid behavior +table [class*=span], +.row-fluid table [class*=span] { + display: table-cell; + float: none; // undo default grid column styles + margin-left: 0; // undo default grid column styles +} + +// Change the column widths to account for td/th padding table { .span1 { .tableColumns(1); } .span2 { .tableColumns(2); } @@ -174,3 +206,20 @@ table { .span23 { .tableColumns(23); } .span24 { .tableColumns(24); } } + + +// TABLE BACKGROUNDS +// ----------------- +// Exact selectors below required to override .table-striped + +.table { + tbody tr.success td { + background-color: @successBackground; + } + tbody tr.error td { + background-color: @errorBackground; + } + tbody tr.info td { + background-color: @infoBackground; + } +} diff --git a/less/tests/css-tests.css b/less/tests/css-tests.css index e0870be44..6001f53aa 100644 --- a/less/tests/css-tests.css +++ b/less/tests/css-tests.css @@ -12,9 +12,24 @@ body { .subhead { margin-bottom: 36px; } -h4 { +/*h4 { margin-bottom: 5px; } +*/ + +.type-test { + margin-bottom: 20px; + padding: 0 20px 20px; + background: url(../../docs/assets/img/grid-baseline-20px.png); +} +.type-test h1, +.type-test h2, +.type-test h3, +.type-test h4, +.type-test h5, +.type-test h6 { + background-color: rgba(255,0,0,.2); +} /* colgroup tests */ diff --git a/less/tests/css-tests.html b/less/tests/css-tests.html index b7177e5c6..6786454cc 100644 --- a/less/tests/css-tests.html +++ b/less/tests/css-tests.html @@ -34,7 +34,7 @@ <!-- Navbar ================================================== --> - <div class="navbar navbar-fixed-top"> + <div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> <a class="brand" href="../../docs/index.html">Bootstrap</a> @@ -42,17 +42,60 @@ </div> </div> - <div class="container"> - <!-- Masthead ================================================== --> <header class="jumbotron subhead" id="overview"> - <h1>CSS Tests</h1> - <p class="lead">One stop shop for quick debugging and edge-case tests of CSS.</p> + <div class="container"> + <h1>CSS Tests</h1> + <p class="lead">One stop shop for quick debugging and edge-case tests of CSS.</p> + </div> </header> +<div class="bs-docs-canvas"> + + <div class="container"> + + + +<!-- Typography +================================================== --> + +<div class="page-header"> + <h1>Typography</h1> +</div> + +<div class="row"> + <div class="span6"> + <div class="type-test"> + <h1>h1. Heading 1</h1> + <h2>h2. Heading 2</h2> + <h3>h3. Heading 3</h3> + <h4>h4. Heading 4</h4> + <h5>h5. Heading 5</h5> + <h6>h6. Heading 6</h6> + <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> + </div> + </div> + <div class="span6"> + <div class="type-test"> + <h1>h1. Heading 1</h1> + <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> + <h2>h2. Heading 2</h2> + <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> + <h3>h3. Heading 3</h3> + <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> + <h4>h4. Heading 4</h4> + <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> + <h5>h5. Heading 5</h5> + <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> + <h6>h6. Heading 6</h6> + <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> + </div> + </div> +</div> + <!-- Fluid grid @@ -363,6 +406,13 @@ <td>3</td> </tr> </tbody> + <tfoot> + <tr> + <td>3</td> + <td>6</td> + <td>9</td> + </tr> + </tfoot> </table> <h4>Bordered with thead, with colgroup</h4> <table class="table table-bordered"> @@ -373,9 +423,9 @@ </colgroup> <thead> <tr> - <td>1</td> - <td>2</td> - <td>3</td> + <th>A</th> + <th>B</th> + <th>C</th> </tr> </thead> <tbody> @@ -395,6 +445,13 @@ <td>3</td> </tr> </tbody> + <tfoot> + <tr> + <td>3</td> + <td>6</td> + <td>9</td> + </tr> + </tfoot> </table> </div><!--/span--> <div class="span6"> @@ -425,6 +482,13 @@ <td>3</td> </tr> </tbody> + <tfoot> + <tr> + <td>3</td> + <td>6</td> + <td>9</td> + </tr> + </tfoot> </table> <h4>Bordered with rowspan and colspan</h4> <table class="table table-bordered"> @@ -458,6 +522,73 @@ </div><!--/row--> +<h4>Grid sizing</h4> +<div class="row"> + <div class="span12"> + <table class="table table-bordered"> + <thead> + <tr> + <th class="span3">1</th> + <th class="span4">2</th> + <th>3</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="2">1 and 2</td> + <td>3</td> + </tr> + <tr> + <td>1</td> + <td rowspan="2">2</td> + <td>3</td> + </tr> + <tr> + <td rowspan="2">1</td> + <td>3</td> + </tr> + <tr> + <td colspan="2">2 and 3</td> + </tr> + </tbody> + </table> + </div> +</div><!--/row--> + +<h4>Fluid grid sizing</h4> +<div class="row-fluid"> + <div class="span12"> + <table class="table table-bordered"> + <thead> + <tr> + <th class="span3">1</th> + <th class="span4">2</th> + <th>3</th> + </tr> + </thead> + <tbody> + <tr> + <td colspan="2">1 and 2</td> + <td>3</td> + </tr> + <tr> + <td>1</td> + <td rowspan="2">2</td> + <td>3</td> + </tr> + <tr> + <td rowspan="2">1</td> + <td>3</td> + </tr> + <tr> + <td colspan="2">2 and 3</td> + </tr> + </tbody> + </table> + </div> +</div><!--/row--> + + <!-- Forms ================================================== --> @@ -472,17 +603,21 @@ <form> <div class="controls"> <div class="input-prepend"> - <span class="add-on">@</span><input class="span2" id="prependedInput" size="16" type="text"> + <span class="add-on">@</span> + <input class="span2" id="prependedInput" size="16" type="text"> </div> </div> <div class="controls"> <div class="input-append"> - <input class="span2" id="prependedInput" size="16" type="text"><span class="add-on">@</span> + <input class="span2" id="prependedInput" size="16" type="text"> + <span class="add-on">@</span> </div> </div> <div class="controls"> <div class="input-prepend input-append"> - <span class="add-on">$</span><input class="span2" id="prependedInput" size="16" type="text"><span class="add-on">.00</span> + <span class="add-on">$</span> + <input class="span2" id="prependedInput" size="16" type="text"> + <span class="add-on">.00</span> </div> </div> </form> @@ -491,10 +626,17 @@ <h4>Prepend and append with uneditable</h4> <form> <div class="input-prepend"> - <span class="add-on">$</span><span class="span2 uneditable-input">Some value here</span> + <span class="add-on">$</span> + <span class="span2 uneditable-input">Some value here</span> </div> <div class="input-append"> - <span class="span2 uneditable-input">Some value here</span><span class="add-on">.00</span> + <span class="span2 uneditable-input">Some value here</span> + <span class="add-on">.00</span> + </div> + <div class="input-prepend input-append"> + <span class="add-on">$</span> + <span class="span2 uneditable-input">Some value here</span> + <span class="add-on">.00</span> </div> </form> </div><!--/span--> @@ -654,8 +796,51 @@ </div><!--/span--> </div><!--/row--> </div> + <br> +<h4>Inline form in fluid row</h4> + +<div class="row-fluid"> + <div class="span12"> + <form class="form-inline"> + <input type="text" class="span3" placeholder="Email"> + <input type="password" class="span3" placeholder="Password"> + <label class="checkbox"> + <input type="checkbox"> Remember me + </label> + <button type="submit" class="btn">Sign in</button> + </form> + </div> +</div> + + +<br> + + +<h4>Fluid textarea at .span12</h4> +<div class="row-fluid"> + <div class="span12"> + <textarea class="span12"></textarea> + </div> +</div> + + +<br> + + +<h4>Selects</h4> +<form> + <select class="span4"> + <option>Option</option> + </select> +</form> + + +<br> + + + <!-- Dropdowns ================================================== --> @@ -848,6 +1033,7 @@ </div> </div> <!-- /tabbable --> +<br> <!-- Labels @@ -869,27 +1055,104 @@ </form> </div><!--/span--> <div class="span4"> - + <button class="btn">Action <span class="badge">2</span></button> + <button class="btn">Action <span class="label">2</span></button> </div><!--/span--> </div><!--/row--> +<br> + + +<!-- Button groups +================================================== --> + +<div class="page-header"> + <h1>Buttons</h1> +</div> + +<table class="table table-bordered"> + <tbody> + <tr> + <td> + Maecenas faucibus mollis interdum. Nulla vitae elit libero, a pharetra augue. Donec ullamcorper nulla non metus auctor fringilla. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. + </td> + <td> + <div class="btn-group"> + <button class="btn">1</button> + <button class="btn">2</button> + <button class="btn">3</button> + <button class="btn">4</button> + </div> + </td> + </tr> + </tbody> +</table> + +<h4>Mini buttons: text and icon</h4> +<div class="btn-group"> + <button class="btn btn-mini">Button text</button> + <button class="btn btn-mini"><i class="icon-cog"></i></button> +</div> + +<br> + + +<!-- Responsive utility classes +================================================== --> + +<div class="page-header"> + <h1>Responsive utility classes</h1> +</div> + +<h4>Visible on...</h4> +<ul class="responsive-utilities-test visible-on"> + <li>Phone<span class="visible-phone">✔ Phone</span></li> + <li>Tablet<span class="visible-tablet">✔ Tablet</span></li> + <li>Desktop<span class="visible-desktop">✔ Desktop</span></li> +</ul> +<ul class="responsive-utilities-test visible-on"> + <li>Phone + Tablet<span class="visible-phone visible-tablet">✔ Phone + Tablet</span></li> + <li>Tablet + Desktop<span class="visible-tablet visible-desktop">✔ Tablet + Desktop</span></li> + <li>All<span class="visible-phone visible-tablet visible-desktop">✔ All</span></li> +</ul> +<h4>Hidden on...</h4> +<ul class="responsive-utilities-test hidden-on"> + <li>Phone<span class="hidden-phone">✔ Phone</span></li> + <li>Tablet<span class="hidden-tablet">✔ Tablet</span></li> + <li>Desktop<span class="hidden-desktop">✔ Desktop</span></li> +</ul> +<ul class="responsive-utilities-test hidden-on"> + <li>Phone + Tablet<span class="hidden-phone hidden-tablet">✔ Phone + Tablet</span></li> + <li>Tablet + Desktop<span class="hidden-tablet hidden-desktop">✔ Tablet + Desktop</span></li> + <li>All<span class="hidden-phone hidden-tablet hidden-desktop">✔ All</span></li> +</ul> - <!-- Footer - ================================================== --> - <footer class="footer"> + </div><!-- /container --> + + + + <!-- Footer + ================================================== --> + <footer class="footer"> + <div class="container"> <p class="pull-right"><a href="#">Back to top</a></p> <p>Designed and built with all the love in the world <a href="http://twitter.com/twitter" target="_blank">@twitter</a> by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> <p>Code licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>. Documentation licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> <p>Icons from <a href="http://glyphicons.com">Glyphicons Free</a>, licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - </footer> - - </div><!-- /container --> + <ul class="footer-links"> + <li><a href="http://blog.getbootstrap.com">Read the blog</a></li> + <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Submit issues</a></li> + <li><a href="https://github.com/twitter/bootstrap/wiki">Roadmap and changelog</a></li> + </ul> + </div> + </footer> +</div> <!-- Le javascript diff --git a/less/thumbnails.less b/less/thumbnails.less index aa69f8e33..91b75f785 100644 --- a/less/thumbnails.less +++ b/less/thumbnails.less @@ -1,5 +1,8 @@ -// THUMBNAILS -// ---------- +// +// Thumbnails +// -------------------------------------------------- + + // Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files // Make wrapper ul behave like the grid @@ -24,10 +27,11 @@ .thumbnail { display: block; padding: 4px; - line-height: 1; + line-height: @baseLineHeight; border: 1px solid #ddd; .border-radius(4px); - .box-shadow(0 1px 1px rgba(0,0,0,.075)); + .box-shadow(0 1px 3px rgba(0,0,0,.055)); + .transition(all .2s ease-in-out); } // Add a hover state for linked versions only a.thumbnail:hover { @@ -44,4 +48,5 @@ a.thumbnail:hover { } .thumbnail .caption { padding: 9px; + color: @gray; } diff --git a/less/tooltip.less b/less/tooltip.less index 5111a193f..fba1856f5 100644 --- a/less/tooltip.less +++ b/less/tooltip.less @@ -1,6 +1,9 @@ -// TOOLTIP -// ------= +// +// Tooltips +// -------------------------------------------------- + +// Base class .tooltip { position: absolute; z-index: @zindexTooltip; @@ -10,26 +13,58 @@ font-size: 11px; .opacity(0); &.in { .opacity(80); } - &.top { margin-top: -2px; } - &.right { margin-left: 2px; } - &.bottom { margin-top: 2px; } - &.left { margin-left: -2px; } - &.top .tooltip-arrow { #popoverArrow > .top(); } - &.left .tooltip-arrow { #popoverArrow > .left(); } - &.bottom .tooltip-arrow { #popoverArrow > .bottom(); } - &.right .tooltip-arrow { #popoverArrow > .right(); } + &.top { margin-top: -3px; } + &.right { margin-left: 3px; } + &.bottom { margin-top: 3px; } + &.left { margin-left: -3px; } } + +// Wrapper for the tooltip content .tooltip-inner { max-width: 200px; padding: 3px 8px; - color: @white; + color: @tooltipColor; text-align: center; text-decoration: none; - background-color: @black; + background-color: @tooltipBackground; .border-radius(4px); } + +// Arrows .tooltip-arrow { position: absolute; width: 0; height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip { + &.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -@tooltipArrowWidth; + border-width: @tooltipArrowWidth @tooltipArrowWidth 0; + border-top-color: @tooltipArrowColor; + } + &.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -@tooltipArrowWidth; + border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0; + border-right-color: @tooltipArrowColor; + } + &.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -@tooltipArrowWidth; + border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth; + border-left-color: @tooltipArrowColor; + } + &.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -@tooltipArrowWidth; + border-width: 0 @tooltipArrowWidth @tooltipArrowWidth; + border-bottom-color: @tooltipArrowColor; + } } diff --git a/less/type.less b/less/type.less index bdf8e605e..58723f788 100644 --- a/less/type.less +++ b/less/type.less @@ -1,17 +1,13 @@ -// Typography.less -// Headings, body text, lists, code, and more for a versatile and durable typography system -// ---------------------------------------------------------------------------------------- +// +// Typography +// -------------------------------------------------- -// BODY TEXT -// --------- +// Body text +// ------------------------- p { margin: 0 0 @baseLineHeight / 2; - small { - font-size: @baseFontSize - 2; - color: @grayLight; - } } .lead { margin-bottom: @baseLineHeight; @@ -20,73 +16,69 @@ p { line-height: @baseLineHeight * 1.5; } -// HEADINGS -// -------- + +// Emphasis & misc +// ------------------------- + +small { + font-size: 85%; // Ex: 14px base font * 85% = about 12px +} +strong { + font-weight: bold; +} +em { + font-style: italic; +} +cite { + font-style: normal; +} +.muted { + color: @grayLight; +} + + +// Headings +// ------------------------- h1, h2, h3, h4, h5, h6 { - margin: 0; + margin: (@baseLineHeight / 2) 0; font-family: @headingsFontFamily; font-weight: @headingsFontWeight; + line-height: 1; color: @headingsColor; text-rendering: optimizelegibility; // Fix the character spacing for headings small { font-weight: normal; + line-height: 1; color: @grayLight; } } -h1 { - font-size: 30px; - line-height: @baseLineHeight * 2; - small { - font-size: 18px; - } -} -h2 { - font-size: 24px; - line-height: @baseLineHeight * 2; - small { - font-size: 18px; - } -} -h3 { - font-size: 18px; - line-height: @baseLineHeight * 1.5; - small { - font-size: 14px; - } -} -h4, h5, h6 { - line-height: @baseLineHeight; -} -h4 { - font-size: 14px; - small { - font-size: 12px; - } -} -h5 { - font-size: 12px; -} -h6 { - font-size: 11px; - color: @grayLight; - text-transform: uppercase; -} +h1 { font-size: 36px; line-height: 40px; } +h2 { font-size: 30px; line-height: 40px; } +h3 { font-size: 24px; line-height: 40px; } +h4 { font-size: 18px; line-height: 20px; } +h5 { font-size: 14px; line-height: 20px; } +h6 { font-size: 12px; line-height: 20px; } + +h1 small { font-size: 24px; } +h2 small { font-size: 18px; } +h3 small { font-size: 14px; } +h4 small { font-size: 14px; } + // Page header +// ------------------------- + .page-header { - padding-bottom: @baseLineHeight - 1; - margin: @baseLineHeight 0; + padding-bottom: (@baseLineHeight / 2) - 1; + margin: @baseLineHeight 0 (@baseLineHeight * 1.5); border-bottom: 1px solid @grayLighter; } -.page-header h1 { - line-height: 1; -} -// LISTS -// ----- +// Lists +// -------------------------------------------------- // Unordered and Ordered lists ul, ol { @@ -99,12 +91,6 @@ ol ol, ol ul { margin-bottom: 0; } -ul { - list-style: disc; -} -ol { - list-style: decimal; -} li { line-height: @baseLineHeight; } @@ -124,7 +110,6 @@ dd { } dt { font-weight: bold; - line-height: @baseLineHeight - 1; // fix jank Helvetica Neue font bug } dd { margin-left: @baseLineHeight / 2; @@ -154,17 +139,6 @@ hr { border-bottom: 1px solid @white; } -// Emphasis -strong { - font-weight: bold; -} -em { - font-style: italic; -} -.muted { - color: @grayLight; -} - // Abbreviations and acronyms abbr[title] { cursor: help; @@ -204,6 +178,14 @@ blockquote { small { text-align: right; } + small { + &:before { + content: ''; + } + &:after { + content: '\00A0 \2014'; + } + } } } @@ -222,11 +204,3 @@ address { font-style: normal; line-height: @baseLineHeight; } - -// Misc -small { - font-size: 100%; -} -cite { - font-style: normal; -} diff --git a/less/utilities.less b/less/utilities.less index d60d22031..314b4ffdb 100644 --- a/less/utilities.less +++ b/less/utilities.less @@ -1,5 +1,7 @@ -// UTILITY CLASSES -// --------------- +// +// Utility classes +// -------------------------------------------------- + // Quick floats .pull-right { @@ -21,3 +23,8 @@ .invisible { visibility: hidden; } + +// For Affix plugin +.affix { + position: fixed; +} diff --git a/less/variables.less b/less/variables.less index b931d3d2a..a5c8cdd98 100644 --- a/less/variables.less +++ b/less/variables.less @@ -1,10 +1,9 @@ -// Variables.less -// Variables to customize the look and feel of Bootstrap -// ----------------------------------------------------- - +// +// Variables +// -------------------------------------------------- -// GLOBAL VALUES +// Global values // -------------------------------------------------- @@ -47,11 +46,11 @@ // ------------------------- @sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; @serifFontFamily: Georgia, "Times New Roman", Times, serif; -@monoFontFamily: Menlo, Monaco, Consolas, "Courier New", monospace; +@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; -@baseFontSize: 13px; +@baseFontSize: 14px; @baseFontFamily: @sansFontFamily; -@baseLineHeight: 18px; +@baseLineHeight: 20px; @altFontFamily: @serifFontFamily; @headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily @@ -71,10 +70,10 @@ // ------------------------- @btnBackground: @white; @btnBackgroundHighlight: darken(@white, 10%); -@btnBorder: #ccc; +@btnBorder: #bbb; @btnPrimaryBackground: @linkColor; -@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 15%); +@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%); @btnInfoBackground: #5bc0de; @btnInfoBackgroundHighlight: #2f96b4; @@ -88,7 +87,7 @@ @btnDangerBackground: #ee5f5b; @btnDangerBackgroundHighlight: #bd362f; -@btnInverseBackground: @gray; +@btnInverseBackground: #444; @btnInverseBackgroundHighlight: @grayDarker; @@ -104,12 +103,17 @@ // ------------------------- @dropdownBackground: @white; @dropdownBorder: rgba(0,0,0,.2); -@dropdownLinkColor: @grayDark; -@dropdownLinkColorHover: @white; -@dropdownLinkBackgroundHover: @linkColor; @dropdownDividerTop: #e5e5e5; @dropdownDividerBottom: @white; +@dropdownLinkColor: @grayDark; + +@dropdownLinkColorHover: @white; +@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; + +@dropdownLinkColorActive: @dropdownLinkColor; +@dropdownLinkBackgroundActive: @linkColor; + // COMPONENT VARIABLES @@ -121,7 +125,7 @@ // Try to avoid customizing these :) @zindexDropdown: 1000; @zindexPopover: 1010; -@zindexTooltip: 1020; +@zindexTooltip: 1030; @zindexFixedNavbar: 1030; @zindexModalBackdrop: 1040; @zindexModal: 1050; @@ -143,25 +147,55 @@ @hrBorder: @grayLighter; +// Wells +// ------------------------- +@wellBackground: #f5f5f5; + + // Navbar // ------------------------- -@navbarHeight: 40px; -@navbarBackground: @grayDarker; -@navbarBackgroundHighlight: @grayDark; +@navbarCollapseWidth: 979px; -@navbarText: @grayLight; -@navbarLinkColor: @grayLight; -@navbarLinkColorHover: @white; -@navbarLinkColorActive: @navbarLinkColorHover; +@navbarHeight: 40px; +@navbarBackground: darken(@navbarBackgroundHighlight, 5%); +@navbarBackgroundHighlight: #ffffff; +@navbarBorder: darken(@navbarBackground, 12%); + +@navbarText: @gray; +@navbarLinkColor: @gray; +@navbarLinkColorHover: @grayDark; +@navbarLinkColorActive: @gray; @navbarLinkBackgroundHover: transparent; -@navbarLinkBackgroundActive: @navbarBackground; +@navbarLinkBackgroundActive: darken(@navbarBackground, 5%); -@navbarSearchBackground: lighten(@navbarBackground, 25%); -@navbarSearchBackgroundFocus: @white; -@navbarSearchBorder: darken(@navbarSearchBackground, 30%); -@navbarSearchPlaceholderColor: #ccc; @navbarBrandColor: @navbarLinkColor; +// Inverted navbar +@navbarInverseBackground: #111111; +@navbarInverseBackgroundHighlight: #222222; +@navbarInverseBorder: #252525; + +@navbarInverseText: @grayLight; +@navbarInverseLinkColor: @grayLight; +@navbarInverseLinkColorHover: @white; +@navbarInverseLinkColorActive: @navbarInverseLinkColorHover; +@navbarInverseLinkBackgroundHover: transparent; +@navbarInverseLinkBackgroundActive: @navbarInverseBackground; + +@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); +@navbarInverseSearchBackgroundFocus: @white; +@navbarInverseSearchBorder: @navbarInverseBackground; +@navbarInverseSearchPlaceholderColor: #ccc; + +@navbarInverseBrandColor: @navbarInverseLinkColor; + + +// Pagination +// ------------------------- +@paginationBackground: #fff; +@paginationBorder: #ddd; +@paginationActiveBackground: #f5f5f5; + // Hero unit // ------------------------- @@ -189,10 +223,28 @@ @infoBorder: darken(spin(@infoBackground, -10), 7%); +// Tooltips and popovers +// ------------------------- +@tooltipColor: #fff; +@tooltipBackground: #000; +@tooltipArrowWidth: 5px; +@tooltipArrowColor: @tooltipBackground; + +@popoverBackground: #fff; +@popoverArrowWidth: 10px; +@popoverArrowColor: #fff; +@popoverTitleBackground: darken(@popoverBackground, 3%); + +// Special enhancement for popovers +@popoverArrowOuterWidth: @popoverArrowWidth + 1; +@popoverArrowOuterColor: rgba(0,0,0,.25); + + // GRID // -------------------------------------------------- + // Default 940px grid // ------------------------- @gridColumns: 12; @@ -200,7 +252,26 @@ @gridGutterWidth: 20px; @gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); +// 1200px min +@gridColumnWidth1200: 70px; +@gridGutterWidth1200: 30px; +@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); + +// 768px-979px +@gridColumnWidth768: 42px; +@gridGutterWidth768: 20px; +@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); + + // Fluid grid // ------------------------- -@fluidGridColumnWidth: 6.382978723%; -@fluidGridGutterWidth: 2.127659574%; +@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); +@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); + +// 1200px min +@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); +@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); + +// 768px-979px +@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); +@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); diff --git a/less/wells.less b/less/wells.less index 9300061a5..e4e0a9beb 100644 --- a/less/wells.less +++ b/less/wells.less @@ -1,13 +1,15 @@ -// WELLS -// ----- +// +// Wells +// -------------------------------------------------- + +// Base class .well { min-height: 20px; padding: 19px; margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #eee; - border: 1px solid rgba(0,0,0,.05); + background-color: @wellBackground; + border: 1px solid darken(@wellBackground, 7%); .border-radius(4px); .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); blockquote { |
