mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-26 20:56:48 +00:00
It looks ike these CSS rules are actually being re-imported multiple times, which is bloating the output.
188 lines
6.4 KiB
SCSS
188 lines
6.4 KiB
SCSS
// The the user threshold for transition support. Defaults to `$graceful-usage-threshold`
|
|
$transition-support-threshold: $graceful-usage-threshold !default;
|
|
|
|
// CSS Transitions
|
|
// Currently only works in Webkit.
|
|
//
|
|
// * expected in CSS3, FireFox 3.6/7 and Opera Presto 2.3
|
|
// * We'll be prepared.
|
|
//
|
|
// Including this submodule sets following defaults for the mixins:
|
|
//
|
|
// $default-transition-property : all
|
|
// $default-transition-duration : 1s
|
|
// $default-transition-function : false
|
|
// $default-transition-delay : false
|
|
//
|
|
// Override them if you like. Timing-function and delay are set to false for browser defaults (ease, 0s).
|
|
|
|
$default-transition-property: all !default;
|
|
|
|
$default-transition-duration: 1s !default;
|
|
|
|
$default-transition-function: null !default;
|
|
|
|
$default-transition-delay: null !default;
|
|
|
|
$transitionable-prefixed-values: transform, transform-origin !default;
|
|
|
|
|
|
|
|
// Checks if the value given is a unit of time.
|
|
@function is-time($value) {
|
|
@return if(type-of($value) == number, not not index(s ms, unit($value)), false);
|
|
}
|
|
|
|
// Returns `$property` with the given prefix if it is found in `$transitionable-prefixed-values`.
|
|
@function prefixed-for-transition($prefix, $property) {
|
|
@if not $prefix {
|
|
@return $property;
|
|
}
|
|
@if type-of($property) == list or type-of($property) == arglist {
|
|
$new-list: comma-list();
|
|
@each $v in $property {
|
|
$new-list: append($new-list, prefixed-for-transition($prefix, $v));
|
|
}
|
|
@return $new-list;
|
|
} @else {
|
|
@if index($transitionable-prefixed-values, $property) {
|
|
@return #{$prefix}-#{$property};
|
|
} @else {
|
|
@return $property;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Returns $transition-map which includes key and values that map to a transition declaration
|
|
@function transition-map($transition) {
|
|
$transition-map: ();
|
|
|
|
@each $item in $transition {
|
|
@if is-time($item) {
|
|
@if map-has-key($transition-map, duration) {
|
|
$transition-map: map-merge($transition-map, (delay: $item));
|
|
} @else {
|
|
$transition-map: map-merge($transition-map, (duration: $item));
|
|
}
|
|
} @else if map-has-key($transition-map, property) {
|
|
$transition-map: map-merge($transition-map, (timing-function: $item));
|
|
} @else {
|
|
$transition-map: map-merge($transition-map, (property: $item));
|
|
}
|
|
}
|
|
|
|
@return $transition-map;
|
|
}
|
|
|
|
// One or more properties to transition
|
|
//
|
|
// * for multiple, use a comma-delimited list
|
|
// * also accepts "all" or "none"
|
|
|
|
@mixin transition-property($properties...) {
|
|
$properties: set-arglist-default($properties, $default-transition-property);
|
|
@include with-each-prefix(css-transitions, $transition-support-threshold) {
|
|
$props: if($current-prefix, prefixed-for-transition($current-prefix, $properties), $properties);
|
|
@include prefix-prop(transition-property, $props);
|
|
}
|
|
}
|
|
|
|
// One or more durations in seconds
|
|
//
|
|
// * for multiple, use a comma-delimited list
|
|
// * these durations will affect the properties in the same list position
|
|
|
|
@mixin transition-duration($durations...) {
|
|
$durations: set-arglist-default($durations, $default-transition-duration);
|
|
@include prefixed-properties(css-transitions, $transition-support-threshold, (
|
|
transition-duration: $durations
|
|
));
|
|
}
|
|
|
|
// One or more timing functions
|
|
//
|
|
// * [ ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(x1, y1, x2, y2)]
|
|
// * For multiple, use a comma-delimited list
|
|
// * These functions will effect the properties in the same list position
|
|
|
|
@mixin transition-timing-function($functions...) {
|
|
$functions: set-arglist-default($functions, $default-transition-function);
|
|
@include prefixed-properties(css-transitions, $transition-support-threshold, (
|
|
transition-timing-function: $functions
|
|
));
|
|
}
|
|
|
|
// One or more transition-delays in seconds
|
|
//
|
|
// * for multiple, use a comma-delimited list
|
|
// * these delays will effect the properties in the same list position
|
|
|
|
@mixin transition-delay($delays...) {
|
|
$delays: set-arglist-default($delays, $default-transition-delay);
|
|
@include prefixed-properties(css-transitions, $transition-support-threshold, (
|
|
transition-delay: $delays
|
|
));
|
|
}
|
|
|
|
// Transition all-in-one shorthand
|
|
|
|
@mixin single-transition(
|
|
$property: $default-transition-property,
|
|
$duration: $default-transition-duration,
|
|
$function: $default-transition-function,
|
|
$delay: $default-transition-delay
|
|
) {
|
|
@include transition(compact($property $duration $function $delay));
|
|
}
|
|
|
|
@mixin transition($transitions...) {
|
|
$default: (compact($default-transition-property $default-transition-duration $default-transition-function $default-transition-delay),);
|
|
$transitions: if(length($transitions) == 1 and type-of(nth($transitions, 1)) == list and list-separator(nth($transitions, 1)) == comma, nth($transitions, 1), $transitions);
|
|
$transitions: set-arglist-default($transitions, $default);
|
|
|
|
|
|
@include with-each-prefix(css-transitions, $transition-support-threshold) {
|
|
$delays: comma-list();
|
|
$transitions-without-delays: comma-list();
|
|
$transitions-with-delays: comma-list();
|
|
$has-delays: false;
|
|
|
|
|
|
// This block can be made considerably simpler at the point in time that
|
|
// we no longer need to deal with the differences in how delays are treated.
|
|
@each $transition in $transitions {
|
|
// Declare initial values for transition
|
|
$transition: transition-map($transition);
|
|
|
|
$property: map-get($transition, property);
|
|
$duration: map-get($transition, duration);
|
|
$timing-function: map-get($transition, timing-function);
|
|
$delay: map-get($transition, delay);
|
|
|
|
// Parse transition string to assign values into correct variables
|
|
$has-delays: $has-delays or $delay;
|
|
|
|
@if $current-prefix == -webkit {
|
|
// Keep a list of delays in case one is specified
|
|
$delays: append($delays, if($delay, $delay, 0s));
|
|
$transitions-without-delays: append($transitions-without-delays,
|
|
prefixed-for-transition($current-prefix, $property) $duration $timing-function);
|
|
} @else {
|
|
$transitions-with-delays: append($transitions-with-delays,
|
|
prefixed-for-transition($current-prefix, $property) $duration $timing-function $delay);
|
|
}
|
|
}
|
|
|
|
@if $current-prefix == -webkit {
|
|
@include prefix-prop(transition, $transitions-without-delays);
|
|
@if $has-delays {
|
|
@include prefix-prop(transition-delay, $delays);
|
|
}
|
|
} @else if $current-prefix {
|
|
@include prefix-prop(transition, $transitions-with-delays);
|
|
} @else {
|
|
transition: $transitions-with-delays;
|
|
}
|
|
}
|
|
}
|