| |
| |
| /* Prefix */ |
| |
| $box-sizing-prefix: webkit moz spec; |
| $border-radius-prefix: webkit spec; |
| $box-shadow-radius-prefix: webkit moz spec; |
| $text-shadow-radius-prefix: spec; |
| $text-shadow-prefix: spec; |
| $box-shadow-prefix: all; |
| $linear-gradient-prefix: all; |
| $transition-prefix: webkit moz o spec; |
| $flex-prefix: webkit spec; |
| $browserPrefixes: webkit moz o ms; |
| |
| @mixin prefix($property, $value, $prefixeslist: 'all') { |
| @if $prefixeslist == all { |
| -webkit-#{$property}: $value; |
| -moz-#{$property}: $value; |
| -ms-#{$property}: $value; |
| -o-#{$property}: $value; |
| #{$property}: $value; |
| } @else { |
| @each $prefix in $prefixeslist { |
| @if $prefix == webkit { |
| -webkit-#{$property}: $value; |
| } @else if $prefix == moz { |
| -moz-#{$property}: $value; |
| } @else if $prefix == ms { |
| -ms-#{$property}: $value; |
| } @else if $prefix == o { |
| -o-#{$property}: $value; |
| } @else if $prefix == spec { |
| #{$property}: $value; |
| } @else { |
| @warn "No such prefix: #{$prefix}"; |
| } |
| } |
| } |
| } |
| |
| /* Value Prefix*/ |
| @mixin value-suffix-with-range($property, $valuesuffix, $from, $to, $prefixeslist) { |
| |
| @if $prefixeslist == all { |
| #{property} : -webkit-#{$valuesuffix}($from, $to); |
| #{property} : -moz-#{$valuesuffix}($from, $to); |
| #{property} : -o-#{$valuesuffix}($from, $to); |
| #{property} : -ms-#{$valuesuffix}($from, $to); |
| |
| } @else { |
| @each $prefix in $prefixeslist { |
| @if $prefix == webkit { |
| #{property} : -webkit-#{$valuesuffix}($from, $to); |
| } @else if $prefix == moz { |
| #{property} : -moz-#{$valuesuffix}($from, $to); |
| } @else if $prefix == ms { |
| #{property} : -ms-#{$valuesuffix}($from, $to); |
| } @else if $prefix == o { |
| #{property} : -o-#{$valuesuffix}($from, $to); |
| } @else { |
| @warn "No such prefix: #{$prefix}"; |
| } |
| } |
| } |
| } |
| |
| /* Box sizing */ |
| @mixin box-sizing($value: border-box) { |
| @include prefix(box-sizing, $value, $box-sizing-prefix); |
| } |
| |
| /* Borders & Shadows */ |
| @mixin box-shadow($value) { |
| @include prefix(box-shadow, $value, $box-shadow-radius-prefix); |
| } |
| |
| @mixin text-shadow($value) { |
| @include prefix(text-shadow, $value, $text-shadow-radius-prefix); |
| } |
| |
| @mixin border-radius($value, $positions: all) { |
| @if ($positions == all) { |
| @include prefix(border-radius, $value, $border-radius-prefix); |
| } @else { |
| @each $position in $positions { |
| @include prefix(border-#{$position}-radius, $value, $border-radius-prefix); |
| } |
| } |
| |
| } |
| |
| @mixin transition($value) { |
| @include prefix(transition, $value, $transition-prefix); |
| } |
| |
| /* Opacity */ |
| @mixin opacity($alpha) { |
| $ie-opacity: round($alpha * 100); |
| opacity: $alpha; |
| filter: unquote("alpha(opacity = #{$ie-opacity})"); |
| } |
| |
| /* Ellipsis */ |
| @mixin ellipsis($width: 100%, $display: inline-block, $max-width: none) { |
| overflow: hidden; |
| text-overflow: ellipsis; |
| width: $width; |
| white-space: nowrap; |
| display: $display; |
| max-width: $max-width; |
| } |
| |
| @mixin multiline-ellipsis($lineHeight: 1.3em, $lineCount: 2, $bgColor: $white){ |
| overflow: hidden; |
| position: relative; |
| line-height: $lineHeight; |
| max-height: $lineHeight * $lineCount; |
| text-align: justify; |
| word-break: break-all; |
| // margin-right: -1em; |
| padding-right: 1em; |
| &:before { |
| content: '...'; |
| position: absolute; |
| right: 3px; |
| bottom: 0; |
| } |
| &:after { |
| content: ''; |
| position: absolute; |
| right: 0; |
| width: 1em; |
| height: 1em; |
| margin-top: 0.2em; |
| background: $bgColor; |
| } |
| } |
| |
| @mixin gradient($from, $to) { |
| /* fallback/image non-cover color */ |
| background-color: $from; |
| background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from($from), to($to)); |
| @include value-suffix-with-range(background-color, linear-gradient, $from, $to, $linear-gradient-prefix); |
| } |
| |
| /* Vertical placement of multuple lines of text */ |
| @mixin vertical-text($height) { |
| position: absolute; |
| top: 50%; |
| margin-top: -$height/2; |
| } |
| |
| @mixin text-vertical-align($align: middle) { |
| display: table; |
| width: 100%; |
| |
| & > * { |
| vertical-align: $align; |
| display: table-cell; |
| } |
| } |
| |
| @mixin center-element($width) { |
| width: $width; |
| margin-left: auto; |
| margin-right: auto; |
| } |
| |
| @mixin center-content($width) { |
| & > * { |
| @include center-element($width); |
| } |
| } |
| |
| /* transform-rotate */ |
| // @mixin |
| // Defines a 2D rotation, the angle is specified in the parameter |
| // @param |
| // $deg - angle in degrees |
| @mixin transform-rotate($deg) { |
| transform: rotate($deg + deg); /* IE10 and Mozilla */ |
| -ms-transform: rotate($deg + deg); /* IE 9 */ |
| -webkit-transform: rotate($deg + deg); /* Safari and Chrome */ |
| } |
| |
| /* transform-translate */ |
| // @mixin |
| // Defines a 2D rotation, the angle is specified in the parameter |
| // @param |
| // $deg - angle in degrees |
| @mixin transform-translate($x, $y) { |
| transform: translate($x, $y); /* IE10 and Mozilla */ |
| -ms-transform: translate($x, $y); /* IE 9 */ |
| -webkit-transform: translate($x, $y); /* Safari and Chrome */ |
| } |
| |
| /* transform-scale */ |
| // @mixin |
| // Defines a 2D scale transformation, changing the elements width and height |
| // @param |
| // $width - width |
| // @param |
| // $height - height |
| @mixin transform-scale($width, $height) { |
| transform: scale($width, $height); /* IE10 and Mozilla */ |
| -ms-transform: scale($width, $height); /* IE 9 */ |
| -webkit-transform: scale($width, $height); /* Safari and Chrome */ |
| } |
| |
| @mixin scrollable() { |
| ::-webkit-scrollbar { |
| width: 8px; |
| } |
| } |
| |
| @mixin create-circle($size, $bgcolor) { |
| border-radius: 50%; |
| width: $size; |
| height: $size; |
| background: $bgcolor; |
| border: 3px solid $bgcolor; |
| display: flex; |
| align-items: center; |
| justify-content: center; |
| } |
| |
| /**/ |
| @mixin keyframe-animation($animationType, $properties, $fromValue, $toValue) { |
| |
| @keyframes #{$animationType} { |
| from { |
| $startIndex: 1; |
| @each $property in $properties { |
| #{$property}: nth($fromValue, $startIndex); |
| $startIndex: $startIndex + 1; |
| } |
| } |
| to { |
| $startIndex: 1; |
| @each $property in $properties { |
| #{$property}: nth($toValue, $startIndex); |
| $startIndex: $startIndex + 1; |
| } |
| } |
| } |
| @-moz-keyframes #{$animationType}{ |
| /* Firefox */ |
| from { |
| $startIndex: 1; |
| @each $property in $properties { |
| #{$property}: nth($fromValue, $startIndex); |
| $startIndex: $startIndex + 1; |
| } |
| } |
| to { |
| $startIndex: 1; |
| @each $property in $properties { |
| #{$property}: nth($toValue, $startIndex); |
| $startIndex: $startIndex + 1; |
| } |
| } |
| } |
| @-webkit-keyframes #{$animationType} { |
| /* Safari and Chrome */ |
| from { |
| $startIndex: 1; |
| @each $property in $properties { |
| #{$property}: nth($fromValue, $startIndex); |
| $startIndex: $startIndex + 1; |
| } |
| } |
| to { |
| $startIndex: 1; |
| @each $property in $properties { |
| #{$property}: nth($toValue, $startIndex); |
| $startIndex: $startIndex + 1; |
| } |
| } |
| } |
| @-o-keyframes #{$animationType} { |
| /* Opera */ |
| from { |
| $startIndex: 1; |
| @each $property in $properties { |
| #{$property}: nth($fromValue, $startIndex); |
| $startIndex: $startIndex + 1; |
| } |
| } |
| to { |
| $startIndex: 1; |
| @each $property in $properties { |
| #{$property}: nth($toValue, $startIndex); |
| $startIndex: $startIndex + 1; |
| } |
| } |
| } |
| } |
| |
| |
| /**/ |
| @mixin border-shadow($xShadow: 0.545px, $yShadow: 0.839px, $blur: 4px, $spread: 0, $color: $light-gray, $opacity: 0.2) { |
| @include box-shadow($xShadow $yShadow $blur $spread rgba($color, $opacity)); |
| } |
| |
| /* percent-plus-value */ |
| // @mixin |
| // Calculate length property (e.g. width, margin) by adding a value (e.g. in pixels) |
| // to a percentage of container height/width |
| @mixin percent-plus-value($property, $value, $percent: 100%) { |
| $string: 'calc(' + $percent + ' + ' + $value + ')'; |
| #{$property}: unquote($string); |
| } |