rsuite
Version:
A suite of react components
348 lines (289 loc) • 7.06 kB
text/less
@import '../../styles/common';
@import '../../Button/styles/mixin';
@import 'mixin';
//
// Button groups
// --------------------------------------------------
// Make the div behave like a button
.@{ns}btn-group,
.@{ns}btn-group-vertical {
position: relative;
display: inline-block;
vertical-align: middle; // match .btn alignment given font-size hack above
> .@{ns}btn {
position: relative;
float: left;
// Bring the "active" ghost-button to the front.
&.@{ns}btn-ghost:hover,
&.@{ns}btn-ghost:focus,
&.@{ns}btn-ghost:active {
z-index: 2;
}
}
}
// Force change the size of the button in the button group.
.@{ns}btn {
.@{ns}btn-group-lg & {
.btn-lg;
}
.@{ns}btn-group-sm & {
.btn-sm;
}
.@{ns}btn-group-xs & {
.btn-xs;
}
}
.@{ns}btn-group {
//** Buttons in the button group have no border radius
> .@{ns}btn,
> .@{ns}dropdown > .@{ns}dropdown-toggle > .@{ns}btn {
border-radius: 0;
}
//** Horizontal Button remove border radius
&:not(.@{ns}btn-group-vertical) > .@{ns}btn:first-child,
&:not(.@{ns}btn-group-vertical) > .@{ns}dropdown:first-child > .@{ns}dropdown-toggle > .@{ns}btn {
.border-left-radius(@border-radius-base);
}
&:not(.@{ns}btn-group-vertical) > .@{ns}btn:last-child,
&:not(.@{ns}btn-group-vertical) > .@{ns}dropdown:last-child > .@{ns}dropdown-toggle > .@{ns}btn {
.border-right-radius(@border-radius-base);
}
//** Vertical Button remove radius
&.@{ns}btn-group-vertical > .@{ns}btn:first-child,
&.@{ns}btn-group-vertical > .@{ns}dropdown:first-child > .@{ns}dropdown-toggle > .@{ns}btn {
.border-top-radius(@border-radius-base);
}
&.@{ns}btn-group-vertical > .@{ns}btn:last-child,
&.@{ns}btn-group-vertical > .@{ns}dropdown:last-child > .@{ns}dropdown-toggle > .@{ns}btn {
.border-bottom-radius(@border-radius-base);
}
&.@{ns}btn-group-vertical > .@{ns}dropdown,
&.@{ns}btn-group-vertical > .@{ns}dropdown-dropup {
display: block;
}
.@{ns}btn + .@{ns}btn,
.@{ns}btn + .@{ns}btn-group,
.@{ns}btn-group + .@{ns}btn,
.@{ns}btn-group + .@{ns}btn-group {
margin-left: -1px;
}
}
// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group)
.@{ns}btn-group > .@{ns}btn-group {
float: left;
}
.@{ns}btn-group > .@{ns}btn-group:not(:first-child):not(:last-child) > .@{ns}btn {
border-radius: 0;
}
.@{ns}btn-group > .@{ns}btn-group:first-child:not(:last-child) {
> .@{ns}btn:last-child,
> .@{ns}dropdown-toggle {
.border-right-radius(0);
}
}
.@{ns}btn-group > .@{ns}btn-group:last-child:not(:first-child) > .@{ns}btn:first-child {
.border-left-radius(0);
}
// On active and open, don't show outline
.@{ns}btn-group .dropdown-toggle:active,
.@{ns}btn-group.open .dropdown-toggle {
outline: 0;
}
// Split button dropdowns
// ----------------------
.@{ns}btn-group.@{ns}open {
.@{ns}dropdown-toggle.@{ns}btn {
z-index: (@zindex-dropdown+10);
&,
&:active,
&:focus,
&:hover {
background: white;
padding-bottom: (@padding-base-vertical+1);
}
&:hover {
padding-bottom: (@padding-base-vertical+1);
}
&.@{ns}btn-lg {
&,
&:active,
&:focus,
&:hover {
padding-bottom: (@padding-large-vertical+1);
}
}
&.@{ns}btn-sm {
&,
&:active,
&:focus,
&:hover {
padding-bottom: (@padding-small-vertical+1);
}
}
&.@{ns}btn-xs {
&,
&:active,
&:focus,
&:hover {
padding-bottom: (@padding-extra-small-vertical+1);
}
}
}
.@{ns}dropdown-menu {
z-index: (@zindex-dropdown+5);
}
}
.@{ns}btn-group.@{ns}open.@{ns}dropup {
.@{ns}dropdown-toggle.@{ns}btn {
z-index: (@zindex-dropdown+10);
&,
&:active,
&:focus,
&:hover {
background: white;
padding-top: (@padding-base-vertical+1);
padding-bottom: @padding-base-vertical;
}
&:hover {
padding-top: (@padding-base-vertical+1);
padding-bottom: @padding-base-vertical;
}
&.btn-lg {
&,
&:active,
&:focus,
&:hover {
padding-top: (@padding-large-vertical+1);
padding-bottom: @padding-large-vertical;
}
}
&.@{ns}btn-sm {
&,
&:active,
&:focus,
&:hover {
padding-top: (@padding-small-vertical+1);
padding-bottom: @padding-small-vertical;
}
}
&.@{ns}btn-xs {
&,
&:active,
&:focus,
&:hover {
padding-top: (@padding-extra-small-vertical+1);
padding-bottom: @padding-extra-small-vertical;
}
}
}
}
// Give the line between buttons some depth
.@{ns}btn-group > .@{ns}btn + .@{ns}dropdown-toggle {
padding-left: 8px;
padding-right: 8px;
}
.@{ns}btn-group > .@{ns}btn-lg + .@{ns}dropdown-toggle {
padding-left: 12px;
padding-right: 12px;
}
// Reposition the caret
.@{ns}btn .@{ns}caret {
margin-left: 0;
}
// Vertical button groups
// ----------------------
.@{ns}btn-group-vertical {
> .@{ns}btn,
> .@{ns}btn-group,
> .@{ns}btn-group > .@{ns}btn {
display: block;
float: none;
width: 100%;
max-width: 100%;
}
// Clear floats so dropdown menus can be properly placed
> .@{ns}btn-group {
.clearfix;
> .@{ns}btn {
float: none;
}
}
> .@{ns}btn + .@{ns}btn,
> .@{ns}btn + .@{ns}btn-group,
> .@{ns}btn-group + .@{ns}btn,
> .@{ns}btn-group + .@{ns}btn-group {
margin-top: -1px;
margin-left: 0;
}
}
// Justified button groups
// ----------------------
.@{ns}btn-group-justified {
display: flex;
width: 100%;
> .@{ns}btn,
> .@{ns}btn-group {
flex: 1 1 1%;
.ellipsis-basic;
}
> .@{ns}btn-group .@{ns}btn {
width: 100%;
}
> .@{ns}btn-group .@{ns}dropdown-menu {
left: auto;
}
> .@{ns}btn-ghost {
border-left-width: 0;
border-right-width: 0;
position: relative;
.btn-ghost-hack-variant(@btn-ghost-border-color);
&::before,
&::after {
content: '';
display: block;
position: absolute;
width: @btn-ghost-border-width;
background-color: @btn-ghost-border-color;
top: -1 * @btn-ghost-border-width;
bottom: -1 * @btn-ghost-border-width;
.btn-transition();
}
&::before {
left: 0;
}
&::after {
right: 0;
}
}
> .@{ns}btn-ghost:first-child {
border-left-width: @btn-ghost-border-width;
&::before {
display: none;
}
}
> .@{ns}btn-ghost:last-child {
border-right-width: @btn-ghost-border-width;
&::after {
display: none;
}
}
}
//suite-button-group
//------------------
.@{ns}btn-group-primary {
.button-group-btn(@H500, @H050);
}
.@{ns}btn-group-link {
.button-group-btn(@H500, @H050);
// Rewrite disabled styles
&.@{ns}btn-group {
.@{ns}btn.disabled:hover {
background-color: white;
color: @H050;
}
.@{ns}btn-link:focus,
.@{ns}btn-link:hover {
color: white;
}
}
}