| /* stylelint-disable function-url-quotes, no-duplicate-selectors */ |
| |
| /* |
| * |
| * Responsive attributes |
| * |
| * References: |
| * 1) https://scotch.io/tutorials/a-visual-guide-to-css3-flexbox-properties#flex |
| * 2) https://css-tricks.com/almanac/properties/f/flex/ |
| * 3) https://css-tricks.com/snippets/css/a-guide-to-flexbox/ |
| * 4) https://github.com/philipwalton/flexbugs#3-min-height-on-a-flex-container-wont-apply-to-its-flex-items |
| * 5) http://godban.com.ua/projects/flexgrid |
| * |
| */ |
| |
| // Layout |
| // ------------------------------ |
| |
| $baseline-grid: 8px !default; |
| $layout-gutter-width: ($baseline-grid * 2) !default; |
| |
| $layout-breakpoint-xs: 600px !default; |
| $layout-breakpoint-sm: 960px !default; |
| $layout-breakpoint-md: 1280px !default; |
| $layout-breakpoint-lg: 1920px !default; |
| |
| @-moz-document url-prefix() { |
| [layout-fill] { |
| margin: 0; |
| width: 100%; |
| min-height: 100%; |
| height: 100%; |
| } |
| } |
| |
| @mixin flex-order-for-name($sizes: null) { |
| @if $sizes == null { |
| $sizes: ''; |
| |
| [flex-order] { |
| order: 0; |
| } |
| } |
| |
| @for $i from -20 through 20 { |
| $order: ''; |
| $suffix: ''; |
| |
| @each $s in $sizes { |
| @if $s != '' { |
| $suffix: '-#{$s}="#{$i}"'; |
| } @else { |
| $suffix: '="#{$i}"'; |
| } |
| |
| $order: '[flex-order#{$suffix}]'; |
| } |
| |
| #{$order} { |
| order: #{$i}; |
| } |
| } |
| } |
| |
| @mixin offset-for-name($sizes: null) { |
| @if $sizes == null { |
| $sizes: ''; |
| } |
| |
| @for $i from 0 through 19 { |
| $offsets: ''; |
| $suffix: ''; |
| |
| @each $s in $sizes { |
| @if $s != '' { |
| $suffix: '-#{$s}="#{$i * 5}"'; |
| } @else { |
| $suffix: '="#{$i * 5}"'; |
| } |
| |
| $offsets: $offsets + '[flex-offset#{$suffix}], '; |
| } |
| |
| #{$offsets} { |
| margin-left: #{$i * 5 + '%'}; |
| } |
| } |
| |
| @each $i in 33 { |
| $offsets: ''; |
| $suffix: ''; |
| |
| @each $s in $sizes { |
| @if $s != '' { |
| $suffix: '-#{$s}="#{$i}"'; |
| } @else { |
| $suffix: '="#{$i}"'; |
| } |
| |
| $offsets: '[flex-offset#{$suffix}], '; |
| } |
| |
| #{$offsets} { |
| margin-left: calc(100% / 3); |
| } |
| } |
| |
| @each $i in 66 { |
| $offsets: ''; |
| $suffix: ''; |
| |
| @each $s in $sizes { |
| @if $s != '' { |
| $suffix: '-#{$s}="#{$i}"'; |
| } @else { |
| $suffix: '="#{$i}"'; |
| } |
| |
| $offsets: '[flex-offset#{$suffix}]'; |
| } |
| |
| #{$offsets} { |
| margin-left: calc(200% / 3); |
| } |
| } |
| } |
| |
| @mixin layout-for-name($name: null) { |
| @if $name == null { |
| $name: ''; |
| } |
| @if $name != '' { |
| $name: '-#{$name}'; |
| } |
| |
| [layout#{$name}], |
| [layout#{$name}='column'], |
| [layout#{$name}='row'] { |
| box-sizing: border-box; |
| display: -webkit-box; |
| display: -webkit-flex; |
| display: -moz-box; |
| display: -ms-flexbox; |
| display: flex; |
| } |
| [layout#{$name}='column'] { |
| flex-direction: column; |
| } |
| [layout#{$name}='row'] { |
| flex-direction: row; |
| } |
| } |
| |
| @mixin flex-properties-for-name($name: null) { |
| $flexName: 'flex'; |
| @if $name != null { |
| $flexName: 'flex-#{$name}'; |
| $name: '-#{$name}'; |
| } @else { |
| $name: ''; |
| } |
| |
| [#{$flexName}] { |
| flex: 1; |
| box-sizing: border-box; |
| } |
| // === flex: 1 1 0%; |
| |
| // IE mediaQuery hack for 8,9,10 to set the flex-basis properly for 'flex' values |
| // Details: |
| // Do not use unitless flex-basis values in the flex shorthand because IE 10-11 will error. |
| // Also use 0% instead of 0px since minifiers will often convert 0px to 0 (which is unitless and will have the same problem). |
| // Safari, however, fails with flex-basis : 0% and requires flex-basis : 0px |
| @media screen\0 { |
| [#{$flexName}] { |
| flex: 1 1 0%; |
| } |
| } |
| |
| [#{$flexName}='grow'], |
| [#{$flexName}-grow] { |
| flex: 1 1 100%; |
| box-sizing: border-box; |
| } |
| [#{$flexName}='initial'], |
| [#{$flexName}-initial] { |
| flex: 0 1 auto; |
| box-sizing: border-box; |
| } |
| [#{$flexName}='auto'], |
| [#{$flexName}-auto] { |
| flex: 1 1 auto; |
| box-sizing: border-box; |
| } |
| [#{$flexName}='none'], |
| [#{$flexName}-none] { |
| flex: 0 0 auto; |
| box-sizing: border-box; |
| } |
| [#{$flexName}='noshrink'], |
| [#{$flexName}-noshrink] { |
| flex: 1 0 auto; |
| box-sizing: border-box; |
| } |
| [#{$flexName}='nogrow'], |
| [#{$flexName}-nogrow] { |
| flex: 0 1 auto; |
| box-sizing: border-box; |
| } |
| |
| // (1-20) * 5 = 0-100% |
| @for $i from 0 through 20 { |
| $value: #{$i * 5 + '%'}; |
| |
| [#{$flexName}='#{$i * 5}'] { |
| flex: 1 1 #{$value}; |
| max-width: #{$value}; |
| max-height: 100%; |
| box-sizing: border-box; |
| } |
| |
| [layout='row'] > [#{$flexName}='#{$i * 5}'], |
| [layout#{$name}='row'] > [#{$flexName}='#{$i * 5}'] { |
| flex: 1 1 #{$value}; |
| max-width: #{$value}; |
| max-height: 100%; |
| box-sizing: border-box; |
| } |
| |
| [layout='column'] > [#{$flexName}='#{$i * 5}'], |
| [layout#{$name}='column'] > [#{$flexName}='#{$i * 5}'] { |
| flex: 1 1 #{$value}; |
| max-width: 100%; |
| max-height: #{$value}; |
| box-sizing: border-box; |
| } |
| } |
| |
| [layout='row'], |
| [layout#{$name}='row'] { |
| > [#{$flexName}='33'], |
| > [#{$flexName}='33'] { |
| flex: 1 1 33%; |
| max-width: calc(100% / 3); |
| max-height: 100%; |
| box-sizing: border-box; |
| } |
| > [#{$flexName}='34'], |
| > [#{$flexName}='34'] { |
| flex: 1 1 34%; |
| max-width: 34%; |
| max-height: 100%; |
| box-sizing: border-box; |
| } |
| > [#{$flexName}='66'], |
| > [#{$flexName}='66'] { |
| flex: 1 1 66%; |
| max-width: calc(200% / 3); |
| max-height: 100%; |
| box-sizing: border-box; |
| } |
| > [#{$flexName}='67'], |
| > [#{$flexName}='67'] { |
| flex: 1 1 67%; |
| max-width: 67%; |
| max-height: 100%; |
| box-sizing: border-box; |
| } |
| } |
| [layout='column'], |
| [layout#{$name}='column'] { |
| > [#{$flexName}='33'], |
| > [#{$flexName}='33'] { |
| flex: 1 1 33%; |
| max-width: 100%; |
| max-height: calc(100% / 3); |
| box-sizing: border-box; |
| } |
| > [#{$flexName}='34'], |
| > [#{$flexName}='34'] { |
| flex: 1 1 34%; |
| max-width: 100%; |
| max-height: 34%; |
| box-sizing: border-box; |
| } |
| > [#{$flexName}='66'], |
| > [#{$flexName}='66'] { |
| flex: 1 1 66%; |
| max-width: 100%; |
| max-height: calc(200% / 3); |
| box-sizing: border-box; |
| } |
| > [#{$flexName}='67'], |
| > [#{$flexName}='67'] { |
| flex: 1 1 67%; |
| max-width: 100%; |
| max-height: 67%; |
| box-sizing: border-box; |
| } |
| } |
| } |
| |
| @mixin layout-align-for-name($suffix: null) { |
| // Alignment attributes for layout containers' children |
| // Arrange on the Main Axis |
| // center, start, end, space-between, space-around |
| // flex-start is the default for justify-content |
| // ------------------------------ |
| |
| $name: 'layout-align'; |
| @if $suffix != null { |
| $name: 'layout-align-#{$suffix}'; |
| } |
| |
| [#{$name}], |
| [#{$name}="start stretch"] // defaults |
| { |
| justify-content: flex-start; |
| align-content: stretch; |
| align-items: stretch; |
| } |
| // Main Axis Center |
| [#{$name}='start'], |
| [#{$name}='start start'], |
| [#{$name}='start center'], |
| [#{$name}='start end'], |
| [#{$name}='start stretch'] { |
| justify-content: flex-start; |
| } |
| |
| // Main Axis Center |
| [#{$name}='center'], |
| [#{$name}='center start'], |
| [#{$name}='center center'], |
| [#{$name}='center end'], |
| [#{$name}='center stretch'] { |
| justify-content: center; |
| } |
| |
| // Main Axis End |
| [#{$name}="end"], //stretch |
| [#{$name}="end center"], |
| [#{$name}="end start"], |
| [#{$name}="end end"], |
| [#{$name}="end stretch"] { |
| justify-content: flex-end; |
| } |
| |
| // Main Axis Space Around |
| [#{$name}="space-around"], //stretch |
| [#{$name}="space-around center"], |
| [#{$name}="space-around start"], |
| [#{$name}="space-around end"], |
| [#{$name}="space-around stretch"] { |
| justify-content: space-around; |
| } |
| |
| // Main Axis Space Between |
| [#{$name}="space-between"], //stretch |
| [#{$name}="space-between center"], |
| [#{$name}="space-between start"], |
| [#{$name}="space-between end"], |
| [#{$name}="space-between stretch"] { |
| justify-content: space-between; |
| } |
| |
| // Arrange on the Cross Axis |
| // center, start, end |
| // stretch is the default for align-items |
| // ------------------------------ |
| |
| // Cross Axis Start |
| [#{$name}='start start'], |
| [#{$name}='center start'], |
| [#{$name}='end start'], |
| [#{$name}='space-between start'], |
| [#{$name}='space-around start'] { |
| align-items: flex-start; |
| align-content: flex-start; |
| } |
| |
| // Cross Axis Center |
| [#{$name}='start center'], |
| [#{$name}='center center'], |
| [#{$name}='end center'], |
| [#{$name}='space-between center'], |
| [#{$name}='space-around center'] { |
| align-items: center; |
| align-content: center; |
| max-width: 100%; |
| |
| // IE11 overflow https://github.com/philipwalton/flexbugs#2-column-flex-items-set-to-align-itemscenter-overflow-their-container |
| & > * { |
| max-width: 100%; |
| box-sizing: border-box; |
| } |
| } |
| |
| // Cross Axis Center IE overflow fix |
| [#{$name}='start center'] > *, |
| [#{$name}='center center'] > *, |
| [#{$name}='end center'] > *, |
| [#{$name}='space-between center'] > *, |
| [#{$name}='space-around center'] > * { |
| max-width: 100%; |
| box-sizing: border-box; |
| } |
| |
| // Cross Axis End |
| [#{$name}='start end'], |
| [#{$name}='center end'], |
| [#{$name}='end end'], |
| [#{$name}='space-between end'], |
| [#{$name}='space-around end'] { |
| align-items: flex-end; |
| align-content: flex-end; |
| } |
| |
| // Cross Axis stretch |
| [#{$name}='start stretch'], |
| [#{$name}='center stretch'], |
| [#{$name}='end stretch'], |
| [#{$name}='space-between stretch'], |
| [#{$name}='space-around stretch'] { |
| align-items: stretch; |
| align-content: stretch; |
| } |
| } |
| |
| @mixin layout-padding-margin() { |
| [layout-padding] > [flex-sm], |
| [layout-padding] > [flex-lt-md] { |
| padding: $layout-gutter-width / 4; |
| } |
| [layout-padding], |
| [layout-padding] > [flex], |
| [layout-padding] > [flex-gt-sm], |
| [layout-padding] > [flex-md], |
| [layout-padding] > [flex-lt-lg] { |
| padding: $layout-gutter-width / 2; |
| } |
| [layout-padding] > [flex-gt-md], |
| [layout-padding] > [flex-lg] { |
| padding: $layout-gutter-width / 1; |
| } |
| |
| [layout-margin] > [flex-sm], |
| [layout-margin] > [flex-lt-md] { |
| margin: $layout-gutter-width / 4; |
| } |
| |
| [layout-margin], |
| [layout-margin] > [flex], |
| [layout-margin] > [flex-gt-sm], |
| [layout-margin] > [flex-md], |
| [layout-margin] > [flex-lt-lg] { |
| margin: $layout-gutter-width / 2; |
| } |
| |
| [layout-margin] > [flex-gt-md], |
| [layout-margin] > [flex-lg] { |
| margin: $layout-gutter-width / 1; |
| } |
| |
| [layout-wrap] { |
| flex-wrap: wrap; |
| } |
| |
| [layout-nowrap] { |
| flex-wrap: nowrap; |
| } |
| |
| [layout-fill] { |
| margin: 0; |
| width: 100%; |
| min-height: 100%; |
| height: 100%; |
| } |
| } |
| |
| @mixin layouts_for_breakpoint($name: null) { |
| @include flex-order-for-name($name); |
| @include offset-for-name($name); |
| @include layout-align-for-name($name); |
| |
| @include flex-properties-for-name($name); |
| @include layout-for-name($name); |
| } |
| |
| @mixin covalent-layout() { |
| /* |
| * Apply Mixins to create Layout/Flexbox styles |
| * |
| */ |
| |
| @include layouts_for_breakpoint(); |
| @include layout-padding-margin(); |
| |
| /** |
| * `hide-gt-sm show-gt-lg` should hide from 600px to 1200px |
| * `show-md hide-gt-sm` should show from 0px to 960px and hide at >960px |
| * `hide-gt-md show-gt-sm` should show everywhere (show overrides hide)` |
| * |
| * hide means hide everywhere |
| * Sizes: |
| * $layout-breakpoint-xs: 600px !default; |
| * $layout-breakpoint-sm: 960px !default; |
| * $layout-breakpoint-md: 1280px !default; |
| * $layout-breakpoint-lg: 1920px !default; |
| */ |
| |
| @media (max-width: $layout-breakpoint-xs - 1) { |
| // Xtra-SMALL SCREEN |
| [hide-xs], |
| [hide] { |
| &:not([show-xs]):not([show]) { |
| display: none; |
| } |
| } |
| @include layouts_for_breakpoint(xs); |
| } |
| |
| @media (min-width: $layout-breakpoint-xs) { |
| // BIGGER THAN Xtra-SMALL SCREEN |
| @include layouts_for_breakpoint(gt-xs); |
| } |
| |
| @media (min-width: $layout-breakpoint-xs) and (max-width: $layout-breakpoint-sm - 1) { |
| // SMALL SCREEN |
| [hide-sm], |
| [hide-gt-xs] { |
| &:not([show-gt-xs]):not([show-sm]):not([show]) { |
| display: none; |
| } |
| } |
| [hide-sm]:not([show-sm]):not([show]) { |
| display: none; |
| } |
| @include layouts_for_breakpoint(sm); |
| } |
| |
| @media (min-width: $layout-breakpoint-sm) { |
| // BIGGER THAN SMALL SCREEN |
| @include layouts_for_breakpoint(gt-sm); |
| } |
| |
| @media (min-width: $layout-breakpoint-sm) and (max-width: $layout-breakpoint-md - 1) { |
| // MEDIUM SCREEN |
| [hide], |
| [hide-gt-xs], |
| [hide-gt-sm] { |
| &:not([show-gt-xs]):not([show-gt-sm]):not([show-md]):not([show]) { |
| display: none; |
| } |
| } |
| [hide-md]:not([show-md]):not([show]) { |
| display: none; |
| } |
| @include layouts_for_breakpoint(md); |
| } |
| |
| @media (min-width: $layout-breakpoint-md) { |
| // BIGGER THAN MEDIUM SCREEN |
| @include layouts_for_breakpoint(gt-md); |
| } |
| |
| @media (min-width: $layout-breakpoint-md) and (max-width: $layout-breakpoint-lg - 1) { |
| // LARGE SCREEN |
| [hide], |
| [hide-gt-xs], |
| [hide-gt-sm], |
| [hide-gt-md] { |
| &:not([show-gt-xs]):not([show-gt-sm]):not([show-gt-md]):not([show-lg]):not([show]) { |
| display: none; |
| } |
| } |
| [hide-lg]:not([show-lg]):not([show]) { |
| display: none; |
| } |
| |
| @include layouts_for_breakpoint(lg); |
| } |
| |
| @media (min-width: $layout-breakpoint-lg) { |
| // BIGGER THAN LARGE SCREEN |
| @include layouts_for_breakpoint(gt-lg); |
| @include layouts_for_breakpoint(xl); |
| |
| // BIGGER THAN LARGE SCREEN |
| [hide], |
| [hide-gt-xs], |
| [hide-gt-sm], |
| [hide-gt-md], |
| [hide-gt-lg] { |
| &:not([show-gt-xs]):not([show-gt-sm]):not([show-gt-md]):not([show-gt-lg]):not([show-xl]):not([show]) { |
| display: none; |
| } |
| } |
| [hide-xl]:not([show-xl]):not([show-gt-lg]):not([show]) { |
| display: none; |
| } |
| } |
| } |