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.
		
		
		
		
		
			
		
			
				
					
					
						
							598 lines
						
					
					
						
							18 KiB
						
					
					
				
			
		
		
	
	
							598 lines
						
					
					
						
							18 KiB
						
					
					
				| @import "shared"; | |
|  | |
| // @doc off | |
| // Note ---------------------------------------------------------------------- | |
| // Safari, Chrome, and Firefox all support 3D transforms. However, | |
| // only in the most recent builds. You should also provide fallback 2d support for | |
| // Opera and IE. IE10 is slated to have 3d enabled, but is currently unreleased. | |
| // To make that easy, all 2D transforms include an browser-targeting toggle ($only3d) | |
| // to switch between the two support lists. The toggle defaults to 'false' (2D), | |
| // and also accepts 'true' (3D). Currently the lists are as follows: | |
| // 2D: Mozilla, Webkit, Opera, Official | |
| // 3D: Webkit, Firefox. | |
|  | |
| // Available Transforms ------------------------------------------------------ | |
| // - Scale (2d and 3d) | |
| // - Rotate (2d and 3d) | |
| // - Translate (2d and 3d) | |
| // - Skew (2d only) | |
|  | |
| // Transform Parameters ------------------------------------------------------ | |
| // - Transform Origin (2d and 3d) | |
| // - Perspective (3d) | |
| // - Perspective Origin (3d) | |
| // - Transform Style (3d) | |
| // - Backface Visibility (3d) | |
|  | |
| // Mixins -------------------------------------------------------------------- | |
| // transform-origin | |
| //  - shortcuts:  transform-origin2d, transform-origin3d | |
| //  - helpers:    apply-origin | |
| // transform | |
| //  - shortcuts:  transform2d, transform3d | |
| //  - helpers:    simple-transform, create-transform | |
| // perspective | |
| //  - helpers:    perspective-origin | |
| // transform-style | |
| // backface-visibility | |
| // scale | |
| //  - shortcuts:  scaleX, scaleY, scaleZ, scale3d | |
| // rotate | |
| //  - shortcuts:  rotateX, rotateY, rotate3d | |
| // translate | |
| //  - shortcuts:  translateX, translateY, translateZ, translate3d | |
| // skew | |
| //  - shortcuts:  skewX, skewY | |
|  | |
| // Defaults ------------------------------------------------------------------ | |
| // @doc on | |
|  | |
| // The default x-origin for transforms | |
| $default-origin-x    : 50%                   !default; | |
| // The default y-origin for transforms | |
| $default-origin-y    : 50%                   !default; | |
| // The default z-origin for transforms | |
| $default-origin-z    : 50%                   !default; | |
|  | |
|  | |
| // The default x-multiplier for scaling | |
| $default-scale-x     : 1.25                  !default; | |
| // The default y-multiplier for scaling | |
| $default-scale-y     : $default-scale-x      !default; | |
| // The default z-multiplier for scaling | |
| $default-scale-z     : $default-scale-x      !default; | |
|  | |
|  | |
| // The default angle for rotations | |
| $default-rotate      : 45deg                 !default; | |
|  | |
|  | |
| // The default x-vector for the axis of 3d rotations | |
| $default-vector-x    : 1                     !default; | |
| // The default y-vector for the axis of 3d rotations | |
| $default-vector-y    : 1                     !default; | |
| // The default z-vector for the axis of 3d rotations | |
| $default-vector-z    : 1                     !default; | |
|  | |
|  | |
| // The default x-length for translations | |
| $default-translate-x : 1em                   !default; | |
| // The default y-length for translations | |
| $default-translate-y : $default-translate-x  !default; | |
| // The default z-length for translations | |
| $default-translate-z : $default-translate-x  !default; | |
|  | |
|  | |
| // The default x-angle for skewing | |
| $default-skew-x      : 5deg                  !default; | |
| // The default y-angle for skewing | |
| $default-skew-y      : 5deg                  !default; | |
|  | |
|  | |
| // **Transform-origin** | |
| // Transform-origin sent as a complete string | |
| // | |
| //     @include apply-origin( origin [, 3D-only ] ) | |
| // | |
| // where 'origin' is a space separated list containing 1-3 (x/y/z) coordinates | |
| // in percentages, absolute (px, cm, in, em etc..) or relative | |
| // (left, top, right, bottom, center) units | |
| // | |
| // @param only3d Set this to true to only apply this | |
| // mixin where browsers have 3D support. | |
| @mixin apply-origin($origin, $only3d) { | |
|   $only3d: $only3d or -compass-list-size(-compass-list($origin)) > 2; | |
|   @if $only3d { | |
|     @include experimental(transform-origin, $origin, | |
|       -moz, -webkit, -o, -ms, not -khtml, official | |
|     ); | |
|   } @else { | |
|     @include experimental(transform-origin, $origin, | |
|       -moz, -webkit, -o, -ms, not -khtml, official | |
|     ); | |
|   } | |
| } | |
|  | |
| // Transform-origin sent as individual arguments: | |
| // | |
| //     @include transform-origin( [ origin-x, origin-y, origin-z, 3D-only ] ) | |
| // | |
| // where the 3 'origin-' arguments represent x/y/z coordinates. | |
| // | |
| // **NOTE:** setting z coordinates triggers 3D support list, leave false for 2D support | |
| @mixin transform-origin( | |
|   $origin-x: $default-origin-x, | |
|   $origin-y: $default-origin-y, | |
|   $origin-z: false, | |
|   $only3d:   if($origin-z, true, false) | |
| ) { | |
|   $origin: unquote(''); | |
|   @if $origin-x or $origin-y or $origin-z { | |
|     @if $origin-x { $origin: $origin-x; } @else { $origin: 50%; } | |
|     @if $origin-y { $origin: $origin $origin-y; } @else { @if $origin-z { $origin: $origin 50%; }} | |
|     @if $origin-z { $origin: $origin $origin-z; } | |
|     @include apply-origin($origin, $only3d); | |
|   } | |
| } | |
|  | |
|  | |
| // Transform sent as a complete string: | |
| // | |
| //     @include transform( transforms [, 3D-only ] ) | |
| // | |
| // where 'transforms' is a space separated list of all the transforms to be applied. | |
| @mixin transform( | |
|   $transform, | |
|   $only3d: false | |
| ) { | |
|   @if $only3d { | |
|     @include experimental(transform, $transform, | |
|       -moz, -webkit, -o, -ms, not -khtml, official | |
|     ); | |
|   } @else { | |
|     @include experimental(transform, $transform, | |
|       -moz, -webkit, -o, -ms, not -khtml, official | |
|     ); | |
|   } | |
| } | |
|  | |
| // Shortcut to target all browsers with 2D transform support | |
| @mixin transform2d($trans) { | |
|   @include transform($trans, false); | |
| } | |
|  | |
| // Shortcut to target only browsers with 3D transform support | |
| @mixin transform3d($trans) { | |
|   @include transform($trans, true); | |
| } | |
|  | |
| // @doc off | |
| // 3D Parameters ------------------------------------------------------------- | |
| // @doc on | |
|  | |
| // Set the perspective of 3D transforms on the children of an element: | |
| // | |
| //      @include perspective( perspective ) | |
| // | |
| // where 'perspective' is a unitless number representing the depth of the | |
| // z-axis. The higher the perspective, the more exaggerated the foreshortening. | |
| // values from 500 to 1000 are more-or-less "normal" - a good starting-point. | |
| @mixin perspective($p) { | |
|   @include experimental(perspective, $p, | |
|     -moz, -webkit, -o, -ms, not -khtml, official | |
|   ); | |
| } | |
|  | |
| // Set the origin position for the perspective | |
| // | |
| //      @include perspective-origin(origin-x [origin-y]) | |
| // | |
| // where the two arguments represent x/y coordinates | |
| @mixin perspective-origin($origin: 50%) { | |
|   @include experimental(perspective-origin, $origin, | |
|     -moz, -webkit, -o, -ms, not -khtml, official | |
|   ); | |
| } | |
|  | |
| // Determine whether a 3D objects children also live in the given 3D space | |
| // | |
| //      @include transform-style( [ style ] ) | |
| // | |
| // where `style` can be either `flat` or `preserve-3d`. | |
| // Browsers default to `flat`, mixin defaults to `preserve-3d`. | |
| @mixin transform-style($style: preserve-3d) { | |
|   @include experimental(transform-style, $style, | |
|     -moz, -webkit, -o, -ms, not -khtml, official | |
|   ); | |
| } | |
|  | |
| // Determine the visibility of an element when it's back is turned | |
| // | |
| //     @include backface-visibility( [ visibility ] ) | |
| // | |
| // where `visibility` can be either `visible` or `hidden`. | |
| // Browsers default to visible, mixin defaults to hidden | |
| @mixin backface-visibility($visibility: hidden) { | |
|   @include experimental(backface-visibility, $visibility, | |
|     -moz, -webkit, -o, -ms, not -khtml, official | |
|   ); | |
| } | |
|  | |
| // @doc off | |
| // Transform Partials -------------------------------------------------------- | |
| // These work well on their own, but they don't add to each other, they override. | |
| // Use along with transform parameter mixins to adjust origin, perspective and style | |
| // --------------------------------------------------------------------------- | |
|  | |
|  | |
| // Scale --------------------------------------------------------------------- | |
| // @doc on | |
|  | |
| // Scale an object along the x and y axis: | |
| // | |
| //      @include scale( [ scale-x, scale-y, perspective, 3D-only ] ) | |
| // | |
| // where the 'scale-' arguments are unitless multipliers of the x and y dimensions | |
| // and perspective, which works the same as the stand-alone perspective property/mixin | |
| // but applies to the individual element (multiplied with any parent perspective) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin scale( | |
|   $scale-x:     $default-scale-x, | |
|   $scale-y:     $scale-x, | |
|   $perspective: false, | |
|   $only3d:      false | |
| ) { | |
|   $trans: scale($scale-x, $scale-y); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
| // Scale an object along the x axis | |
| // @include scaleX( [ scale-x, perspective, 3D-only ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin scaleX( | |
|   $scale:       $default-scale-x, | |
|   $perspective: false, | |
|   $only3d:      false | |
| ) { | |
|   $trans: scaleX($scale); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
| // Scale an object along the y axis | |
| // @include scaleY( [ scale-y, perspective, 3D-only ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin scaleY( | |
|   $scale:       $default-scale-y, | |
|   $perspective: false, | |
|   $only3d:      false | |
| ) { | |
|   $trans: scaleY($scale); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
| // Scale an object along the z axis | |
| // @include scaleZ( [ scale-z, perspective ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin scaleZ( | |
|   $scale: $default-scale-z, | |
|   $perspective: false | |
| ) { | |
|   $trans: scaleZ($scale); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform3d($trans); | |
| } | |
|  | |
| // Scale and object along all three axis | |
| // @include scale3d( [ scale-x, scale-y, scale-z, perspective ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin scale3d( | |
|   $scale-x:     $default-scale-x, | |
|   $scale-y:     $default-scale-y, | |
|   $scale-z:     $default-scale-z, | |
|   $perspective: false | |
| ) { | |
|   $trans: scale3d($scale-x, $scale-y, $scale-z); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform3d($trans); | |
| } | |
|  | |
| // @doc off | |
| // Rotate -------------------------------------------------------------------- | |
| // @doc on | |
|  | |
| // Rotate an object around the z axis  (2D) | |
| // @include rotate( [ rotation, perspective, 3D-only ] ) | |
| // where 'rotation' is an angle set in degrees (deg) or radian (rad) units | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin rotate( | |
|   $rotate:      $default-rotate, | |
|   $perspective: false, | |
|   $only3d:      false | |
| ) { | |
|   $trans: rotate($rotate); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
| // A longcut for 'rotate' in case you forget that 'z' is implied | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin rotateZ( | |
|   $rotate:      $default-rotate, | |
|   $perspective: false, | |
|   $only3d:      false | |
| ) { | |
|   @include rotate($rotate, $perspective, $only3d); | |
| } | |
|  | |
| // Rotate an object around the x axis (3D) | |
| // @include rotateX( [ rotation, perspective ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin rotateX( | |
|   $rotate: $default-rotate, | |
|   $perspective: false | |
| ) { | |
|   $trans: rotateX($rotate); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform3d($trans); | |
| } | |
|  | |
| // Rotate an object around the y axis (3D) | |
| // @include rotate( [ rotation, perspective ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin rotateY( | |
|   $rotate: $default-rotate, | |
|   $perspective: false | |
| ) { | |
|   $trans: rotateY($rotate); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform3d($trans); | |
| } | |
|  | |
| // Rotate an object around an arbitrary axis (3D) | |
| // @include rotate( [ vector-x, vector-y, vector-z, rotation, perspective ] ) | |
| // where the 'vector-' arguments accept unitless numbers. | |
| // These numbers are not important on their own, but in relation to one another | |
| // creating an axis from your transform-origin, along the axis of Xx = Yy = Zz. | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin rotate3d( | |
|   $vector-x: $default-vector-x, | |
|   $vector-y: $default-vector-y, | |
|   $vector-z: $default-vector-z, | |
|   $rotate: $default-rotate, | |
|   $perspective: false | |
| ) { | |
|   $trans: rotate3d($vector-x, $vector-y, $vector-z, $rotate); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform3d($trans); | |
| } | |
|  | |
| // @doc off | |
| // Translate ----------------------------------------------------------------- | |
| // @doc on | |
|  | |
| // Move an object along the x or y axis (2D) | |
| // @include translate( [ translate-x, translate-y, perspective, 3D-only ] ) | |
| // where the 'translate-' arguments accept any distance in percentages or absolute (px, cm, in, em etc..) units. | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin translate( | |
|   $translate-x: $default-translate-x, | |
|   $translate-y: $default-translate-y, | |
|   $perspective: false, | |
|   $only3d:      false | |
| ) { | |
|   $trans: translate($translate-x, $translate-y); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
| // Move an object along the x axis (2D) | |
| // @include translate( [ translate-x, perspective, 3D-only ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin translateX( | |
|   $trans-x:     $default-translate-x, | |
|   $perspective: false, | |
|   $only3d:      false | |
| ) { | |
|   $trans: translateX($trans-x); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
| // Move an object along the y axis (2D) | |
| // @include translate( [ translate-y, perspective, 3D-only ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin translateY( | |
|   $trans-y:     $default-translate-y, | |
|   $perspective: false, | |
|   $only3d:      false | |
| ) { | |
|   $trans: translateY($trans-y); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
| // Move an object along the z axis (3D) | |
| // @include translate( [ translate-z, perspective ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin translateZ( | |
|   $trans-z:     $default-translate-z, | |
|   $perspective: false | |
| ) { | |
|   $trans: translateZ($trans-z); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform3d($trans); | |
| } | |
|  | |
| // Move an object along the x, y and z axis (3D) | |
| // @include translate( [ translate-x, translate-y, translate-z, perspective ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin translate3d( | |
|   $translate-x: $default-translate-x, | |
|   $translate-y: $default-translate-y, | |
|   $translate-z: $default-translate-z, | |
|   $perspective: false | |
| ) { | |
|   $trans: translate3d($translate-x, $translate-y, $translate-z); | |
|   @if $perspective { $trans: perspective($perspective) $trans; } | |
|   @include transform3d($trans); | |
| } | |
|  | |
| // @doc off | |
| // Skew ---------------------------------------------------------------------- | |
| // @doc on | |
|  | |
| // Skew an element: | |
| // | |
| //     @include skew( [ skew-x, skew-y, 3D-only ] ) | |
| // | |
| // where the 'skew-' arguments accept css angles in degrees (deg) or radian (rad) units. | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin skew( | |
|   $skew-x: $default-skew-x, | |
|   $skew-y: $default-skew-y, | |
|   $only3d: false | |
| ) { | |
|   $trans: skew($skew-x, $skew-y); | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
| // Skew an element along the x axiz | |
| // | |
| //     @include skew( [ skew-x, 3D-only ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin skewX( | |
|   $skew-x: $default-skew-x, | |
|   $only3d: false | |
| ) { | |
|   $trans: skewX($skew-x); | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
| // Skew an element along the y axis | |
| // | |
| //     @include skew( [ skew-y, 3D-only ] ) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin skewY( | |
|   $skew-y: $default-skew-y, | |
|   $only3d: false | |
| ) { | |
|   $trans: skewY($skew-y); | |
|   @include transform($trans, $only3d); | |
| } | |
|  | |
|  | |
| // Full transform mixins | |
| // For settings any combination of transforms as arguments | |
| // These are complex and not highly recommended for daily use. They are mainly | |
| // here for backward-compatibility purposes. | |
| // | |
| // * they include origin adjustments | |
| // * scale takes a multiplier (unitless), rotate and skew take degrees (deg) | |
| // | |
| // **Note** This mixin cannot be combined with other transform mixins. | |
| @mixin create-transform( | |
|   $perspective: false, | |
|   $scale-x:     false, | |
|   $scale-y:     false, | |
|   $scale-z:     false, | |
|   $rotate-x:    false, | |
|   $rotate-y:    false, | |
|   $rotate-z:    false, | |
|   $rotate3d:    false, | |
|   $trans-x:     false, | |
|   $trans-y:     false, | |
|   $trans-z:     false, | |
|   $skew-x:      false, | |
|   $skew-y:      false, | |
|   $origin-x:    false, | |
|   $origin-y:    false, | |
|   $origin-z:    false, | |
|   $only3d:      false | |
| ) { | |
|   $trans: unquote(""); | |
|  | |
|   // perspective | |
|   @if $perspective { $trans: perspective($perspective) ; } | |
|  | |
|   // scale | |
|   @if $scale-x and $scale-y { | |
|     @if $scale-z { $trans: $trans scale3d($scale-x, $scale-y, $scale-z); } | |
|     @else { $trans: $trans scale($scale-x, $scale-y); } | |
|   } @else { | |
|     @if $scale-x { $trans: $trans scaleX($scale-x); } | |
|     @if $scale-y { $trans: $trans scaleY($scale-y); } | |
|     @if $scale-z { $trans: $trans scaleZ($scale-z); } | |
|   } | |
|  | |
|   // rotate | |
|   @if $rotate-x { $trans: $trans rotateX($rotate-x); } | |
|   @if $rotate-y { $trans: $trans rotateY($rotate-y); } | |
|   @if $rotate-z { $trans: $trans rotateZ($rotate-z); } | |
|   @if $rotate3d { $trans: $trans rotate3d($rotate3d); } | |
|  | |
|   // translate | |
|   @if $trans-x and $trans-y { | |
|     @if $trans-z { $trans: $trans translate3d($trans-x, $trans-y, $trans-z); } | |
|     @else { $trans: $trans translate($trans-x, $trans-y); } | |
|   } @else { | |
|     @if $trans-x { $trans: $trans translateX($trans-x); } | |
|     @if $trans-y { $trans: $trans translateY($trans-y); } | |
|     @if $trans-z { $trans: $trans translateZ($trans-z); } | |
|   } | |
|  | |
|   // skew | |
|   @if $skew-x and $skew-y { $trans: $trans skew($skew-x, $skew-y); } | |
|   @else { | |
|     @if $skew-x { $trans: $trans skewX($skew-x); } | |
|     @if $skew-y { $trans: $trans skewY($skew-y); } | |
|   } | |
|  | |
|   // apply it! | |
|   @include transform($trans, $only3d); | |
|   @include transform-origin($origin-x, $origin-y, $origin-z, $only3d); | |
| } | |
|  | |
|  | |
| // A simplified set of options | |
| // backwards-compatible with the previous version of the 'transform' mixin | |
| @mixin simple-transform( | |
|   $scale:    false, | |
|   $rotate:   false, | |
|   $trans-x:  false, | |
|   $trans-y:  false, | |
|   $skew-x:   false, | |
|   $skew-y:   false, | |
|   $origin-x: false, | |
|   $origin-y: false | |
| ) { | |
|   @include create-transform( | |
|     false, | |
|     $scale, $scale, false, | |
|     false, false, $rotate, false, | |
|     $trans-x, $trans-y, false, | |
|     $skew-x, $skew-y, | |
|     $origin-x, $origin-y, false, | |
|     false | |
|   ); | |
| }
 | |
| 
 |