uikit
Version:
UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.
213 lines (137 loc) • 5.83 kB
text/less
//
// Component: Button
//
// ========================================================================
// Variables
// ========================================================================
@button-line-height: @global-control-height - (@button-border-width * 2);
@button-small-line-height: @global-control-small-height - (@button-border-width * 2);
@button-large-line-height: @global-control-large-height - (@button-border-width * 2);
@button-font-size: @global-small-font-size;
@button-large-font-size: @global-small-font-size;
@button-default-background: transparent;
@button-default-hover-background: transparent;
@button-default-active-background: transparent;
@button-disabled-background: transparent;
@button-text-hover-color: @global-emphasis-color;
//
// New
//
@button-text-transform: uppercase;
@button-border-width: @global-border-width;
@button-default-border: @global-border;
@button-default-hover-border: darken(@global-border, 20%);
@button-default-active-border: darken(@global-border, 30%);
@button-disabled-border: @global-border;
@button-text-border-width: @global-border-width;
@button-text-border: currentColor;
// Component
// ========================================================================
.hook-button() {
text-transform: @button-text-transform;
transition: 0.1s ease-in-out;
transition-property: color, background-color, border-color;
}
.hook-button-hover() {}
.hook-button-active() {}
// Style modifiers
// ========================================================================
.hook-button-default() { border: @button-border-width solid @button-default-border; }
.hook-button-default-hover() { border-color: @button-default-hover-border; }
.hook-button-default-active() { border-color: @button-default-active-border; }
//
// Primary
//
.hook-button-primary() { border: @button-border-width solid transparent; }
.hook-button-primary-hover() {}
.hook-button-primary-active() {}
//
// Secondary
//
.hook-button-secondary() { border: @button-border-width solid transparent; }
.hook-button-secondary-hover() {}
.hook-button-secondary-active() {}
//
// Danger
//
.hook-button-danger() { border: @button-border-width solid transparent; }
.hook-button-danger-hover() {}
.hook-button-danger-active() {}
// Disabled
// ========================================================================
.hook-button-disabled() { border-color: @button-disabled-border; }
// Size modifiers
// ========================================================================
.hook-button-small() {}
.hook-button-large() {}
// Text modifier
// ========================================================================
.hook-button-text() {
position: relative;
&::before {
content: "";
position: absolute;
bottom: 0;
left: 0;
right: 100%;
border-bottom: @button-text-border-width solid @button-text-border;
transition: right 0.3s ease-out;
}
}
.hook-button-text-hover() {
&::before { right: 0; }
}
.hook-button-text-disabled() {
&::before { display: none; }
}
// Link modifier
// ========================================================================
.hook-button-link() {}
// Miscellaneous
// ========================================================================
.hook-button-misc() {
/* Group
========================================================================== */
/*
* Collapse border
*/
.uk-button-group > .uk-button:nth-child(n+2),
.uk-button-group > div:nth-child(n+2) .uk-button { margin-left: -@button-border-width; }
/*
* Create position context to superimpose the successor elements border
* Known issue: If you use an `a` element as button and an icon inside,
* the active state will not work if you click the icon inside the button
* Workaround: Just use a `button` or `input` element as button
*/
.uk-button-group .uk-button:hover,
.uk-button-group .uk-button:focus,
.uk-button-group .uk-button:active,
.uk-button-group .uk-button.uk-active {
position: relative;
z-index: 1;
}
}
// Inverse
// ========================================================================
@inverse-button-default-background: transparent;
@inverse-button-default-color: @inverse-global-emphasis-color;
@inverse-button-default-hover-background: transparent;
@inverse-button-default-hover-color: @inverse-global-emphasis-color;
@inverse-button-default-active-background: transparent;
@inverse-button-default-active-color: @inverse-global-emphasis-color;
@inverse-button-text-hover-color: @inverse-global-emphasis-color;
.hook-inverse-button-default() { border-color: @inverse-global-color; }
.hook-inverse-button-default-hover() { border-color: @inverse-global-emphasis-color; }
.hook-inverse-button-default-active() { border-color: @inverse-global-emphasis-color; }
.hook-inverse-button-primary() {}
.hook-inverse-button-primary-hover() {}
.hook-inverse-button-primary-active() {}
.hook-inverse-button-secondary() {}
.hook-inverse-button-secondary-hover() {}
.hook-inverse-button-secondary-active() {}
.hook-inverse-button-text() {
&::before { border-bottom-color: @inverse-global-emphasis-color; }
}
.hook-inverse-button-text-hover() {}
.hook-inverse-button-text-disabled() {}
.hook-inverse-button-link() {}