-
-
Save ajmalafif/7846657 to your computer and use it in GitHub Desktop.
Generated by SassMeister.com, the Sass playground.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ---- | |
// Sass (v3.3.0.rc.1) | |
// Compass (v0.13.alpha.10) | |
// ---- | |
// To enable support for browsers that do not support @media queries, | |
// (IE <= 8, Firefox <= 3, Opera <= 9) set $mq-responsive to false | |
// Create a separate stylesheet served exclusively to these browsers, | |
// meaning @media queries will be rasterized, relying on the cascade itself | |
$mq-responsive: true !default; | |
// Name your breakpoints in a way that creates a ubiquitous language | |
// across team members. It will improve communication between | |
// stakeholders, designers, developers, and testers. | |
$mq-breakpoints: ( | |
(mobile 300px) | |
(tablet 600px) | |
(desktop 900px) | |
(wide 1260px) | |
) !default; | |
// Define the breakpoint from the $mq-breakpoints list that should | |
// be used as the target width when outputting a static stylesheet | |
// (i.e. when $mq-responsive is set to 'false'). | |
$mq-static-breakpoint: "desktop" !default; | |
@function mq-px2em($px, $base-font-size: 16px) { | |
@if (unitless($px)) { | |
@warn "Assuming #{$px} to be in pixels, attempting to convert it into pixels for you"; | |
@return mq-px2em($px + 0px); // That may fail. | |
} @else if (unit($px) == em) { | |
@return $px; | |
} | |
@return ($px / $base-font-size) * 1em; | |
} | |
@function mq-retrieve-breakpoint-width($name) { | |
@each $breakpoint in $mq-breakpoints { | |
$breakpoint-name: nth($breakpoint, 1); | |
$breakpoint-width: nth($breakpoint, 2); | |
@if $name == $breakpoint-name { | |
@return $breakpoint-width; | |
} | |
} | |
@return 'Breakpoint #{$name} does not exist'; | |
} | |
// Media Query mixin | |
// Usage: | |
// .element { | |
// @include mq($from: mobile) { | |
// color: red; | |
// } | |
// @include mq($to: tablet) { | |
// color: blue; | |
// } | |
// @include mq(mobile, tablet) { | |
// color: green; | |
// } | |
// @include mq($from: tablet, $and: '(orientation: landscape)') { | |
// color: teal; | |
// } | |
// @include mq(950px) { | |
// color: hotpink; | |
// } | |
// } | |
@mixin mq($from: false, $to: false, $and: false) { | |
// Initialize variables | |
$min-width: 0; | |
$max-width: 0; | |
$mediaQuery: ''; | |
// From: this breakpoint (inclusive) | |
@if $from { | |
@if type-of($from) == number { | |
$min-width: mq-px2em($from); | |
} @else { | |
$min-width: mq-px2em(mq-retrieve-breakpoint-width($from)); | |
} | |
} | |
// To: that breakpoint (exclusive) | |
@if $to { | |
@if type-of($to) == number { | |
$max-width: mq-px2em($to); | |
} @else { | |
$max-width: mq-px2em(mq-retrieve-breakpoint-width($to) - 1px); | |
} | |
} | |
// Responsive support is disabled, rasterize the output outside @media blocks | |
// The browser will rely on the cascade itself. | |
@if ($mq-responsive == false) { | |
$static-breakpoint-width: mq-retrieve-breakpoint-width($mq-static-breakpoint); | |
@if type-of($static-breakpoint-width) == number { | |
$target-width: mq-px2em($static-breakpoint-width); | |
// Output only rules that start at or span our target width | |
@if ($and == false and ($min-width <= $target-width) and (($to == false) or ($max-width >= $target-width))) { | |
@content; | |
} | |
} @else { | |
// Throw a warning if $mq-static-breakpoint is not in the $mq-breakpoints list | |
@warn "No static styles will be output: #{$static-breakpoint-width}"; | |
} | |
} | |
// Responsive support is enabled, output rules inside @media queries | |
@else { | |
@if $min-width != 0 { $mediaQuery: '#{$mediaQuery} and (min-width: #{$min-width})'; } | |
@if $max-width != 0 { $mediaQuery: '#{$mediaQuery} and (max-width: #{$max-width})'; } | |
@if $and { $mediaQuery: '#{$mediaQuery} and #{$and}'; } | |
$mediaQuery: unquote(#{$mediaQuery}); | |
@media all #{$mediaQuery} { | |
@content; | |
} | |
} | |
} | |
// Add a breakpoint | |
// Usage: $mq-breakpoints: mq-add-breakpoint(tvscreen, 1920px); | |
// Credit goes to Sam Richard (author of the `respond-to()` mixin) | |
@function mq-add-breakpoint($name, $breakpoint) { | |
$breakpoint: $name $breakpoint; | |
$output: append($mq-breakpoints, $breakpoint, 'space'); | |
@return $output; | |
} | |
/** | |
* Tests | |
* (scroll down to edit the tests) | |
*/ | |
.element { | |
// Apply styling to devices at least as wide as a mobile | |
@include mq($from: mobile) { | |
color: green; | |
} | |
// Apply styling to devices at least as wide as a tablet | |
@include mq($from: tablet) { | |
color: blue; | |
} | |
// Apply styling to devices smaller than a "desktop" | |
@include mq($to: desktop) { | |
color: red; | |
} | |
} | |
/** | |
* For older browsers that don't support @media queries | |
* (in our case: IE8) | |
*/ | |
$mq-responsive: false; | |
$mq-static-breakpoint: desktop; | |
.element { | |
@include mq($from: mobile) { | |
color: green; | |
} | |
@include mq($from: tablet) { | |
color: blue; | |
} | |
@include mq($to: desktop) { | |
color: red; // Not wide enough: won't be in the output | |
} | |
@include mq(wide) { | |
color: crimson; // Too wide: won't be in the output | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Tests | |
* (scroll down to edit the tests) | |
*/ | |
@media all and (min-width: 18.75em) { | |
.element { | |
color: green; | |
} | |
} | |
@media all and (min-width: 37.5em) { | |
.element { | |
color: blue; | |
} | |
} | |
@media all and (max-width: 56.1875em) { | |
.element { | |
color: red; | |
} | |
} | |
/** | |
* For older browsers that don't support @media queries | |
* (in our case: IE8) | |
*/ | |
.element { | |
color: green; | |
color: blue; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment