Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/curttimson/hugo-theme-massively.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'assets/scss/libs/_breakpoints.scss')
-rw-r--r--assets/scss/libs/_breakpoints.scss223
1 files changed, 223 insertions, 0 deletions
diff --git a/assets/scss/libs/_breakpoints.scss b/assets/scss/libs/_breakpoints.scss
new file mode 100644
index 0000000..c5301d8
--- /dev/null
+++ b/assets/scss/libs/_breakpoints.scss
@@ -0,0 +1,223 @@
+// 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;
+ }
+
+ } \ No newline at end of file