//
// Mixins
// --------------------------------------------------
// General
// --------------------------------------------------
// Utilities
// -------------------------
$z-layers: (
"default": 1,
"below": -1,
"max": 10000,
"bar": (
"bar": 10,
"btn": 20,
"icon": 20
),
"backdrop": 998,
"modal": 999,
"popover":(
"popover": 999,
"arrow": 1000,
),
"scroll": (
"scrollbar": 9998,
),
"toast": 9999,
);
@function map-has-nested-keys($map, $keys...) {
@each $key in $keys {
@if not map-has-key($map, $key) {
@return false;
}
$map: map-get($map, $key);
}
@return true;
}
@function map-deep-get($map, $keys...) {
@each $key in $keys {
$map: map-get($map, $key);
}
@return $map;
}
@function z($layers...) {
@if not map-has-nested-keys($z-layers, $layers...) {
@warn "No layer found for `#{inspect($layers...)}` in $z-layers map. Property omitted.";
}
@return map-deep-get($z-layers, $layers...);
}
// Clearfix
// Source: http://nicolasgallagher.com/micro-clearfix-hack/
//
// For modern browsers
// 1. The space content is one way to avoid an Opera bug when the
// contenteditable attribute is included anywhere else in the document.
// Otherwise it causes space to appear at the top and bottom of elements
// that are clearfixed.
// 2. The use of `table` rather than `block` is only necessary if using
// `:before` to contain the top-margins of child elements.
@mixin clearfix() {
&:before,
&:after {
display: table; // 2
content: " "; // 1
}
&:after {
clear: both;
}
}
// Box shadow
@mixin box-shadow($shadow...) {
-webkit-box-shadow: $shadow;
box-shadow: $shadow;
}
// Gradients
@mixin linear-gradient($color-from, $color-to) {
background-color: $color-from; // Old browsers
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,$color-from), color-stop(100%,$color-to)); // Chrome, Safari4+
background-image: -webkit-linear-gradient(top, $color-from 0%, $color-to 100%); // Chrome10+, Safari5.1+
// background-image: -moz-linear-gradient(top, $color-from 0%, $color-to 100%); // FF3.6+
// background-image: -ms-linear-gradient(top, $color-from 0%, $color-to 100%); // IE10+
//background-image: -o-linear-gradient(top, $color-from 0%, $color-to 100%); // Opera 11.10+
background-image: linear-gradient(to bottom, $color-from 0%, $color-to 100%); // W3C
// filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{$color-from}', endColorstr='#{$color-to}', GradientType=0 ); // IE6-9
}
@mixin directional-gradient($color-from, $color-to, $deg: 45deg) {
background-color: $color-from; // Old browsers
background-image: -webkit-gradient(linear, left bottom, right top, color-stop(0%,$color-from), color-stop(100%,$color-to)); // Chrome, Safari4+
background-image: -webkit-linear-gradient(45deg, $color-from 0%, $color-to 100%); // Chrome10+, Safari5.1+
// background-image: -moz-linear-gradient(45deg, $color-from 0%, $color-to 100%); // FF3.6+
// background-image: -ms-linear-gradient(45deg, $color-from 0%, $color-to 100%); // IE10+
//background-image: -o-linear-gradient(45deg, $color-from 0%, $color-to 100%); // Opera 11.10+
background-image: linear-gradient(45deg, $color-from 0%, $color-to 100%); // W3C
// filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{$color-from}', endColorstr='#{$color-to}', GradientType=1 ); // IE6-9
}
// Transforms
// --------------------------------------------------
@mixin transform($transform...) {
-webkit-transform: $transform;
// -ms-transform: $transform;
transform: $transform;
}
// Transitions
// --------------------------------------------------
@mixin transition($transition...) {
-webkit-transition: $transition;
// -moz-transition: $transition;
transition: $transition;
}
@mixin transition-property($property...) {
-webkit-transition-property: $property;
// -moz-transition-property: $property;
transition-property: $property;
}
@mixin transition-duration($duration...) {
-webkit-transition-duration: $duration;
// -moz-transition-duration: $duration;
transition-duration: $duration;
}
@mixin transition-timing-function($function...) {
-webkit-transition-timing-function: $function;
// -moz-transition-timing-function: $function;
transition-timing-function: $function;
}
// Animations
// --------------------------------------------------
@mixin animation-name($name) {
-webkit-animation-name: $name;
// -moz-animation-name: $name;
animation-name: $name;
}
@mixin animation-duration($duration) {
-webkit-animation-duration: $duration;
// -moz-animation-duration: $duration;
animation-duration: $duration;
}
@mixin animation-direction($direction) {
-webkit-animation-direction: $direction;
// -moz-animation-direction: $direction;
animation-direction: $direction;
}
// Misc
// --------------------------------------------------
@mixin hairline($type, $color, $offset) {
&:after{
position: absolute;
left: $offset;
right: 0;
bottom: 0;
height: 1px;
background-color: $color;
content:'';
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
@if $type == double {
&:before{
position: absolute;
left: $offset;
right: 0;
top: 0;
height: 1px;
background-color: $color;
content:'';
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
}
// background: repeat-x bottom left
// url(data:image/gif;base64,R0lGODlhAQACAPABAMjHzP///yH/C1hNUCBEYXRhWE1QAz94cAAh+QQFAAABACwAAAAAAQACAAACAgwKADs=);
// background-size: 100% 1px;
//@if $type == single {
// background-image: url("data:image/svg+xml;utf8,");
// background-position: $offset 100%;
//
//} @else if $type == double {
// background-image: url("data:image/svg+xml;utf8,"),
// url("data:image/svg+xml;utf8,");
// background-position: $offset 100%, $offset 0;
//}
//background-repeat: no-repeat;
}
//button
@mixin btn($color){
color: #fff;
background-color: $color;
border: 1px solid $color;
&:enabled:active,
&.#{$namespace}active:enabled {
color: #fff;
background-color: darken($color, 10%);
border: 1px solid darken($color, 10%);
}
}