https://github.com/sha-red/compass-mixins/tree/master/lib
extended with more sass frameworks and as django app.
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.4 KiB
105 lines
3.4 KiB
// --------------------------------------------------------------------------- |
|
// Media Mixins |
|
|
|
// Create a new layout context for (@content) descendants. |
|
// |
|
// $layout-cols : a (unitless) number of columns to use for this layout. |
|
@mixin layout( |
|
$layout-cols |
|
) { |
|
// store default $total-columns setting for later, then change it. |
|
$default-layout : $total-columns; |
|
$total-columns : $layout-cols !global; |
|
|
|
// apply children in this new layout context. |
|
@content; |
|
|
|
// return to default $total-columns setting. |
|
$total-columns : $default-layout !global; |
|
} |
|
|
|
// Nest a block of code inside a new media-query and layout context. |
|
// |
|
// $media-layout : a list of values [$min $layout $max $ie] including... |
|
// : - one unitless number (columns in a layout) |
|
// : - two optional lengths (min and max-width media-query breakpoints). |
|
// : - one optional boolean or string to trigger fallback support for IE. |
|
// $font-size : [optional] The base font-size of your layout, if you are using ems. |
|
// : - defaults to $base-font-size |
|
@mixin at-breakpoint( |
|
$media-layout, |
|
$font-size: $base-font-size |
|
) { |
|
$media-layout : medialayout($media-layout,$font-size); |
|
$min : nth($media-layout,1); |
|
$layout : nth($media-layout,2); |
|
$max : nth($media-layout,3); |
|
$ie : nth($media-layout,4); |
|
|
|
@if not($breakpoint-media-output) and not($breakpoint-ie-output) and not($breakpoint-raw-output) { |
|
@warn "Either $breakpoint-media-output, $breakpoint-ie-output, or $breakpoint-raw-output must be true for at-breakpoint to work."; |
|
} |
|
|
|
// We need to have either a min-width breakpoint or a layout in order to proceed. |
|
@if $min or $layout or $max { |
|
|
|
// If we don't have a layout, we create one based on the min-width. |
|
@if not($layout) { |
|
$layout: get-layout($min); |
|
} |
|
|
|
// If we still don't have a layout, we have a problem. |
|
@if $layout { |
|
// Set our new layout context. |
|
@include layout($layout) { |
|
@if $breakpoint-media-output { |
|
@include with-browser-ranges(css-mediaqueries) { |
|
@if $min and $max { |
|
// Both $min and $max |
|
@media (min-width: $min) and (max-width: $max) { |
|
@content; |
|
} |
|
} @else { |
|
@if not($min) and not($max) { |
|
// Neither $min nor $max: |
|
// We can create a breakpoint based on the number of columns in the layout. |
|
$min: fix-ems(container-outer-width($width: false)); |
|
} |
|
@if $min { |
|
// Min only: |
|
@media (min-width: $min) { |
|
@content; |
|
} |
|
} @else { |
|
// Max only: |
|
@media (max-width: $max) { |
|
@content; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
// Set an IE fallback |
|
@if $ie and $breakpoint-ie-output { |
|
@if (type-of($ie) == 'bool') { |
|
$ie: 'lt-ie9'; |
|
} |
|
.#{$ie} & { |
|
@content; |
|
} |
|
} |
|
|
|
@if $breakpoint-raw-output { |
|
@content; |
|
} |
|
} |
|
} @else { |
|
@warn "We were unable to determine a layout for your breakpoint."; |
|
} |
|
|
|
} @else { |
|
@warn "You need to provide either a valid layout (number of columns)" |
|
+ "or a valid media-query min-width breakpoint (length)."; |
|
} |
|
|
|
}
|
|
|