| ////////////////////////////// |
| // Converts the input value to Base EMs |
| ////////////////////////////// |
| @function breakpoint-to-base-em($value) { |
| $value-unit: unit($value); |
| |
| // Will convert relative EMs into root EMs. |
| @if breakpoint-get('base font size') and type-of(breakpoint-get('base font size')) == 'number' and $value-unit == 'em' { |
| $base-unit: unit(breakpoint-get('base font size')); |
| |
| @if $base-unit == 'px' or $base-unit == '%' or $base-unit == 'em' or $base-unit == 'pt' { |
| @return base-conversion($value) / base-conversion(breakpoint-get('base font size')) * 1em; |
| } |
| @else { |
| @warn '#{breakpoint-get(\'base font size\')} is not set in valid units for font size!'; |
| @return false; |
| } |
| } |
| @else { |
| @return base-conversion($value); |
| } |
| } |
| |
| @function base-conversion($value) { |
| $unit: unit($value); |
| |
| @if $unit == 'px' { |
| @return $value / 16px * 1em; |
| } |
| @else if $unit == '%' { |
| @return $value / 100% * 1em; |
| } |
| @else if $unit == 'em' { |
| @return $value; |
| } |
| @else if $unit == 'pt' { |
| @return $value / 12pt * 1em; |
| } |
| @else { |
| @return $value; |
| // @warn 'Everything is terrible! What have you done?!'; |
| } |
| } |
| |
| ////////////////////////////// |
| // Returns whether the feature can have a min/max pair |
| ////////////////////////////// |
| $breakpoint-min-max-features: 'color', |
| 'color-index', |
| 'aspect-ratio', |
| 'device-aspect-ratio', |
| 'device-height', |
| 'device-width', |
| 'height', |
| 'monochrome', |
| 'resolution', |
| 'width'; |
| |
| @function breakpoint-min-max($feature) { |
| @each $item in $breakpoint-min-max-features { |
| @if $feature == $item { |
| @return true; |
| } |
| } |
| @return false; |
| } |
| |
| ////////////////////////////// |
| // Returns whether the feature can have a string value |
| ////////////////////////////// |
| $breakpoint-string-features: 'orientation', |
| 'scan', |
| 'color', |
| 'aspect-ratio', |
| 'device-aspect-ratio', |
| 'pointer', |
| 'luminosity'; |
| |
| @function breakpoint-string-value($feature) { |
| @each $item in $breakpoint-string-features { |
| @if breakpoint-min-max($item) { |
| @if $feature == 'min-#{$item}' or $feature == 'max-#{$item}' { |
| @return true; |
| } |
| } |
| @else if $feature == $item { |
| @return true; |
| } |
| } |
| @return false; |
| } |
| |
| ////////////////////////////// |
| // Returns whether the feature is a media type |
| ////////////////////////////// |
| $breakpoint-media-types: 'all', |
| 'braille', |
| 'embossed', |
| 'handheld', |
| 'print', |
| 'projection', |
| 'screen', |
| 'speech', |
| 'tty', |
| 'tv'; |
| |
| @function breakpoint-is-media($feature) { |
| @each $media in $breakpoint-media-types { |
| @if ($feature == $media) or ($feature == 'not #{$media}') or ($feature == 'only #{$media}') { |
| @return true; |
| } |
| } |
| |
| @return false; |
| } |
| |
| ////////////////////////////// |
| // Returns whether the feature can stand alone |
| ////////////////////////////// |
| $breakpoint-single-string-features: 'color', |
| 'color-index', |
| 'grid', |
| 'monochrome'; |
| |
| @function breakpoint-single-string($feature) { |
| @each $item in $breakpoint-single-string-features { |
| @if $feature == $item { |
| @return true; |
| } |
| } |
| @return false; |
| } |
| |
| ////////////////////////////// |
| // Returns whether the feature |
| ////////////////////////////// |
| @function breakpoint-is-resolution($feature) { |
| $resolutions: 'device-pixel-ratio', 'dpr'; |
| |
| @if breakpoint-get('transform resolutions') { |
| $resolutions: append($resolutions, 'resolution'); |
| } |
| |
| @each $reso in $resolutions { |
| @if index($feature, $reso) or index($feature, 'min-#{$reso}') or index($feature, 'max-#{$reso}') { |
| @return true; |
| } |
| } |
| |
| @return false; |
| } |