/// @Foundation.settings // Button $button-padding: 0.85em 1em !default; $button-margin: 0 $global-padding $global-padding 0 !default; $button-style: solid !default; $button-background: $primary-color !default; $button-background-hover: scale-color($button-background, $lightness: -15%) !default; $button-color: auto !default; $button-radius: 0 !default; $button-sizes: ( tiny: 0.7, small: 0.8, medium: 1, large: 1.3, ) !default; $button-font-size: 0.9rem !default; $button-opacity-disabled: 0.5 !default; $button-tag-selector: false !default; /// %button { display: inline-block; border: 0; text-align: center; line-height: 1; cursor: pointer; -webkit-appearance: none; -webkit-font-smoothing: antialiased; transition: background 0.25s ease-out; vertical-align: middle; padding: $button-padding; margin: $button-margin; font-size: $button-font-size; border-radius: $button-radius; // Dropdown arrow // TODO: Change to class and mixin because now the toggle is 'fa-open' which is too generic // &[data-popup-toggle] { // position: relative; // padding-right: 2em; // Placeholder // &::after { // @include css-triangle(6px, black, top); // position: absolute; // right: 0.7em; // top: 50%; // margin-top: -3px; // } // } } @mixin button-size($size: medium, $expand: false) { $size: $button-font-size * map-get($button-sizes, $size); font-size: $size; @if $expand { @include button-expand; } @if using(iconic) { .iconic { width: 1em; height: 1em; vertical-align: middle; margin-right: 0.25em; margin-top: -2px; // The icons are oddly misaligned } } } @mixin button-expand($expand: true) { @if $expand { display: block; width: 100%; margin-left: 0; margin-right: 0; } @else { display: inline-block; width: auto; margin: $button-margin; } } @mixin button-style( $background: $button-background, $background-hover: $button-background-hover, $color: $button-color, $style: $button-style, $radius: $button-radius, $btngroup: false ){ @if $style == hollow { border: 1px solid $background; background: transparent; color: $background; &:hover, &:focus { border-color: scale-color($background, $lightness: 25%); background: transparent; color: scale-color($background, $lightness: 25%); } } // Solid is the default @else { @if $color == auto { $color: isitlight($background); } background: $background; color: $color; &:hover, &:focus { @if $background-hover == auto { background: scale-color($background, $lightness: -15%); } @else { background: $background-hover; } color: $color; } } @if $btngroup { border-color: $background; &:hover, &:focus { border-color: scale-color($background, $lightness: -25%); } } @if using(iconic) { @if $style == hollow { .iconic { @include color-icon($background); } &:hover .iconic { @include color-icon(scale-color($background, $lightness: 25%)); } } @else { .iconic { @include color-icon($color); } } } } @mixin button-disabled() { opacity: $button-opacity-disabled; cursor: default; pointer-events: none; } @mixin button( $size: medium, $expand: false, $background: $button-background, $background-hover: $button-background-hover, $color: $button-color, $style: $button-style, $radius: $button-radius ) { @extend %button; @include button-size($size); @include button-expand($expand); @include button-style($background, $background-hover, $color, $style); } @include exports(button) { .button { @include button; &.tiny { @include button-size(tiny); } &.small { @include button-size(small); } &.large { @include button-size(large); } &.expand { @include button-expand; } &.secondary { @include button-style($secondary-color, auto) } &.success { @include button-style($success-color, auto) } &.warning { @include button-style($warning-color, auto) } &.alert { @include button-style($alert-color, auto) } &.info { @include button-style($info-color, auto) } &.dark { @include button-style($dark-color, auto) } @if $button-style != hollow { &.hollow { @include button-style($style: hollow); &.secondary { @include button-style($secondary-color, $style: hollow); } &.success { @include button-style($success-color, $style: hollow); } &.warning { @include button-style($warning-color, $style: hollow); } &.alert { @include button-style($alert-color, $style: hollow); } &.info { @include button-style($info-color, $style: hollow); } &.dark { @include button-style($dark-color, $style: hollow); } } } &.disabled { @include button-disabled; } } @if $button-tag-selector { button { @extend .button; } } }