Blame | Last modification | View Log | Download
// breakpoints.scss v1.0 | @ajlkn | MIT licensed */// Vars./// Breakpoints./// @var {list}$breakpoints: () !global;// Mixins./// Sets breakpoints./// @param {map} $x Breakpoints.@mixin breakpoints($x: ()) {$breakpoints: $x !global;}/// Wraps @content in a @media block targeting a specific orientation./// @param {string} $orientation Orientation.@mixin orientation($orientation) {@media screen and (orientation: #{$orientation}) {@content;}}/// Wraps @content in a @media block using a given query./// @param {string} $query Query.@mixin breakpoint($query: null) {$breakpoint: null;$op: null;$media: null;// Determine operator, breakpoint.// Greater than or equal.@if (str-slice($query, 0, 2) == '>=') {$op: 'gte';$breakpoint: str-slice($query, 3);}// Less than or equal.@elseif (str-slice($query, 0, 2) == '<=') {$op: 'lte';$breakpoint: str-slice($query, 3);}// Greater than.@elseif (str-slice($query, 0, 1) == '>') {$op: 'gt';$breakpoint: str-slice($query, 2);}// Less than.@elseif (str-slice($query, 0, 1) == '<') {$op: 'lt';$breakpoint: str-slice($query, 2);}// Not.@elseif (str-slice($query, 0, 1) == '!') {$op: 'not';$breakpoint: str-slice($query, 2);}// Equal.@else {$op: 'eq';$breakpoint: $query;}// Build media.@if ($breakpoint and map-has-key($breakpoints, $breakpoint)) {$a: map-get($breakpoints, $breakpoint);// Range.@if (type-of($a) == 'list') {$x: nth($a, 1);$y: nth($a, 2);// Max only.@if ($x == null) {// Greater than or equal (>= 0 / anything)@if ($op == 'gte') {$media: 'screen';}// Less than or equal (<= y)@elseif ($op == 'lte') {$media: 'screen and (max-width: ' + $y + ')';}// Greater than (> y)@elseif ($op == 'gt') {$media: 'screen and (min-width: ' + ($y + 1) + ')';}// Less than (< 0 / invalid)@elseif ($op == 'lt') {$media: 'screen and (max-width: -1px)';}// Not (> y)@elseif ($op == 'not') {$media: 'screen and (min-width: ' + ($y + 1) + ')';}// Equal (<= y)@else {$media: 'screen and (max-width: ' + $y + ')';}}// Min only.@else if ($y == null) {// Greater than or equal (>= x)@if ($op == 'gte') {$media: 'screen and (min-width: ' + $x + ')';}// Less than or equal (<= inf / anything)@elseif ($op == 'lte') {$media: 'screen';}// Greater than (> inf / invalid)@elseif ($op == 'gt') {$media: 'screen and (max-width: -1px)';}// Less than (< x)@elseif ($op == 'lt') {$media: 'screen and (max-width: ' + ($x - 1) + ')';}// Not (< x)@elseif ($op == 'not') {$media: 'screen and (max-width: ' + ($x - 1) + ')';}// Equal (>= x)@else {$media: 'screen and (min-width: ' + $x + ')';}}// Min and max.@else {// Greater than or equal (>= x)@if ($op == 'gte') {$media: 'screen and (min-width: ' + $x + ')';}// Less than or equal (<= y)@elseif ($op == 'lte') {$media: 'screen and (max-width: ' + $y + ')';}// Greater than (> y)@elseif ($op == 'gt') {$media: 'screen and (min-width: ' + ($y + 1) + ')';}// Less than (< x)@elseif ($op == 'lt') {$media: 'screen and (max-width: ' + ($x - 1) + ')';}// Not (< x and > y)@elseif ($op == 'not') {$media: 'screen and (max-width: ' + ($x - 1) + '), screen and (min-width: ' + ($y + 1) + ')';}// Equal (>= x and <= y)@else {$media: 'screen and (min-width: ' + $x + ') and (max-width: ' + $y + ')';}}}// String.@else {// Missing a media type? Prefix with "screen".@if (str-slice($a, 0, 1) == '(') {$media: 'screen and ' + $a;}// Otherwise, use as-is.@else {$media: $a;}}}// Output.@media #{$media} {@content;}}