Button Component
A CSS implementation of the Sprout button component.
Related
Sprout Button documentation [external]
Example
html
<div class="spr-inline-container-md spr-stack-md">
<button class="spr-btn spr-btn-primary">Primary</button>
<a href="javascript:;" class="spr-btn spr-btn-secondary">Secondary</a>
<button class="spr-btn spr-btn-error">Error</button>
<button class="spr-btn spr-btn-secondary spr-btn-error">Secondary Error</button>
<button class="spr-btn spr-btn-error">Icon Right <i class="spr-icon spr-icon-right spr-icon-info"></i> </button>
<button class="spr-btn spr-btn-secondary spr-btn-error">Icon Right <i class="spr-icon spr-icon-right spr-icon-info"></i> </button>
<button class="spr-btn spr-btn-primary"><i class="spr-icon spr-icon-left spr-icon-info"></i> Icon Left</button>
</div>
<div class="spr-inline-container-md spr-stack-md">
<button class="spr-btn spr-btn-link">Link</button>
<button class="spr-btn spr-btn-lg spr-btn-primary">Large Primary</button>
<button class="spr-btn spr-btn-sm spr-btn-secondary">Small Secondary</button>
<button class="spr-btn spr-btn-icon spr-btn-sm"><i class="spr-icon spr-icon-more"></i></button>
<button class="spr-btn spr-btn-icon spr-btn-md"><i class="spr-icon spr-icon-more"></i></button>
<button class="spr-btn spr-btn-icon spr-btn-lg"><i class="spr-icon spr-icon-more"></i></button>
<button class="spr-btn spr-btn-icon-secondary spr-btn-sm"><i class="spr-icon spr-icon-more"></i></button>
<button class="spr-btn spr-btn-icon-secondary spr-btn-md"><i class="spr-icon spr-icon-more"></i></button>
<button class="spr-btn spr-btn-icon-secondary spr-btn-lg"><i class="spr-icon spr-icon-more"></i></button>
</div>
<div class="spr-inline-container-md spr-stack-md">
<button class="spr-btn spr-btn-primary spr-btn-spinner">
<div class="spr-spinner-container">
<svg viewBox="0 0 24 24">
<circle class="spr-spinner" cx="12" cy="12" r="10.5" fill="none" stroke-width="3"></circle>
</svg>
</button>
<button class="spr-btn spr-btn-secondary spr-btn-spinner">
<div class="spr-spinner-container">
<svg viewBox="0 0 24 24">
<circle class="spr-spinner" cx="12" cy="12" r="10.5" fill="none" stroke-width="3"></circle>
</svg>
</button>
<button class="spr-btn spr-btn-error spr-btn-spinner">
<div class="spr-spinner-container">
<svg viewBox="0 0 24 24">
<circle class="spr-spinner" cx="12" cy="12" r="10.5" fill="none" stroke-width="3"></circle>
</svg>
</button>
<button class="spr-btn spr-btn-error spr-btn-secondary spr-btn-spinner">
<div class="spr-spinner-container">
<svg viewBox="0 0 24 24">
<circle class="spr-spinner" cx="12" cy="12" r="10.5" fill="none" stroke-width="3"></circle>
</svg>
</button>
<button class="spr-btn spr-btn-link spr-btn-spinner">
<div class="spr-spinner-container">
<svg viewBox="0 0 24 24">
<circle class="spr-spinner" cx="12" cy="12" r="10.5" fill="none" stroke-width="3"></circle>
</svg>
</button>
</div>
<div class="spr-inline-container-md">
<button class="spr-btn spr-btn-primary spr-btn-block">Full Width</button>
</div>
Compiled CSS
Example
scss
@import 'components/button';
css
compiled
@keyframes openPopover {
from {
transform: scale(0.9);
}
to {
transform: scale(1);
}
}
.spr-btn {
font-weight: 600 !important;
line-height: 1;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 7.5rem;
cursor: pointer;
user-select: none;
vertical-align: middle;
white-space: nowrap;
text-decoration: none;
color: #11401d;
transition-property: background-color, border-color, color;
transition-duration: 0.11s;
transition-timing-function: ease-in-out;
box-sizing: border-box;
border: 1px solid #6b6f7b;
border-radius: 0.25rem;
padding: 0.4375rem 0.9375rem;
font-family: "AvenirNext", "Helvetica Neue", Arial, sans-serif;
font-size: 1rem;
line-height: 1.5rem;
letter-spacing: 0;
font-weight: 400;
}
.spr-btn .spr-spinner {
stroke: #11401d;
}
.spr-btn:focus {
outline: none;
}
.spr-btn[disabled] {
cursor: default;
pointer-events: none;
opacity: 0.5;
}
.spr-btn-primary {
border-color: #2ba148;
background-color: #67d683;
}
.spr-btn-primary:hover {
background-color: #47cd69;
box-shadow: inset 0 0 0 0.0625rem #2ba148;
}
.spr-btn-primary:focus {
background-color: #47cd69;
box-shadow: 0 0 0 0.125rem rgba(43, 161, 72, 0.35), inset 0 0 0 0.0625rem #2ba148;
}
.spr-btn-primary:active {
background-color: #32b954;
box-shadow: inset 0 0 0 0.0625rem #2ba148;
}
.spr-btn-secondary {
border-color: #2ba148;
box-shadow: 0 0 0 0.0625rem #2ba148 inset;
background-color: #fff;
}
.spr-btn-secondary:hover {
background-color: rgba(43, 161, 72, 0.08);
}
.spr-btn-secondary:focus {
background-color: rgba(43, 161, 72, 0.08);
box-shadow: 0 0 0 0.125rem rgba(43, 161, 72, 0.35), inset 0 0 0 0.0625rem #2ba148;
}
.spr-btn-secondary:active {
background-color: rgba(43, 161, 72, 0.16);
}
.spr-btn-error {
border-color: #dd1d33;
background-color: #dd1d33;
box-shadow: inset 0 0 0 0.0625rem #dd1d33;
color: #fff;
}
.spr-btn-error .spr-spinner {
stroke: #fff;
}
.spr-btn-error .spr-icon {
background-color: #fff;
}
.spr-btn-error:hover {
border-color: #b9182b;
background-color: #b9182b;
box-shadow: inset 0 0 0 0.0625rem #b9182b;
}
.spr-btn-error:focus {
border-color: #b9182b;
background-color: #b9182b;
box-shadow: 0 0 0 0.125rem rgba(221, 29, 51, 0.35);
}
.spr-btn-error:active {
border-color: #951422;
background-color: #951422;
box-shadow: inset 0 0 0 0.0625rem #951422;
}
.spr-btn-error.spr-btn-secondary {
color: #710f1a;
border-color: #dd1d33;
box-shadow: 0 0 0 0.0625rem #dd1d33 inset;
background-color: #fff;
}
.spr-btn-error.spr-btn-secondary .spr-spinner {
stroke: #710f1a;
}
.spr-btn-error.spr-btn-secondary:hover {
background-color: rgba(221, 29, 51, 0.08);
}
.spr-btn-error.spr-btn-secondary:focus {
background-color: rgba(221, 29, 51, 0.08);
box-shadow: 0 0 0 0.125rem rgba(221, 29, 51, 0.35), inset 0 0 0 0.0625rem #dd1d33;
}
.spr-btn-error.spr-btn-secondary:active {
background-color: rgba(221, 29, 51, 0.16);
}
.spr-btn-error.spr-btn-secondary .spr-icon {
background-color: #710f1a;
}
.spr-btn-icon {
border-color: #bbbdc4;
min-width: 0rem !important;
padding: 0.4375rem 0.4375rem;
}
.spr-btn-icon:not(.spr-btn-link) {
border-color: #bbbdc4;
box-shadow: 0 0 0 0.0625rem #bbbdc4 inset;
background-color: #fff;
}
.spr-btn-icon:not(.spr-btn-link):hover {
background-color: rgba(187, 189, 196, 0.08);
}
.spr-btn-icon:not(.spr-btn-link):focus {
background-color: rgba(187, 189, 196, 0.08);
box-shadow: 0 0 0 0.125rem rgba(187, 189, 196, 0.35), inset 0 0 0 0.0625rem #bbbdc4;
}
.spr-btn-icon:not(.spr-btn-link):active {
background-color: rgba(187, 189, 196, 0.16);
}
.spr-btn-icon:hover {
background-color: #ebebeb !important;
box-shadow: inset 0 0 0 0.0625rem #bbbdc4;
}
.spr-btn-icon:focus {
background-color: #ebebeb !important;
box-shadow: 0 0 0 0.125rem rgba(187, 189, 196, 0.35), inset 0 0 0 0.0625rem #bbbdc4;
}
.spr-btn-icon:active {
background-color: #cbcbd2 !important;
box-shadow: inset 0 0 0 0.0625rem #bbbdc4;
}
.spr-btn-icon-secondary {
min-width: 0rem !important;
padding: 0.4375rem 0.4375rem;
}
.spr-btn-icon-secondary, .spr-btn-link {
background-color: transparent;
border-color: transparent;
color: #056ad7;
}
.spr-btn-icon-secondary .spr-spinner, .spr-btn-link .spr-spinner {
stroke: #056ad7;
}
.spr-btn-icon-secondary:hover, .spr-btn-link:hover {
border-color: #ebebeb;
box-shadow: inset 0 0 0 0.0625rem #ebebeb;
background-color: #ebebeb;
}
.spr-btn-icon-secondary:focus, .spr-btn-link:focus {
border-color: #ebebeb;
background-color: #ebebeb;
box-shadow: 0 0 0 0.125rem rgba(187, 189, 196, 0.35), inset 0 0 0 0.0625rem #ebebeb;
}
.spr-btn-icon-secondary:active, .spr-btn-link:active {
border-color: #d6d6d6;
box-shadow: inset 0 0 0 0.0625rem #d6d6d6;
background-color: #d6d6d6;
}
.spr-btn-sm {
font-weight: 600 !important;
padding: 0.1875rem 0.1875rem;
font-family: "AvenirNext", "Helvetica Neue", Arial, sans-serif;
font-size: 0.875rem;
line-height: 1.5rem;
letter-spacing: 0;
font-weight: 400;
}
.spr-btn-sm:not(.spr-btn-icon):not(.spr-btn-icon-secondary) {
padding: 0.1875rem 0.9375rem;
}
.spr-btn-lg {
padding: 0.6875rem 0.6875rem;
}
.spr-btn-lg:not(.spr-btn-icon):not(.spr-btn-icon-secondary) {
padding: 0.6875rem 0.9375rem;
}
.spr-btn-block {
min-width: 100%;
}
.spr-btn-spinner {
line-height: 1;
cursor: default;
pointer-events: none;
}