// Name: Utility // Description: Collection of useful utility classes to style your content // // Component: `uk-container-*` // `uk-clearfix` // `uk-nbfc-*` // `uk-float-*` // `uk-align-*` // `uk-vertical-align-*` // `uk-height-*` // `uk-responsive-*` // `uk-margin-*` // `uk-padding-*` // `uk-border-*` // `uk-heading-*` // `uk-link-*` // `uk-scrollable-*` // `uk-overflow-*` // `uk-position-*` // `uk-display-*` // `uk-visible-*` // `uk-hidden-*` // `uk-invisible` // // Used by: Overlay // // ======================================================================== // Variables // ======================================================================== $utility-container-max-width: 980px !default; $utility-container-padding-horizontal: 25px !default; $utility-container-large-max-width: 1200px !default; $utility-container-large-padding-horizontal: 35px !default; $utility-align-horizontal: 15px !default; $utility-align-vertical: 15px !default; $utility-height-viewport-min-height: 600px !default; $utility-margin: 15px !default; $utility-margin-small: 5px !default; $utility-margin-large: 50px !default; $utility-border-rounded: 5px !default; $utility-heading-large-small-font-size: 36px !default; $utility-heading-large-small-line-height: 42px !default; $utility-heading-large-font-size: 52px !default; $utility-heading-large-line-height: 64px !default; $utility-link-muted-color: #444 !default; $utility-link-muted-hover-color: #444 !default; $utility-scrollable-text-height: 300px !default; $utility-scrollable-box-height: 170px !default; $utility-scrollable-box-padding: 10px !default; $utility-scrollable-box-border: #ddd !default; $utility-scrollable-box-border-width: 1px !default; /* ======================================================================== Component: Utility ========================================================================== */ /* Container ========================================================================== */ .uk-container { box-sizing: border-box; max-width: $utility-container-max-width; padding: 0 $utility-container-padding-horizontal; @include hook-container(); } /* Large screen and bigger */ @media (min-width: $breakpoint-xlarge) { .uk-container { max-width: $utility-container-large-max-width; padding: 0 $utility-container-large-padding-horizontal; } } /* * Micro clearfix */ .uk-container:before, .uk-container:after { content: ""; display: table; } .uk-container:after { clear: both; } /* * Center container */ .uk-container-center { margin-left: auto; margin-right: auto; } /* Clearing ========================================================================== */ /* * Micro clearfix * `table-cell` is used with `:before` because `table` creates a 1px gap when it becomes a flex item, only in Webkit * `table` is used again with `:after` because `clear` only works with block elements. * Note: `display: block` with `overflow: hidden` is currently not working in the latest Safari */ .uk-clearfix:before { content: ""; display: table-cell; } .uk-clearfix:after { content: ""; display: table; clear: both; } /* * Create a new block formatting context */ .uk-nbfc { overflow: hidden; } .uk-nbfc-alt { display: table-cell; width: 10000px; } /* Alignment of block elements ========================================================================== */ /* * Float blocks * 1. Prevent content overflow on small devices */ .uk-float-left { float: left; } .uk-float-right { float: right; } /* 1 */ [class*='uk-float-'] { max-width: 100%; } /* Alignment of images and objects ========================================================================== */ /* * Alignment */ [class*='uk-align-'] { display: block; margin-bottom: $utility-align-vertical; } .uk-align-left { margin-right: $utility-align-horizontal; float: left; } .uk-align-right { margin-left: $utility-align-horizontal; float: right; } /* Tablet and bigger */ @media (min-width: $breakpoint-medium) { .uk-align-medium-left { margin-right: $utility-align-horizontal; float: left; } .uk-align-medium-right { margin-left: $utility-align-horizontal; float: right; } } .uk-align-center { margin-left: auto; margin-right: auto; } /* Vertical alignment ========================================================================== */ /* * Remove whitespace between child elements when using `inline-block` */ .uk-vertical-align { font-size: 0.001px; } /* * The `uk-vertical-align` container needs a specific height */ .uk-vertical-align:before { content: ''; display: inline-block; height: 100%; vertical-align: middle; } /* * Sub-object which can have any height * 1. Reset whitespace hack */ .uk-vertical-align-middle, .uk-vertical-align-bottom { display: inline-block; max-width: 100%; /* 1 */ font-size: 1rem; } .uk-vertical-align-middle { vertical-align: middle; } .uk-vertical-align-bottom { vertical-align: bottom; } /* Height ========================================================================== */ /* * More robust if padding and border are used */ [class*='uk-height'] { box-sizing: border-box; } /* * Useful to extend the `html` and `body` element to the full height of the page. */ .uk-height-1-1 { height: 100%; } /* * Useful to create image teasers */ .uk-height-viewport { height: 100vh; min-height: $utility-height-viewport-min-height; } /* Responsive objects * Note: Images are already responsive by default, see Base component ========================================================================== */ /* * 1. Corrects `max-width` and `max-height` behavior if padding and border are used */ .uk-responsive-width, .uk-responsive-height { box-sizing: border-box; } /* * Responsiveness: Sets a maximum width relative to the parent and auto scales the height * `important` needed to override `uk-img-preserve img` */ .uk-responsive-width { max-width: 100% !important; height: auto; } /* * Responsiveness: Sets a maximum height relative to the parent and auto scales the width * Only works if the parent element has a fixed height. */ .uk-responsive-height { max-height: 100%; width: auto; } /* Margin ========================================================================== */ /* * Create a block with the same margin of a paragraph * Add margin if adjacent element */ .uk-margin { margin-bottom: $utility-margin; } * + .uk-margin { margin-top: $utility-margin; } .uk-margin-top { margin-top: $utility-margin !important; } .uk-margin-bottom { margin-bottom: $utility-margin !important; } .uk-margin-left { margin-left: $utility-margin !important; } .uk-margin-right { margin-right: $utility-margin !important; } /* * Larger margins */ .uk-margin-large { margin-bottom: $utility-margin-large; } * + .uk-margin-large { margin-top: $utility-margin-large; } .uk-margin-large-top { margin-top: $utility-margin-large !important; } .uk-margin-large-bottom { margin-bottom: $utility-margin-large !important; } .uk-margin-large-left { margin-left: $utility-margin-large !important; } .uk-margin-large-right { margin-right: $utility-margin-large !important; } /* * Smaller margins */ .uk-margin-small { margin-bottom: $utility-margin-small; } * + .uk-margin-small { margin-top: $utility-margin-small; } .uk-margin-small-top { margin-top: $utility-margin-small !important; } .uk-margin-small-bottom { margin-bottom: $utility-margin-small !important; } .uk-margin-small-left { margin-left: $utility-margin-small !important; } .uk-margin-small-right { margin-right: $utility-margin-small !important; } /* * Remove margins */ .uk-margin-remove { margin: 0 !important; } .uk-margin-top-remove { margin-top: 0 !important; } .uk-margin-bottom-remove { margin-bottom: 0 !important; } /* Padding ========================================================================== */ .uk-padding-remove { padding: 0 !important; } .uk-padding-top-remove { padding-top: 0 !important; } .uk-padding-bottom-remove { padding-bottom: 0 !important; } .uk-padding-vertical-remove { padding-top: 0 !important; padding-bottom: 0 !important; } /* Border ========================================================================== */ .uk-border-circle { border-radius: 50%; } .uk-border-rounded { border-radius: $utility-border-rounded; } /* Headings ========================================================================== */ .uk-heading-large { font-size: $utility-heading-large-small-font-size; line-height: $utility-heading-large-small-line-height; } /* Tablet and bigger */ @media (min-width: $breakpoint-medium) { .uk-heading-large { font-size: $utility-heading-large-font-size; line-height: $utility-heading-large-line-height; } } /* Link ========================================================================== */ /* * Let links appear in default text color */ .uk-link-muted, .uk-link-muted a { color: $utility-link-muted-color; } .uk-link-muted:hover, .uk-link-muted a:hover { color: $utility-link-muted-hover-color; } /* * Reset link style */ .uk-link-reset, .uk-link-reset a, .uk-link-reset:hover, .uk-link-reset a:hover, .uk-link-reset:focus, .uk-link-reset a:focus { color: inherit; text-decoration: none; } /* Scrollable ========================================================================== */ /* * Enable scrolling for preformatted text */ .uk-scrollable-text { height: $utility-scrollable-text-height; overflow-y: scroll; -webkit-overflow-scrolling: touch; resize: both; } /* * Box with scrolling enabled */ .uk-scrollable-box { box-sizing: border-box; height: $utility-scrollable-box-height; padding: $utility-scrollable-box-padding; border: $utility-scrollable-box-border-width solid $utility-scrollable-box-border; overflow: auto; -webkit-overflow-scrolling: touch; resize: both; @include hook-scrollable-box(); } .uk-scrollable-box > :last-child { margin-bottom: 0; } /* Overflow ========================================================================== */ .uk-overflow-hidden { overflow: hidden; } /* * Enable scrollbars if content is clipped */ .uk-overflow-container { overflow: auto; -webkit-overflow-scrolling: touch; } .uk-overflow-container > :last-child { margin-bottom: 0; } /* Position ========================================================================== */ .uk-position-absolute, [class*='uk-position-top'], [class*='uk-position-bottom'] { position: absolute !important; } /* Don't use `width: 100%` because it is wrong if the parent has padding. */ .uk-position-top { top: 0; left: 0; right: 0; } .uk-position-bottom { bottom: 0; left: 0; right: 0; } .uk-position-top-left { top: 0; left: 0; } .uk-position-top-right { top: 0; right: 0; } .uk-position-bottom-left { bottom: 0; left: 0; } .uk-position-bottom-right { bottom: 0; right: 0; } /* * Cover */ .uk-position-cover { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } /* * Relative */ .uk-position-relative { position: relative !important; } /* * Z-index */ .uk-position-z-index { z-index: 1; } /* Display ========================================================================== */ /* * Display * 1. Required if child is a responsive image */ .uk-display-block { display: block !important; } .uk-display-inline { display: inline !important; } .uk-display-inline-block { display: inline-block !important; /* 1 */ max-width: 100%; } /* * Visibility * Avoids setting display to `block` so it works also with `inline-block` and `table` */ /* Desktop and bigger */ @media (min-width: $breakpoint-large) { .uk-visible-small { display: none !important; } .uk-visible-medium { display: none !important; } .uk-hidden-large { display: none !important; } } /* Tablets portrait */ @media (min-width: $breakpoint-medium) and (max-width: $breakpoint-medium-max) { .uk-visible-small { display: none !important; } .uk-visible-large { display: none !important ; } .uk-hidden-medium { display: none !important; } } /* Phone landscape and smaller*/ @media (max-width: $breakpoint-small-max) { .uk-visible-medium { display: none !important; } .uk-visible-large { display: none !important; } .uk-hidden-small { display: none !important; } } /* Remove from the flow and screen readers on any device */ .uk-hidden { display: none !important; visibility: hidden !important; } /* It's hidden, but still affects layout */ .uk-invisible { visibility: hidden !important; } /* Show on hover */ .uk-visible-hover:hover .uk-hidden, .uk-visible-hover:hover .uk-invisible { display: block !important; visibility: visible !important; } .uk-visible-hover-inline:hover .uk-hidden, .uk-visible-hover-inline:hover .uk-invisible { display: inline-block !important; visibility: visible !important; } /* Hide on touch */ .uk-touch .uk-hidden-touch, .uk-notouch .uk-hidden-notouch { display: none !important; } // Hooks // ======================================================================== @include hook-utility-misc(); // @mixin hook-container(){} // @mixin hook-scrollable-box(){} // @mixin hook-utility-misc(){}