_dropdowns.scss (5105B)
1 // 2 // Dropdown menus 3 // -------------------------------------------------- 4 5 6 // Dropdown arrow/caret 7 .caret { 8 display: inline-block; 9 width: 0; 10 height: 0; 11 margin-left: 2px; 12 vertical-align: middle; 13 border-top: $caret-width-base dashed; 14 border-top: $caret-width-base solid \9; // IE8 15 border-right: $caret-width-base solid transparent; 16 border-left: $caret-width-base solid transparent; 17 } 18 19 // The dropdown wrapper (div) 20 .dropup, 21 .dropdown { 22 position: relative; 23 } 24 25 // Prevent the focus on the dropdown toggle when closing dropdowns 26 .dropdown-toggle:focus { 27 outline: 0; 28 } 29 30 // The dropdown menu (ul) 31 .dropdown-menu { 32 position: absolute; 33 top: 100%; 34 left: 0; 35 z-index: $zindex-dropdown; 36 display: none; // none by default, but block on "open" of the menu 37 float: left; 38 min-width: 160px; 39 padding: 5px 0; 40 margin: 2px 0 0; // override default ul 41 list-style: none; 42 font-size: $font-size-base; 43 text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) 44 background-color: $dropdown-bg; 45 border: 1px solid $dropdown-fallback-border; // IE8 fallback 46 border: 1px solid $dropdown-border; 47 border-radius: $border-radius-base; 48 @include box-shadow(0 6px 12px rgba(0,0,0,.175)); 49 background-clip: padding-box; 50 51 // Aligns the dropdown menu to right 52 // 53 // Deprecated as of 3.1.0 in favor of `.dropdown-menu-[dir]` 54 &.pull-right { 55 right: 0; 56 left: auto; 57 } 58 59 // Dividers (basically an hr) within the dropdown 60 .divider { 61 @include nav-divider($dropdown-divider-bg); 62 } 63 64 // Links within the dropdown menu 65 > li > a { 66 display: block; 67 padding: 5px 20px; 68 clear: both; 69 font-weight: normal; 70 line-height: $line-height-base; 71 color: $dropdown-link-color; 72 white-space: nowrap; // prevent links from randomly breaking onto new lines 73 } 74 } 75 76 // Hover/Focus state 77 .dropdown-menu > li > a { 78 &:hover, 79 &:focus { 80 text-decoration: none; 81 color: $dropdown-link-hover-color; 82 background-color: $dropdown-link-hover-bg; 83 } 84 } 85 86 // Active state 87 .dropdown-menu > .active > a { 88 &, 89 &:hover, 90 &:focus { 91 color: $dropdown-link-active-color; 92 text-decoration: none; 93 outline: 0; 94 background-color: $dropdown-link-active-bg; 95 } 96 } 97 98 // Disabled state 99 // 100 // Gray out text and ensure the hover/focus state remains gray 101 102 .dropdown-menu > .disabled > a { 103 &, 104 &:hover, 105 &:focus { 106 color: $dropdown-link-disabled-color; 107 } 108 109 // Nuke hover/focus effects 110 &:hover, 111 &:focus { 112 text-decoration: none; 113 background-color: transparent; 114 background-image: none; // Remove CSS gradient 115 @include reset-filter; 116 cursor: $cursor-disabled; 117 } 118 } 119 120 // Open state for the dropdown 121 .open { 122 // Show the menu 123 > .dropdown-menu { 124 display: block; 125 } 126 127 // Remove the outline when :focus is triggered 128 > a { 129 outline: 0; 130 } 131 } 132 133 // Menu positioning 134 // 135 // Add extra class to `.dropdown-menu` to flip the alignment of the dropdown 136 // menu with the parent. 137 .dropdown-menu-right { 138 left: auto; // Reset the default from `.dropdown-menu` 139 right: 0; 140 } 141 // With v3, we enabled auto-flipping if you have a dropdown within a right 142 // aligned nav component. To enable the undoing of that, we provide an override 143 // to restore the default dropdown menu alignment. 144 // 145 // This is only for left-aligning a dropdown menu within a `.navbar-right` or 146 // `.pull-right` nav component. 147 .dropdown-menu-left { 148 left: 0; 149 right: auto; 150 } 151 152 // Dropdown section headers 153 .dropdown-header { 154 display: block; 155 padding: 3px 20px; 156 font-size: $font-size-small; 157 line-height: $line-height-base; 158 color: $dropdown-header-color; 159 white-space: nowrap; // as with > li > a 160 } 161 162 // Backdrop to catch body clicks on mobile, etc. 163 .dropdown-backdrop { 164 position: fixed; 165 left: 0; 166 right: 0; 167 bottom: 0; 168 top: 0; 169 z-index: ($zindex-dropdown - 10); 170 } 171 172 // Right aligned dropdowns 173 .pull-right > .dropdown-menu { 174 right: 0; 175 left: auto; 176 } 177 178 // Allow for dropdowns to go bottom up (aka, dropup-menu) 179 // 180 // Just add .dropup after the standard .dropdown class and you're set, bro. 181 // TODO: abstract this so that the navbar fixed styles are not placed here? 182 183 .dropup, 184 .navbar-fixed-bottom .dropdown { 185 // Reverse the caret 186 .caret { 187 border-top: 0; 188 border-bottom: $caret-width-base dashed; 189 border-bottom: $caret-width-base solid \9; // IE8 190 content: ""; 191 } 192 // Different positioning for bottom up menu 193 .dropdown-menu { 194 top: auto; 195 bottom: 100%; 196 margin-bottom: 2px; 197 } 198 } 199 200 201 // Component alignment 202 // 203 // Reiterate per navbar.less and the modified component alignment there. 204 205 @media (min-width: $grid-float-breakpoint) { 206 .navbar-right { 207 .dropdown-menu { 208 right: 0; left: auto; 209 } 210 // Necessary for overrides of the default right aligned menu. 211 // Will remove come v4 in all likelihood. 212 .dropdown-menu-left { 213 left: 0; right: auto; 214 } 215 } 216 }