// -------------------------------------------------- // reflex mixins // -------------------------------------------------- // // -------------------------------------------------- // reflex grid generation mixins // -------------------------------------------------- @mixin make-reflex-grid($class) { @include loop-reflex-columns($reflex-columns, $class, width); } @mixin calc-reflex-columns($index, $class, $type) { @if $type == width and $index > 0 { .#{$reflex-prefix}#{$class}#{$index} { width: percentage(($index / $reflex-columns)); @if $legacy-support == true { *width: percentage(($index / $reflex-columns)) - .1; // ie7 css hack } } } } @mixin loop-reflex-columns($index, $class, $type) { @if $index >= 0 { @include calc-reflex-columns($index, $class, $type); // next iteration @include loop-reflex-columns(($index - 1), $class, $type); } } // defaults for auto cols @mixin setup-auto-cols() { @include flex(1, 0, 0px); // a unit on last value is required by IE10-11 @if $legacy-support == true { width: auto; } } // -------------------------------------------------- // inline-block specific mixins // -------------------------------------------------- @mixin setup-whitespace() { @if $legacy-support == true { letter-spacing: -.31em; *letter-spacing: normal; word-spacing: -.43em; } } @mixin reset-whitespace() { @if $legacy-support == true { letter-spacing: normal; word-spacing: normal; white-space: normal; } } @mixin reset-text-align() { // // We want to reset any text-align properties set by the grid // (required for the inline-block fallback) // but we don't want to override any text-align properties // set on the individual col-x element // or on any of it's child elements // // 1) set to left by default (works everywhere) // 2) set to start (respects right to left text) // text-align: left; text-align: start; -moz-text-align-last: left; -moz-text-align-last: start; text-align-last: left; text-align-last: start; } // -------------------------------------------------- // order class generation mixins // -------------------------------------------------- @mixin order($order: 0) { -ms-flex-order: $order; -webkit-order: $order; order: $order; } @mixin make-order-helpers() { @include loop-order-helpers($reflex-columns); } @mixin loop-order-helpers($index, $breakpoint: null) { @if $index >= 0 { .#{$reflex-prefix}order#{$breakpoint}-#{$index} { @include order($index); } // next iteration @include loop-order-helpers(($index - 1), $breakpoint); } } // -------------------------------------------------- // offset class generation mixins // -------------------------------------------------- @mixin offset($index: 0) { $offset: ($index / $reflex-columns); // convert to percentage only if not zero @if $offset != 0 { $offset: percentage($offset); } margin-left: $offset; @if $legacy-support == true { *margin-left: percentage(($index / $reflex-columns)) - .1; // ie7 css hack } } @mixin make-offset-helpers() { @include loop-offset-helpers($reflex-columns - 1); } @mixin loop-offset-helpers($index, $breakpoint: null) { @if $index > 0 and $breakpoint == null { .#{$reflex-prefix}offset#{$breakpoint}-#{$index} { @include offset($index); } // next iteration @include loop-offset-helpers(($index - 1), $breakpoint); } @else if $index >= 0 and $breakpoint != null { .#{$reflex-prefix}offset#{$breakpoint}-#{$index} { @include offset($index); } // next iteration @include loop-offset-helpers(($index - 1), $breakpoint); } } // -------------------------------------------------- // reflex modifier mixins // -------------------------------------------------- // // display // --- @mixin display-flex() { display: -ms-flexbox; display: -webkit-flex; display: flex; } // // flex // --- @mixin flex($grow: 0, $shrink: 1, $basis: auto) { @if $basis == 0 { -ms-flex: $grow $shrink auto; //ie10 needs auto } @else { -ms-flex: $grow $shrink $basis; } -webkit-flex: $grow $shrink $basis; flex: $grow $shrink $basis; } @mixin flex-grow($grow:1) { -ms-flex-positive: $grow; -webkit-flex-grow: $grow; flex-grow: $grow; } @mixin flex-shrink($shrink:1) { -ms-flex-negative: $shrink; -webkit-flex-shrink: $shrink; flex-shrink: $shrink; } @mixin flex-basis($basis:auto) { -ms-flex-preferred-size: $basis; -webkit-flex-basis: $basis; flex-basis: $basis; } @mixin flex-flow($direction: row, $wrap: nowrap) { -ms-flex-wrap: $wrap; -ms-flex-direction: $direction; -webkit-flex-flow: $direction $wrap; flex-flow: $direction $wrap; } @mixin flex-wrap($wrap: wrap) { -ms-flex-wrap: $wrap; -webkit-flex-wrap: $wrap; flex-wrap: $wrap; } @mixin flex-direction($direction: row) { -ms-flex-direction: $direction; -webkit-flex-direction: $direction; flex-direction: $direction; } // // align // --- @mixin align-items($align: stretch) { @include ms-align-items($align); -webkit-align-items: $align; align-items: $align; } @mixin align-self($align: stretch) { @include ms-align-self($align); -webkit-align-self: $align; align-self: $align; } @mixin align-content($align: stretch) { @include ms-align-content($align); -webkit-align-content: $align; align-content: $align; } // // ie10 syntax for align // --- @mixin ms-align-items($align) { @if $align == 'flex-start' { -ms-flex-align: start; } @else if $align == 'flex-end' { -ms-flex-align: end; } @else { -ms-flex-align: $align; } } @mixin ms-align-self($align) { @if $align == 'flex-start' { -ms-flex-item-align: start; } @else if $align == 'flex-end' { -ms-flex-item-align: end; } @else { -ms-flex-item-align: $align; } } @mixin ms-align-content($align) { @if $align == 'flex-start' { -ms-flex-line-pack: start; } @else if $align == 'flex-end' { -ms-flex-line-pack: end; } @else if $align == 'space-between' { -ms-flex-line-pack: justify; } @else if $align == 'space-around' { -ms-flex-line-pack: distribute; } @else { -ms-flex-line-pack: $align; } } // // justify-content // // Uses "text-align" for the fallback inline-block grid // "text-align" is globally supported and works on all rows except the last // "text-align-last", where supported, handles the last line (and, happily, grids with only one row) // --- @mixin justify-content-start() { -ms-flex-pack: start; -webkit-justify-content: flex-start; justify-content: flex-start; } @mixin justify-content-end() { -ms-flex-pack: end; -webkit-justify-content: flex-end; justify-content: flex-end; } @mixin justify-content-center() { -ms-flex-pack: center; -webkit-justify-content: center; justify-content: center; } @mixin justify-content-space-between() { -ms-flex-pack: justify; -webkit-justify-content: space-between; justify-content: space-between; } @mixin justify-content-space-around() { -ms-flex-pack: distribute; -webkit-justify-content: space-around; justify-content: space-around; } // -------------------------------------------------- // other mixins // -------------------------------------------------- @mixin box-sizing($boxmodel) { -webkit-box-sizing: $boxmodel; -moz-box-sizing: $boxmodel; box-sizing: $boxmodel; } @mixin responsive-visibility-helpers() { @if $visibility-helpers == true { .#{$reflex-prefix}hidden-xxs { @media (max-width: $reflex-xxs-max) { display: none; } } .#{$reflex-prefix}hidden-xs { @media (min-width: $reflex-xs) and (max-width: $reflex-xs-max) { display: none; } } .#{$reflex-prefix}hidden-sm { @media (min-width: $reflex-sm) and (max-width: $reflex-sm-max) { display: none; } } .#{$reflex-prefix}hidden-md { @media (min-width: $reflex-md) and (max-width: $reflex-md-max) { display: none; } } .#{$reflex-prefix}hidden-lg { @media (min-width: $reflex-lg) and (max-width: $reflex-lg-max) { display: none; } } .#{$reflex-prefix}hidden-xlg { @media (min-width: $reflex-xlg) { display: none; } } } }