SnapKit/_sass/foundation/components/_button-groups.scss

208 lines
5.4 KiB
SCSS
Raw Normal View History

2015-04-15 18:52:48 +08:00
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
@import 'global';
@import 'buttons';
//
// Button Group Variables
//
$include-html-button-classes: $include-html-classes !default;
// Sets the margin for the right side by default, and the left margin if right-to-left direction is used
$button-bar-margin-opposite: rem-calc(10) !default;
$button-group-border-width: 1px !default;
//
// Button Group Mixins
//
// We use this to add styles for a button group container
@mixin button-group-container($styles:true, $float:false) {
@if $styles {
list-style: none;
margin: 0;
#{$default-float}: 0;
@include clearfix();
}
@if $float {
float: #{$default-float};
margin-#{$opposite-direction}: $button-bar-margin-opposite;
& div { overflow: hidden; }
}
}
// We use this to control styles for button groups
@mixin button-group-style($radius:false, $even:false, $float:false, $orientation:horizontal) {
> button, .button {
border-#{$default-float}: $button-group-border-width solid;
border-color: rgba(255, 255, 255, .5);
}
&:first-child {
button, .button {
border-#{$default-float}: 0;
}
}
$button-group-display: list-item;
$button-group-margin: 0;
// We use this to control the flow, or remove those styles completely.
@if $float {
$button-group-display: list-item;
$button-group-margin: 0;
float: $float;
// Make sure the first child doesn't get the negative margin.
&:first-child { margin-#{$default-float}: 0; }
}
@else {
$button-group-display: inline-block;
$button-group-margin: 0 -2px;
}
@if $orientation == vertical {
$button-group-display: block;
$button-group-margin: 0;
> button, .button {
border-color: rgba(255, 255, 255, .5);
border-left-width: 0;
border-top: $button-group-border-width solid;
display: block;
margin:0;
}
> button {
width: 100%;
}
&:first-child {
button, .button {
border-top: 0;
}
}
}
display: $button-group-display;
margin: $button-group-margin;
// We use these to control left and right radius on first/last buttons in the group.
@if $radius == true {
&,
> a,
> button,
> .button { @include radius(0); }
&:first-child,
&:first-child > a,
&:first-child > button,
&:first-child > .button {
@if $orientation == vertical {
@include side-radius(top, $button-radius);
}
@else {
@include side-radius($default-float, $button-radius);
}
}
&:last-child,
&:last-child > a,
&:last-child > button,
&:last-child > .button {
@if $orientation == vertical {
@include side-radius(bottom, $button-radius);
}
@else {
@include side-radius($opposite-direction, $button-radius);
}
}
}
@else if $radius {
&,
> a,
> button,
> .button { @include radius(0); }
&:first-child,
&:first-child > a,
&:first-child > button,
&:first-child > .button {
@if $orientation == vertical {
@include side-radius(top, $radius);
}
@else {
@include side-radius($default-float, $radius);
}
}
&:last-child,
&:last-child > a,
&:last-child > button,
&:last-child > .button {
@if $orientation == vertical {
@include side-radius(bottom, $radius);
}
@else {
@include side-radius($opposite-direction, $radius);
}
}
}
// We use this to make the buttons even width across their container
@if $even {
width: percentage((100/$even) / 100);
button, .button { width: 100%; }
}
}
@include exports("button-group") {
@if $include-html-button-classes {
.button-group { @include button-group-container;
@for $i from 2 through 8 {
&.even-#{$i} li { @include button-group-style($even:$i, $float:null); }
}
> li { @include button-group-style(); }
&.stack {
> li { @include button-group-style($orientation:vertical); float: none; }
}
&.stack-for-small {
> li {
@include button-group-style($orientation:horizontal);
@media #{$small-only} {
@include button-group-style($orientation:vertical);
}
}
}
&.radius > * { @include button-group-style($radius:$button-radius, $float:null); }
&.radius.stack > * { @include button-group-style($radius:$button-radius, $float:null, $orientation:vertical); }
&.radius.stack-for-small > * {
@media #{$medium-up} {
@include button-group-style($radius:$button-radius, $orientation:horizontal);
}
@media #{$small-only} {
@include button-group-style($radius:$button-radius, $orientation:vertical);
}
}
&.round > * { @include button-group-style($radius:$button-round, $float:null); }
&.round.stack > * { @include button-group-style($radius:$button-med, $float:null, $orientation:vertical); }
&.round.stack-for-small > * {
@media #{$medium-up} {
@include button-group-style($radius:$button-round, $orientation:horizontal);
}
@media #{$small-only} {
@include button-group-style($radius:$button-med, $orientation:vertical);
}
}
}
.button-bar {
@include clearfix;
.button-group { @include button-group-container($styles:false, $float:true); }
}
}
}