Button Component

A CSS implementation of the Sprout button component.

Related

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-icon-rotate-90 {
  transform: rotate(90deg);
}

.spr-icon-rotate-180 {
  transform: rotate(180deg);
}

.spr-icon-rotate-270 {
  transform: rotate(270deg);
}

.spr-btn {
  font-weight: 500 !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: #000c2b;
  transition-property: background-color, border-color, color;
  transition-duration: 0.11s;
  transition-timing-function: ease-in-out;
  box-sizing: border-box;
  border: 0 solid #53565a;
  border-radius: 0.25rem;
  padding: 0.4375rem 0.9375rem;
  font-family: "BentonSansBook", "Helvetica Neue", Arial, sans-serif;
  font-size: 1rem;
  line-height: 1.5rem;
  letter-spacing: 0;
  font-weight: 500;
}

.spr-btn .spr-spinner {
  stroke: #000c2b;
}

.spr-btn:focus {
  outline: none;
}

.spr-btn[disabled] {
  cursor: default;
  pointer-events: none;
  opacity: 0.5;
}

.spr-btn-primary {
  border-color: #006fcf;
  background-color: #006fcf;
  color: #fff;
}

.spr-btn-primary .spr-spinner {
  stroke: #fff;
}

.spr-btn-primary .spr-icon {
  background-color: #fff;
}

.spr-btn-primary:hover {
  background-color: #0059a6;
}

.spr-btn-primary:focus {
  background-color: #0059a6;
  box-shadow: 0 0 0 0.125rem rgba(0, 111, 207, 0.35);
}

.spr-btn-primary:active {
  background-color: #00437d;
  box-shadow: inset 0 0 0 0 #006fcf;
}

.spr-btn-secondary {
  border-color: #006fcf;
  box-shadow: 0 0 0 0 #006fcf inset;
  background-color: #fff;
  box-sizing: border-box;
  border: 1px solid #006fcf;
  border-radius: 0.25rem;
  color: #006fcf;
}

.spr-btn-secondary .spr-spinner {
  stroke: #006fcf;
}

.spr-btn-secondary:hover {
  background-color: rgba(0, 111, 207, 0.08);
}

.spr-btn-secondary:focus {
  background-color: rgba(0, 111, 207, 0.08);
  box-shadow: 0 0 0 0.125rem rgba(0, 111, 207, 0.35);
}

.spr-btn-secondary:active {
  background-color: rgba(0, 111, 207, 0.16);
}

.spr-btn-error {
  background-color: #b42c01;
  color: #fff;
}

.spr-btn-error .spr-spinner {
  stroke: #fff;
}

.spr-btn-error .spr-icon {
  background-color: #fff;
}

.spr-btn-error:hover {
  border-color: #8b2201;
  background-color: #8b2201;
}

.spr-btn-error:focus {
  border-color: #8b2201;
  background-color: #8b2201;
  box-shadow: 0 0 0 0.125rem rgba(180, 44, 1, 0.35);
}

.spr-btn-error:active {
  border-color: #631801;
  background-color: #631801;
}

.spr-btn-error.spr-btn-secondary {
  color: #3b2e2c;
  border-color: #b42c01;
  box-shadow: 0 0 0 0 #b42c01 inset;
  background-color: #fff;
  box-sizing: border-box;
  border: 1px solid #b42c01;
  border-radius: 0.25rem;
  color: #b42c01;
}

.spr-btn-error.spr-btn-secondary .spr-spinner {
  stroke: #3b2e2c;
}

.spr-btn-error.spr-btn-secondary .spr-spinner {
  stroke: #b42c01;
}

.spr-btn-error.spr-btn-secondary:hover {
  background-color: rgba(180, 44, 1, 0.08);
}

.spr-btn-error.spr-btn-secondary:focus {
  background-color: rgba(180, 44, 1, 0.08);
  box-shadow: 0 0 0 0.125rem rgba(180, 44, 1, 0.35);
}

.spr-btn-error.spr-btn-secondary:active {
  background-color: rgba(180, 44, 1, 0.16);
}

.spr-btn-error.spr-btn-secondary .spr-icon {
  background-color: #b42c01;
}

.spr-btn-icon {
  border-color: #c8c9c7;
  min-width: 0rem !important;
  padding: 0.4375rem 0.4375rem;
}

.spr-btn-icon:not(.spr-btn-link) {
  border-color: #c8c9c7;
  box-shadow: 0 0 0 0 #c8c9c7 inset;
  background-color: #fff;
  box-sizing: border-box;
  border: 1px solid #c8c9c7;
  border-radius: 0.25rem;
  color: #c8c9c7;
}

.spr-btn-icon:not(.spr-btn-link) .spr-spinner {
  stroke: #c8c9c7;
}

.spr-btn-icon:not(.spr-btn-link):hover {
  background-color: rgba(200, 201, 199, 0.08);
}

.spr-btn-icon:not(.spr-btn-link):focus {
  background-color: rgba(200, 201, 199, 0.08);
  box-shadow: 0 0 0 0.125rem rgba(200, 201, 199, 0.35);
}

.spr-btn-icon:not(.spr-btn-link):active {
  background-color: rgba(200, 201, 199, 0.16);
}

.spr-btn-icon:hover {
  background-color: #ebebeb !important;
  box-shadow: inset 0 0 0 0 #c8c9c7;
}

.spr-btn-icon:focus {
  background-color: #ebebeb !important;
  box-shadow: 0 0 0 0.125rem rgba(200, 201, 199, 0.35), inset 0 0 0 0.0625rem #c8c9c7;
}

.spr-btn-icon:active {
  background-color: #c8cfd6 !important;
  box-shadow: inset 0 0 0 0.0625rem #c8c9c7;
}

.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: #006fcf;
}

.spr-btn-icon-secondary .spr-spinner, .spr-btn-link .spr-spinner {
  stroke: #006fcf;
}

.spr-btn-icon-secondary:hover, .spr-btn-link:hover {
  border-color: rgba(200, 201, 199, 0.2);
  background-color: rgba(200, 201, 199, 0.2);
}

.spr-btn-icon-secondary:focus, .spr-btn-link:focus {
  border-color: rgba(200, 201, 199, 0.2);
  background-color: rgba(200, 201, 199, 0.2);
  box-shadow: 0 0 0 0.125rem rgba(200, 201, 199, 0.35), inset 0 0 0 0.0625rem #ebebeb;
}

.spr-btn-icon-secondary:active, .spr-btn-link:active {
  border-color: rgba(83, 86, 90, 0.2);
  background-color: rgba(83, 86, 90, 0.2);
}

.spr-btn-sm {
  font-weight: 500 !important;
  padding: 0.1875rem 0.1875rem;
  font-family: "BentonSansBook", "Helvetica Neue", Arial, sans-serif;
  font-size: 0.875rem;
  line-height: 1.5rem;
  letter-spacing: 0;
  font-weight: 500;
}

.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;
}