<!-- Default -->
<button class="button " type="button">
I am a button
</button>
<!-- Icon -->
<button class="button button--icon" type="button" aria-label="click to do something">
<svg class="icon button__icon" role="img">
<title>Compare</title>
<use xlink:href="/images/icons-sprite.svg#compare"></use>
</svg>
</button>
<!-- Secondary -->
<button class="button button--secondary" type="button">
I am button secondary
</button>
<!-- Skew -->
<a class="button button--skew" href="#" title="I am a link button">
Skew button
</a>
<!-- Fluid -->
<button class="button button--fluid" type="button">
I am a button
</button>
<!-- Sale -->
<button class="button button--sale" type="button">
Sale!
</button>
<!-- Gray -->
<button class="button button--gray" type="button" aria-label="click to do something">
<svg class="icon button__icon" role="img">
<title>user</title>
<use xlink:href="/images/icons-sprite.svg#user"></use>
</svg>
</button>
<!-- Gray -->
<button class="button button--gray" type="button" aria-label="click to do something">
<svg class="icon button__icon" role="img">
<title>phone</title>
<use xlink:href="/images/icons-sprite.svg#phone"></use>
</svg>
</button>
<!-- Minicart -->
<button class="button button--minicart" type="button" aria-label="click to do something">
<svg class="icon button__icon" role="img">
<title>shopping-cart</title>
<use xlink:href="/images/icons-sprite.svg#shopping-cart"></use>
</svg>
</button>
<!-- Language -->
<button class="button button--language" type="button" aria-label="click to do something">
NL
<svg class="icon button__icon" role="img">
<title>angle-down</title>
<use xlink:href="/images/icons-sprite.svg#angle-down"></use>
</svg>
</button>
<!-- Plus -->
<button class="button button--plus" type="button" aria-label="click to do something">
<svg class="icon button__icon" role="img">
<title>plus</title>
<use xlink:href="/images/icons-sprite.svg#plus"></use>
</svg>
</button>
<!-- Plus Secondary -->
<button class="button button--plus-secondary" type="button" aria-label="click to do something">
<svg class="icon button__icon" role="img">
<title>plus</title>
<use xlink:href="/images/icons-sprite.svg#plus"></use>
</svg>
</button>
<!-- Category -->
<button class="button button--category" type="button" aria-label="click to do something">
Bekijk categorie
<svg class="icon button__icon" role="img">
<title>angle-right</title>
<use xlink:href="/images/icons-sprite.svg#angle-right"></use>
</svg>
</button>
<!-- Category Black -->
<button class="button button--category--secondary" type="button" aria-label="click to do something">
Bekijk catogorie
<svg class="icon button__icon" role="img">
<title>angle-right</title>
<use xlink:href="/images/icons-sprite.svg#angle-right"></use>
</svg>
</button>
<!-- Angle Right Red -->
<button class="button button--angle-right-red" type="button" aria-label="click to do something">
<svg class="icon button__icon" role="img">
<title>angle right</title>
<use xlink:href="/images/icons-sprite.svg#angle-right"></use>
</svg>
</button>
<!-- Angle Right Black -->
<button class="button button--angle-right-black" type="button" aria-label="click to do something">
<svg class="icon button__icon" role="img">
<title>angle right</title>
<use xlink:href="/images/icons-sprite.svg#angle-right"></use>
</svg>
</button>
<!-- Link -->
<a class="button button--link" href="#" title="I am a link button">
I am a link button
</a>
<{{{ tag }}} class="button {{ class }}" {{{ attributes }}}>
{{{ text }}}
{{#if icon }}
{{ render '@icon' icon }}
{{/if}}
</{{{ tag }}}>
/* Default */
{
"tag": "button",
"class": "",
"attributes": "type=\"button\"",
"text": "I am a button"
}
/* Icon */
{
"tag": "button",
"class": "button--icon",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "",
"icon": {
"id": "arrow-left",
"title": "Arrow left",
"class": "button__icon"
}
}
/* Secondary */
{
"tag": "button",
"class": "button--secondary",
"attributes": "type=\"button\"",
"text": "I am button secondary"
}
/* Skew */
{
"tag": "a",
"class": "button--skew",
"attributes": "href=\"#\" title=\"I am a link button\"",
"text": "Skew button"
}
/* Fluid */
{
"tag": "button",
"class": "button--fluid",
"attributes": "type=\"button\"",
"text": "I am a button"
}
/* Sale */
{
"tag": "button",
"class": "button--sale",
"attributes": "type=\"button\"",
"text": "Sale!"
}
/* Gray */
{
"tag": "button",
"class": "button--gray",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "",
"icon": {
"id": "user",
"title": "user",
"class": "button__icon"
}
}
/* Gray */
{
"tag": "button",
"class": "button--gray",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "",
"icon": {
"id": "phone",
"title": "phone",
"class": "button__icon"
}
}
/* Minicart */
{
"tag": "button",
"class": "button--minicart",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "",
"icon": {
"id": "shopping-cart",
"title": "shopping-cart",
"class": "button__icon"
}
}
/* Language */
{
"tag": "button",
"class": "button--language",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "NL ",
"icon": {
"id": "angle-down",
"title": "angle-down",
"class": "button__icon"
}
}
/* Plus */
{
"tag": "button",
"class": "button--plus",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "",
"icon": {
"id": "plus",
"title": "plus",
"class": "button__icon"
}
}
/* Plus Secondary */
{
"tag": "button",
"class": "button--plus-secondary",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "",
"icon": {
"id": "plus",
"title": "plus",
"class": "button__icon"
}
}
/* Category */
{
"tag": "button",
"class": "button--category",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "Bekijk categorie",
"icon": {
"id": "angle-right",
"title": "angle-right",
"class": "button__icon"
}
}
/* Category Black */
{
"tag": "button",
"class": "button--category--secondary",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "Bekijk catogorie",
"icon": {
"id": "angle-right",
"title": "angle-right",
"class": "button__icon"
}
}
/* Angle Right Red */
{
"tag": "button",
"class": "button--angle-right-red",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "",
"icon": {
"id": "angle-right",
"title": "angle right",
"class": "button__icon"
}
}
/* Angle Right Black */
{
"tag": "button",
"class": "button--angle-right-black",
"attributes": "type=\"button\" aria-label=\"click to do something\"",
"text": "",
"icon": {
"id": "angle-right",
"title": "angle right",
"class": "button__icon"
}
}
/* Link */
{
"tag": "a",
"class": "button--link",
"attributes": "href=\"#\" title=\"I am a link button\"",
"text": "I am a link button"
}
$button__min-size : 48px !default;
$button__padding : 0 $spacer--large !default;
$button__background : $color-primary !default;
$button__background-hover : $color-primary !default;
$button__border : none !default;
$button__border-radius : $border-radius !default;
$button__outline : $outline-base !default;
$button__font-family : $font-family-base !default;
$button__font-size : $font-size-base !default;
$button__font-weight : $font-weight-base !default;
$button__line-height : 1 !default;
$button__text-color : $white !default;
$button__text-transform : uppercase !default;
$button__text-decoration : none !default;
$button__text-decoration-hover : none !default;
$button__transform : perspective(1px) translateZ(0) !default;
$button__transition : all 0.5s ease-in-out !default;
// before used in hover state
$button__before-display : none !default;
$button__before-content : '' !default;
$button__before-width : 100% !default;
$button__before-position-left : 0 !default;
$button__before-position-top : 0 !default;
$button__before-position-bottom : 0 !default;
$button__before-background : $color-primary !default;
$button__before-transform : scaleX(0) !default;
$button__before-transform-origin : 0 50% !default;
// before hover
$button__before-transform-hover : scaleX(1) !default;
$button__before-display-hover : block !default;
// after used in hover state
$button__after-display : none !default;
$button__after-content : none !default;
$button__after-position-left : 20% !default;
$button__after-position-top : 50% !default;
$button__after-z-index : 1 !default;
$button__after-opacity : 0 !default;
$button__after-transform : translateY(-50%) !default;
$button__after-transform-origin : center !default;
// after hover
$button__after-display-hover : block !default;
$button__after-position-left-hover : calc(50% - 12px) !default;
$button__after-opacity-hover : 1 !default;
// disabled
$button__background-disabled : $gray !default;
// Secondary
$button__color--secondary : $color-primary !default;
$button__background--secondary : $white !default;
$button__border--secondary : 2px solid $button__color--secondary !default;
// Secondary hover
$button__color-hover--secondary : $white !default;
$button__background-hover--secondary : $black !default;
$button__before-z-index-hover--secondary : -1 !default;
$button__after-display-hover--secondary : none !default;
// Secondary light
$button__font-weight--light : $font-weight-normal !default;
$button__text-transform--light : none !default;
// Button Link
$button__color--link : $color-primary !default;
$button__background--link : transparent !default;
$button__text-transform--link : none !default;
$button__text-decoration--link : underline !default;
// Button Link hover
$button__color-hover--link : $color-primary !default;
$button__background-hover--link : transparent !default;
$button__before-display-hover--link : none !default;
$button__after-display-hover--link : none !default;
// Button icon
$button__padding--icon : 0 $spacer !default;
$button__icon-size : 24px !default;
$button__icon-fill : $color-primary !default;
$button__icon-transition : $transition-base !default;
$button__icon-fill-hover--icon : $color-primary !default;
$button__bg--icon : $white !default;
$button__icon-z-index : $z-index-low !default;
$button__text-margin--icon : 0 $spacer !default;
$button__text-z-index : $z-index-low !default;
$button__text-color--icon : $color-primary !default;
$button__text-color-hover--icon : $color-primary !default;
$button__font-weight--icon : $font-weight-normal !default;
$button__text-transform--icon : none !default;
$button__background-hover--icon : initial !default;
// Button icon light
$button__icon-fill-hover--icon-light : $color-primary !default;
$button__before-background--icon-light : $gray-light !default;
$button__text-color-hover--icon-light : $color-primary !default;
$button__background-hover--icon-light : initial !default;
// Button icon border
$button__border--icon-border : $border-width-base $border-style-base $color-primary !default;
$button__border-hover--icon-border : $button__border--icon-border !default;
$button__background--icon-border : $button__bg--icon !default;
$button__background-hover--icon-border : $button__background-hover--icon !default;
// Button rotate-icon
$button__icon-fill-hover--rotate-icon : $color-primary !default;
$button__transform-hover--rotate-icon : rotate(180deg) !default;
$button__before-background--rotate-icon : $gray-light !default;
$button__background-hover--rotate-icon : initial !default;
// Button add-to
// icon & text
$button__icon-display--add-to : block !default;
$button__icon-display--add-to\@medium : none !default;
$button__text-display--add-to : none !default;
$button__text-display--add-to\@medium : block !default;
$button__before-display--add-to : block !default;
$button__after-content-icon--add-to : none !default;
$button__after-position-left--add-to : calc(50% - 12px) !default;
$button__after-position-top--add-to : auto !default;
$button__after-transform--add-to : translateX(-150%) !default;
$button__after-transform-hover--add-to : translateY(0) !default;
$button__after-content-text--add-to : none !default;
$button__background--icon-fill : transparent !default;
$button__icon-after-mask-repeat--icon-fill : no-repeat !default;
$button__icon-after-mask-position--icon-fill : center / cover !default;
$button__icon-after-bg-size--icon-fill : 400% 400% !default;
$button__icon-after-bg-image--icon-fill : linear-gradient(to right, $color-primary 50%, transparent 50%) !default;
$button__icon-after-bg-position--icon-fill : 100% 100% !default;
$button__icon-after-bg-position-hover--icon-fill: 0 100% !default;
$button__icon-after-transition--icon-fill : background 0.5s linear !default;
$button__icon-after-z-index--icon-fill : -1 !default;
$button__icon-after-oapcity--icon-fill : 1 !default;
$button__icon-fill-hover--icon-fill : $color-primary !default;
$button__before-background--icon-fill : transparent !default;
$button__background-hover--icon-fill : initial !default;
%button-before:before {
content: $button__before-content;
// sass-lint:disable no-important
display: $button__before-display !important;
// sass-lint:enable no-important
position: absolute;
width: $button__before-width;
left: $button__before-position-left;
top: $button__before-position-top;
bottom: $button__before-position-bottom;
background-color: $button__before-background;
transform: $button__before-transform;
transform-origin: $button__before-transform-origin;
transition: $button__transition;
pointer-events: none;
}
%button-after:after {
content: $button__after-content;
// sass-lint:disable no-important
display: $button__after-display !important;
// sass-lint:enable no-important
position: absolute;
left: $button__after-position-left;
top: $button__after-position-top;
width: $button__icon-size;
height: $button__icon-size;
padding: $icon__padding;
z-index: $button__after-z-index;
opacity: $button__after-opacity;
transform: $button__after-transform;
transform-origin: $button__after-transform-origin;
transition: $button__transition;
pointer-events: none;
}
@import 'button-variables';
.button {
height: 47px;
width: initial;
border: none;
background-color: $red;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
min-width: 48px;
border-radius: 4px;
font-family: $font-family-evogria;
font-style: $font-style-italic;
color: $white;
transition: all 0.3s ease-in-out, outline-offset 1ms;
font-weight: $font-weight-bold;
&:hover {
background-color: $darkred;
& .icon {
fill: $gray-darkest;
}
}
&--half-radius {
border-radius: 4px 0;
}
&--icon {
& .icon {
width: 17px;
height: 17px;
fill: #fff;
}
}
&--in-input {
position: absolute;
top: 0;
right: 0;
width: 42px;
height: 42px;
}
&--skew {
transform: skewX(-12deg);
border-radius: 4px;
font-style: normal;
padding-left: $spacer--25;
padding-right: $spacer--15;
}
&--light {
font-weight: $button__font-weight--light;
text-transform: $button__text-transform--light;
}
&--secondary {
background-color: $gray-darker;
&:hover {
background-color: $color-primary;
& .icon {
fill: $color-primary;
}
}
}
&--secondary-light {
@extend .button--secondary;
@extend .button--light;
}
&--w-max-content {
width: max-content;
}
&--text {
background-color: transparent;
padding: 0;
}
&--gray {
background: $gray-button;
color: $gray-dark;
}
&--white {
background: $white;
color: $gray-dark;
}
&:disabled,
&[disabled] {
background-color: $button__background-disabled;
border-color: $button__background-disabled;
color: $button__text-color;
cursor: not-allowed;
.icon {
fill: $button__text-color;
}
&:hover {
background-color: $button__background-disabled;
//&:before,
//&:after {
// display: none;
//}
}
}
}
.action.primary.checkout {
@extend .button;
}
IMPORTANT! All buttons that don’t
have text inside (labels) and have only
graphic representation, usage or
aria-label
or aria-labelledby
is mandatory! Text inside aria
label should be informative and
should explain what the button is
for.