uikit
Version:
UIkit is a lightweight and modular front-end framework for developing fast and powerful web interfaces.
393 lines (302 loc) • 11.8 kB
text/less
// Name: Card
// Description: Component to create boxed content containers
//
// Component: `uk-card`
//
// Sub-objects: `uk-card-body`
// `uk-card-header`
// `uk-card-footer`
// `uk-card-media-*`
// `uk-card-title`
// `uk-card-badge`
//
// Modifiers: `uk-card-hover`
// `uk-card-default`
// `uk-card-primary`
// `uk-card-secondary`
// `uk-card-small`
// `uk-card-large`
//
// Uses: `uk-grid-stack`
//
// ========================================================================
// Variables
// ========================================================================
@card-body-padding-horizontal: @global-gutter;
@card-body-padding-vertical: @global-gutter;
@card-body-padding-horizontal-l: @global-medium-gutter;
@card-body-padding-vertical-l: @global-medium-gutter;
@card-header-padding-horizontal: @global-gutter;
@card-header-padding-vertical: round((@global-gutter / 2));
@card-header-padding-horizontal-l: @global-medium-gutter;
@card-header-padding-vertical-l: round((@global-medium-gutter / 2));
@card-footer-padding-horizontal: @global-gutter;
@card-footer-padding-vertical: (@global-gutter / 2);
@card-footer-padding-horizontal-l: @global-medium-gutter;
@card-footer-padding-vertical-l: round((@global-medium-gutter / 2));
@card-title-font-size: @global-large-font-size;
@card-title-line-height: 1.4;
@card-badge-top: 15px;
@card-badge-right: 15px;
@card-badge-height: 22px;
@card-badge-padding-horizontal: 10px;
@card-badge-background: @global-primary-background;
@card-badge-color: @global-inverse-color;
@card-badge-font-size: @global-small-font-size;
@card-hover-background: @global-muted-background;
@card-default-background: @global-muted-background;
@card-default-color: @global-color;
@card-default-title-color: @global-emphasis-color;
@card-default-hover-background: darken(@card-default-background, 5%);
@card-primary-background: @global-primary-background;
@card-primary-color: @global-inverse-color;
@card-primary-title-color: @card-primary-color;
@card-primary-hover-background: darken(@card-primary-background, 5%);
@card-primary-color-mode: light;
@card-secondary-background: @global-secondary-background;
@card-secondary-color: @global-inverse-color;
@card-secondary-title-color: @card-secondary-color;
@card-secondary-hover-background: darken(@card-secondary-background, 5%);
@card-secondary-color-mode: light;
@card-small-body-padding-horizontal: @global-margin;
@card-small-body-padding-vertical: @global-margin;
@card-small-header-padding-horizontal: @global-margin;
@card-small-header-padding-vertical: round((@global-margin / 1.5));
@card-small-footer-padding-horizontal: @global-margin;
@card-small-footer-padding-vertical: round((@global-margin / 1.5));
@card-large-body-padding-horizontal-l: @global-large-gutter;
@card-large-body-padding-vertical-l: @global-large-gutter;
@card-large-header-padding-horizontal-l: @global-large-gutter;
@card-large-header-padding-vertical-l: round((@global-large-gutter / 2));
@card-large-footer-padding-horizontal-l: @global-large-gutter;
@card-large-footer-padding-vertical-l: round((@global-large-gutter / 2));
/* ========================================================================
Component: Card
========================================================================== */
.uk-card {
position: relative;
box-sizing: border-box;
.hook-card();
}
/* Sections
========================================================================== */
.uk-card-body {
display: flow-root;
padding: @card-body-padding-vertical @card-body-padding-horizontal;
.hook-card-body();
}
.uk-card-header {
display: flow-root;
padding: @card-header-padding-vertical @card-header-padding-horizontal;
.hook-card-header();
}
.uk-card-footer {
display: flow-root;
padding: @card-footer-padding-vertical @card-footer-padding-horizontal;
.hook-card-footer();
}
/* Desktop and bigger */
@media (min-width: @breakpoint-large) {
.uk-card-body { padding: @card-body-padding-vertical-l @card-body-padding-horizontal-l; }
.uk-card-header { padding: @card-header-padding-vertical-l @card-header-padding-horizontal-l; }
.uk-card-footer { padding: @card-footer-padding-vertical-l @card-footer-padding-horizontal-l; }
}
/*
* Remove margin from the last-child
*/
.uk-card-body > :last-child,
.uk-card-header > :last-child,
.uk-card-footer > :last-child { margin-bottom: 0; }
/* Media
========================================================================== */
/*
* Reserved alignment modifier to style the media element, e.g. with `border-radius`
* Implemented by the theme
*/
[class*='uk-card-media'] {
.hook-card-media();
}
.uk-card-media-top,
.uk-grid-stack > .uk-card-media-left,
.uk-grid-stack > .uk-card-media-right {
.hook-card-media-top();
}
.uk-card-media-bottom {
.hook-card-media-bottom();
}
:not(.uk-grid-stack) > .uk-card-media-left {
.hook-card-media-left();
}
:not(.uk-grid-stack) > .uk-card-media-right {
.hook-card-media-right();
}
/* Title
========================================================================== */
.uk-card-title {
font-size: @card-title-font-size;
line-height: @card-title-line-height;
.hook-card-title();
}
/* Badge
========================================================================== */
/*
* 1. Position
* 2. Size
* 3. Style
* 4. Center child vertically
*/
.uk-card-badge {
/* 1 */
position: absolute;
top: @card-badge-top;
right: @card-badge-right;
z-index: 1;
/* 2 */
height: @card-badge-height;
padding: 0 @card-badge-padding-horizontal;
/* 3 */
background: @card-badge-background;
color: @card-badge-color;
font-size: @card-badge-font-size;
/* 4 */
display: flex;
justify-content: center;
align-items: center;
line-height: 0;
.hook-card-badge();
}
/*
* Remove margin from adjacent element
*/
.uk-card-badge:first-child + * { margin-top: 0; }
/* Hover modifier
========================================================================== */
.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover {
background-color: @card-hover-background;
.hook-card-hover();
}
/* Style modifiers
========================================================================== */
/*
* Default
* Note: Header and Footer are only implemented for the default style
*/
.uk-card-default {
background-color: @card-default-background;
color: @card-default-color;
.hook-card-default();
}
.uk-card-default .uk-card-title {
color: @card-default-title-color;
.hook-card-default-title();
}
.uk-card-default.uk-card-hover:hover {
background-color: @card-default-hover-background;
.hook-card-default-hover();
}
.uk-card-default .uk-card-header {
.hook-card-default-header();
}
.uk-card-default .uk-card-footer {
.hook-card-default-footer();
}
/*
* Primary
*/
.uk-card-primary {
background-color: @card-primary-background;
color: @card-primary-color;
.hook-card-primary();
}
.uk-card-primary .uk-card-title {
color: @card-primary-title-color;
.hook-card-primary-title();
}
.uk-card-primary.uk-card-hover:hover {
background-color: @card-primary-hover-background;
.hook-card-primary-hover();
}
// Color Mode
.uk-card-primary.uk-card-body:extend(.uk-light all) when (@card-primary-color-mode = light) {}
.uk-card-primary > :not([class*='uk-card-media']):extend(.uk-light all) when (@card-primary-color-mode = light) {}
.uk-card-primary.uk-card-body:extend(.uk-dark all) when (@card-primary-color-mode = dark) {}
.uk-card-primary > :not([class*='uk-card-media']):extend(.uk-dark all) when (@card-primary-color-mode = dark) {}
/*
* Secondary
*/
.uk-card-secondary {
background-color: @card-secondary-background;
color: @card-secondary-color;
.hook-card-secondary();
}
.uk-card-secondary .uk-card-title {
color: @card-secondary-title-color;
.hook-card-secondary-title();
}
.uk-card-secondary.uk-card-hover:hover {
background-color: @card-secondary-hover-background;
.hook-card-secondary-hover();
}
// Color Mode
.uk-card-secondary.uk-card-body:extend(.uk-light all) when (@card-secondary-color-mode = light) {}
.uk-card-secondary > :not([class*='uk-card-media']):extend(.uk-light all) when (@card-secondary-color-mode = light) {}
.uk-card-secondary.uk-card-body:extend(.uk-dark all) when (@card-secondary-color-mode = dark) {}
.uk-card-secondary > :not([class*='uk-card-media']):extend(.uk-dark all) when (@card-secondary-color-mode = dark) {}
/* Size modifier
========================================================================== */
/*
* Small
*/
.uk-card-small.uk-card-body,
.uk-card-small .uk-card-body { padding: @card-small-body-padding-vertical @card-small-body-padding-horizontal; }
.uk-card-small .uk-card-header { padding: @card-small-header-padding-vertical @card-small-header-padding-horizontal; }
.uk-card-small .uk-card-footer { padding: @card-small-footer-padding-vertical @card-small-footer-padding-horizontal; }
/*
* Large
*/
/* Desktop and bigger */
@media (min-width: @breakpoint-large) {
.uk-card-large.uk-card-body,
.uk-card-large .uk-card-body { padding: @card-large-body-padding-vertical-l @card-large-body-padding-horizontal-l; }
.uk-card-large .uk-card-header { padding: @card-large-header-padding-vertical-l @card-large-header-padding-horizontal-l; }
.uk-card-large .uk-card-footer { padding: @card-large-footer-padding-vertical-l @card-large-footer-padding-horizontal-l; }
}
// Hooks
// ========================================================================
.hook-card-misc();
.hook-card() {}
.hook-card-body() {}
.hook-card-header() {}
.hook-card-footer() {}
.hook-card-media() {}
.hook-card-media-top() {}
.hook-card-media-bottom() {}
.hook-card-media-left() {}
.hook-card-media-right() {}
.hook-card-title() {}
.hook-card-badge() {}
.hook-card-hover() {}
.hook-card-default() {}
.hook-card-default-title() {}
.hook-card-default-hover() {}
.hook-card-default-header() {}
.hook-card-default-footer() {}
.hook-card-primary() {}
.hook-card-primary-title() {}
.hook-card-primary-hover() {}
.hook-card-secondary() {}
.hook-card-secondary-title() {}
.hook-card-secondary-hover() {}
.hook-card-misc() {}
// Inverse
// ========================================================================
@inverse-card-badge-background: @inverse-global-primary-background;
@inverse-card-badge-color: @inverse-global-inverse-color;
.hook-inverse() {
&.uk-card-badge {
background-color: @inverse-card-badge-background;
color: @inverse-card-badge-color;
.hook-inverse-card-badge();
}
}
.hook-inverse-card-badge() {}