// // Positions // @mixin position($position, $args: ()) { $offsets: top right bottom left; position: $position; @each $offset in $offsets { $index: index($args, $offset); @if $index { @if $index == length($args) { #{$offset}: 0; } @else { $next: nth($args, $index + 1); @if is-valid-length($next) { @include px-to-rem(#{$offset}, $next); } @else if index($offsets, $next) { #{$offset}: 0; } @else { @warn "Invalid value '#{$next}'' for offset '#{$offset}'."; } } } } } @function is-valid-length($value) { @return (type-of($value) == "number" and not unitless($value)) or (index(auto initial inherit 0, $value) != false); } @mixin absolute($args: ()) { @include position(absolute, $args); } @mixin fixed($args: ()) { @include position(fixed, $args); } @mixin relative($args: ()) { @include position(relative, $args); }