Mercurial > minori
comparison dep/fmt/doc/bootstrap/button-groups.less @ 343:1faa72660932
*: transfer back to cmake from autotools
autotools just made lots of things more complicated than
they should have and many things broke (i.e. translations)
| author | Paper <paper@paper.us.eu.org> |
|---|---|
| date | Thu, 20 Jun 2024 05:56:06 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 342:adb79bdde329 | 343:1faa72660932 |
|---|---|
| 1 // | |
| 2 // Button groups | |
| 3 // -------------------------------------------------- | |
| 4 | |
| 5 // Make the div behave like a button | |
| 6 .btn-group, | |
| 7 .btn-group-vertical { | |
| 8 position: relative; | |
| 9 display: inline-block; | |
| 10 vertical-align: middle; // match .btn alignment given font-size hack above | |
| 11 > .btn { | |
| 12 position: relative; | |
| 13 float: left; | |
| 14 // Bring the "active" button to the front | |
| 15 &:hover, | |
| 16 &:focus, | |
| 17 &:active, | |
| 18 &.active { | |
| 19 z-index: 2; | |
| 20 } | |
| 21 } | |
| 22 } | |
| 23 | |
| 24 // Prevent double borders when buttons are next to each other | |
| 25 .btn-group { | |
| 26 .btn + .btn, | |
| 27 .btn + .btn-group, | |
| 28 .btn-group + .btn, | |
| 29 .btn-group + .btn-group { | |
| 30 margin-left: -1px; | |
| 31 } | |
| 32 } | |
| 33 | |
| 34 // Optional: Group multiple button groups together for a toolbar | |
| 35 .btn-toolbar { | |
| 36 margin-left: -5px; // Offset the first child's margin | |
| 37 &:extend(.clearfix all); | |
| 38 | |
| 39 .btn-group, | |
| 40 .input-group { | |
| 41 float: left; | |
| 42 } | |
| 43 > .btn, | |
| 44 > .btn-group, | |
| 45 > .input-group { | |
| 46 margin-left: 5px; | |
| 47 } | |
| 48 } | |
| 49 | |
| 50 .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { | |
| 51 border-radius: 0; | |
| 52 } | |
| 53 | |
| 54 // 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 | |
| 55 .btn-group > .btn:first-child { | |
| 56 margin-left: 0; | |
| 57 &:not(:last-child):not(.dropdown-toggle) { | |
| 58 .border-right-radius(0); | |
| 59 } | |
| 60 } | |
| 61 // Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it | |
| 62 .btn-group > .btn:last-child:not(:first-child), | |
| 63 .btn-group > .dropdown-toggle:not(:first-child) { | |
| 64 .border-left-radius(0); | |
| 65 } | |
| 66 | |
| 67 // Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) | |
| 68 .btn-group > .btn-group { | |
| 69 float: left; | |
| 70 } | |
| 71 .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { | |
| 72 border-radius: 0; | |
| 73 } | |
| 74 .btn-group > .btn-group:first-child:not(:last-child) { | |
| 75 > .btn:last-child, | |
| 76 > .dropdown-toggle { | |
| 77 .border-right-radius(0); | |
| 78 } | |
| 79 } | |
| 80 .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { | |
| 81 .border-left-radius(0); | |
| 82 } | |
| 83 | |
| 84 // On active and open, don't show outline | |
| 85 .btn-group .dropdown-toggle:active, | |
| 86 .btn-group.open .dropdown-toggle { | |
| 87 outline: 0; | |
| 88 } | |
| 89 | |
| 90 | |
| 91 // Sizing | |
| 92 // | |
| 93 // Remix the default button sizing classes into new ones for easier manipulation. | |
| 94 | |
| 95 .btn-group-xs > .btn { &:extend(.btn-xs); } | |
| 96 .btn-group-sm > .btn { &:extend(.btn-sm); } | |
| 97 .btn-group-lg > .btn { &:extend(.btn-lg); } | |
| 98 | |
| 99 | |
| 100 // Split button dropdowns | |
| 101 // ---------------------- | |
| 102 | |
| 103 // Give the line between buttons some depth | |
| 104 .btn-group > .btn + .dropdown-toggle { | |
| 105 padding-left: 8px; | |
| 106 padding-right: 8px; | |
| 107 } | |
| 108 .btn-group > .btn-lg + .dropdown-toggle { | |
| 109 padding-left: 12px; | |
| 110 padding-right: 12px; | |
| 111 } | |
| 112 | |
| 113 // The clickable button for toggling the menu | |
| 114 // Remove the gradient and set the same inset shadow as the :active state | |
| 115 .btn-group.open .dropdown-toggle { | |
| 116 .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); | |
| 117 | |
| 118 // Show no shadow for `.btn-link` since it has no other button styles. | |
| 119 &.btn-link { | |
| 120 .box-shadow(none); | |
| 121 } | |
| 122 } | |
| 123 | |
| 124 | |
| 125 // Reposition the caret | |
| 126 .btn .caret { | |
| 127 margin-left: 0; | |
| 128 } | |
| 129 // Carets in other button sizes | |
| 130 .btn-lg .caret { | |
| 131 border-width: @caret-width-large @caret-width-large 0; | |
| 132 border-bottom-width: 0; | |
| 133 } | |
| 134 // Upside down carets for .dropup | |
| 135 .dropup .btn-lg .caret { | |
| 136 border-width: 0 @caret-width-large @caret-width-large; | |
| 137 } | |
| 138 | |
| 139 | |
| 140 // Vertical button groups | |
| 141 // ---------------------- | |
| 142 | |
| 143 .btn-group-vertical { | |
| 144 > .btn, | |
| 145 > .btn-group, | |
| 146 > .btn-group > .btn { | |
| 147 display: block; | |
| 148 float: none; | |
| 149 width: 100%; | |
| 150 max-width: 100%; | |
| 151 } | |
| 152 | |
| 153 // Clear floats so dropdown menus can be properly placed | |
| 154 > .btn-group { | |
| 155 &:extend(.clearfix all); | |
| 156 > .btn { | |
| 157 float: none; | |
| 158 } | |
| 159 } | |
| 160 | |
| 161 > .btn + .btn, | |
| 162 > .btn + .btn-group, | |
| 163 > .btn-group + .btn, | |
| 164 > .btn-group + .btn-group { | |
| 165 margin-top: -1px; | |
| 166 margin-left: 0; | |
| 167 } | |
| 168 } | |
| 169 | |
| 170 .btn-group-vertical > .btn { | |
| 171 &:not(:first-child):not(:last-child) { | |
| 172 border-radius: 0; | |
| 173 } | |
| 174 &:first-child:not(:last-child) { | |
| 175 border-top-right-radius: @border-radius-base; | |
| 176 .border-bottom-radius(0); | |
| 177 } | |
| 178 &:last-child:not(:first-child) { | |
| 179 border-bottom-left-radius: @border-radius-base; | |
| 180 .border-top-radius(0); | |
| 181 } | |
| 182 } | |
| 183 .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { | |
| 184 border-radius: 0; | |
| 185 } | |
| 186 .btn-group-vertical > .btn-group:first-child:not(:last-child) { | |
| 187 > .btn:last-child, | |
| 188 > .dropdown-toggle { | |
| 189 .border-bottom-radius(0); | |
| 190 } | |
| 191 } | |
| 192 .btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { | |
| 193 .border-top-radius(0); | |
| 194 } | |
| 195 | |
| 196 | |
| 197 // Justified button groups | |
| 198 // ---------------------- | |
| 199 | |
| 200 .btn-group-justified { | |
| 201 display: table; | |
| 202 width: 100%; | |
| 203 table-layout: fixed; | |
| 204 border-collapse: separate; | |
| 205 > .btn, | |
| 206 > .btn-group { | |
| 207 float: none; | |
| 208 display: table-cell; | |
| 209 width: 1%; | |
| 210 } | |
| 211 > .btn-group .btn { | |
| 212 width: 100%; | |
| 213 } | |
| 214 | |
| 215 > .btn-group .dropdown-menu { | |
| 216 left: auto; | |
| 217 } | |
| 218 } | |
| 219 | |
| 220 | |
| 221 // Checkbox and radio options | |
| 222 // | |
| 223 // In order to support the browser's form validation feedback, powered by the | |
| 224 // `required` attribute, we have to "hide" the inputs via `clip`. We cannot use | |
| 225 // `display: none;` or `visibility: hidden;` as that also hides the popover. | |
| 226 // Simply visually hiding the inputs via `opacity` would leave them clickable in | |
| 227 // certain cases which is prevented by using `clip` and `pointer-events`. | |
| 228 // This way, we ensure a DOM element is visible to position the popover from. | |
| 229 // | |
| 230 // See https://github.com/twbs/bootstrap/pull/12794 and | |
| 231 // https://github.com/twbs/bootstrap/pull/14559 for more information. | |
| 232 | |
| 233 [data-toggle="buttons"] { | |
| 234 > .btn, | |
| 235 > .btn-group > .btn { | |
| 236 input[type="radio"], | |
| 237 input[type="checkbox"] { | |
| 238 position: absolute; | |
| 239 clip: rect(0,0,0,0); | |
| 240 pointer-events: none; | |
| 241 } | |
| 242 } | |
| 243 } |
