biofriction-wp-theme/node_modules/foundation-sites/scss/xy-grid/_classes.scss

497 lines
13 KiB
SCSS

// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source
////
/// @group xy-grid
////
// Margin Grid classes
@mixin xy-base-grid-classes {
// Grid Container
.grid-container {
@include xy-grid-container;
&.fluid {
@include xy-grid-container(100%);
}
&.full {
@include xy-grid-container(100%, 0);
}
}
// Base grid styles
.grid-x {
@include xy-grid;
}
.cell {
@include xy-cell-base();
@include xy-cell-static($grid-columns, false, $gutter-type: padding);
&.auto {
@include xy-cell-base(auto);
}
&.shrink {
@include xy-cell-base(shrink);
}
}
.grid-x {
> .auto {
@include xy-cell-static(auto, false);
}
> .shrink {
@include xy-cell-static(shrink, false);
}
}
// Auto width
@include -zf-each-breakpoint() {
// This is a bit of a hack/workaround, see these issues & PRs for the backstory:
// https://github.com/zurb/foundation-sites/issues/10244
// https://github.com/zurb/foundation-sites/pull/10222 and
// https://github.com/zurb/foundation-sites/pull/10164
.grid-x {
$str: "> .#{$-zf-size}-shrink, > .#{$-zf-size}-full";
@for $i from 1 through $grid-columns {
$str: $str + ", > .#{$-zf-size}-#{$i}"
}
#{$str} {
flex-basis: auto;
}
}
}
@include -zf-each-breakpoint() {
// Responsive "auto" modifier
@if not($-zf-size == small) {
.grid-x > .#{$-zf-size}-auto {
@include xy-cell-base(auto);
@include xy-cell-static(auto, false);
}
}
%-xy-cell-base-shrink-horizontal-#{$-zf-size} {
@include xy-cell-base(shrink);
}
// Responsive "shrink" modifier
@if not($-zf-size == small) {
.grid-x > .#{$-zf-size}-shrink {
@extend %-xy-cell-base-shrink-horizontal-#{$-zf-size};
@include xy-cell-static(shrink, false);
}
}
// Responsive width modifiers
@for $i from 1 through $grid-columns {
// Sizing (percentage)
.grid-x > .#{$-zf-size}-#{$i} {
@extend %-xy-cell-base-shrink-horizontal-#{$-zf-size};
@include xy-cell-static($i, false, $gutter-type: padding);
}
}
}
// Reset width when using `.grid-margin-x` not on `.grid-x`
.grid-margin-x:not(.grid-x) > .cell {
width: auto;
}
// Reset height when using `.grid-margin-y` not on `.grid-y`
.grid-margin-y:not(.grid-y) > .cell {
height: auto;
}
}
@mixin -xy-breakpoint-cell-classes($class-breakpoint, $gutter-breakpoint, $vertical) {
$prefix: if($class-breakpoint == $-zf-zero-breakpoint, '', '#{$class-breakpoint}-');
> .#{$prefix}auto {
@include xy-cell-static(auto, false, $breakpoint: $gutter-breakpoint, $vertical: $vertical);
}
> .#{$prefix}shrink {
@include xy-cell-static(shrink, false, $breakpoint: $gutter-breakpoint, $vertical: $vertical);
}
@for $i from 1 through $grid-columns {
// Sizing (percentage)
$classname: if($vertical, '.#{$class-breakpoint}-#{$i}', '.#{$class-breakpoint}-#{$i}');
> #{$classname} {
@include xy-cell-static($i, false, $breakpoint: $gutter-breakpoint, $vertical: $vertical);
}
}
}
// Margin Grid classes
@mixin xy-margin-grid-classes(
$gutter-position: left right,
$vertical: false,
$wrapping-selector: '.grid-margin-x'
){
#{$wrapping-selector} {
@include xy-gutters($negative: true, $gutter-position: $gutter-position);
// Base cell styles
> .cell {
@include xy-cell-static($vertical: $vertical);
}
// base styles need to all be before the auto and shrink styles
@include -zf-each-breakpoint() {
@if(type-of($grid-margin-gutters) == 'map' and map-has-key($grid-margin-gutters, $-zf-size) and $-zf-size != $-zf-zero-breakpoint) {
> .cell {
@include xy-cell-static($breakpoint: $-zf-size, $vertical: $vertical);
}
}
}
@include -zf-each-breakpoint() {
// This is purely for responsive gutters - the margin grid has to go back and adjust widths (or heights)
// for all prior breakpoints.
// As their gutter is defined with their width/height, even breakpoint without a new margin must be
// generated to not having their width/height overrided by re-adjusted smaller breakpoints.
@if(type-of($grid-margin-gutters) == 'map' and map-has-key($grid-margin-gutters, $-zf-size)) {
@each $bp in -zf-breakpoints-less-than($-zf-size) {
@include -xy-breakpoint-cell-classes($bp, $-zf-size, $vertical);
}
}
@include -xy-breakpoint-cell-classes($-zf-size, $-zf-size, $vertical);
}
}
}
// Padding Grid classes
@mixin xy-padding-grid-classes {
.grid-padding-x {
// Negative margin for nested grids
.grid-padding-x {
@include xy-gutters($negative: true);
}
// Negative margin for grids within `grid-container/grid-container.fluid`
// This allows margin and padding grids to line up with eachother
.grid-container:not(.full) > & {
@include xy-gutters($negative: true);
}
// Base cell styles
> .cell {
@include xy-gutters($gutters: $grid-padding-gutters, $gutter-type: padding);
}
}
}
// Block Grid classes
@mixin xy-block-grid-classes($margin-grid: true, $padding-grid: true) {
@if $padding-grid {
@include -zf-each-breakpoint {
@for $i from 1 through $xy-block-grid-max {
.#{$-zf-size}-up-#{$i} {
@include xy-grid-layout($n: $i, $selector: '.cell', $gutter-output: false, $gutter-type: padding, $breakpoint: $-zf-size);
}
}
}
}
@if $margin-grid {
@include -zf-each-breakpoint {
@for $i from 1 through $xy-block-grid-max {
// This is purely for responsive gutters - the margin grid has to go back and adjust widths (or heights)
// for prior breakpoints based on the responsive gutter.
@if(type-of($grid-margin-gutters) == 'map' and map-has-key($grid-margin-gutters, $-zf-size)) {
@each $bp in -zf-breakpoints-less-than($-zf-size) {
@if(map-has-key($grid-margin-gutters, $bp)) {
.grid-margin-x.#{$bp}-up-#{$i} {
@include xy-grid-layout($n: $i, $selector: '.cell', $gutter-output: false, $gutter-type: margin, $breakpoint: $-zf-size);
}
}
}
}
}
@for $i from 1 through $xy-block-grid-max {
.grid-margin-x.#{$-zf-size}-up-#{$i} {
@include xy-grid-layout($n: $i, $selector: '.cell', $gutter-output: false, $gutter-type: margin, $breakpoint: $-zf-size);
}
}
}
}
}
// Collapse classes
@mixin xy-collapse-grid-classes($margin-grid: true, $padding-grid: true) {
@each $bp in $breakpoint-classes {
@if $margin-grid {
.#{$bp}-margin-collapse {
@include xy-grid-collapse($gutter-type: margin, $min-breakpoint: $bp);
}
}
@if $padding-grid {
.#{$bp}-padding-collapse {
@include xy-grid-collapse($gutter-type: padding, $min-breakpoint: $bp);
}
}
}
}
// Offset classes
@mixin xy-offset-cell-classes {
@include -zf-each-breakpoint {
@for $i from 1 through $grid-columns {
// Offsets
$o: $i - 1;
.#{$-zf-size}-offset-#{$o} {
@include xy-cell-offset($o, $gutters: $grid-padding-gutters, $gutter-type: padding, $breakpoint: $-zf-size);
}
.grid-margin-x > .#{$-zf-size}-offset-#{$o} {
@include xy-cell-offset($o, $breakpoint: $-zf-size);
}
}
}
}
// Vertical Grid classes
@mixin xy-vertical-grid-classes(
$margin-grid: true,
$padding-grid: true
) {
@include -zf-each-breakpoint() {
@if not($-zf-size == small) {
}
}
.grid-y {
@include xy-grid(vertical, false);
> .cell {
@include xy-cell-reset();
}
> .auto {
@include xy-cell-static(auto, false, $vertical: true);
}
> .shrink {
@include xy-cell-static(shrink, false, $vertical: true);
}
@include -zf-each-breakpoint() {
// This is a bit of a hack/workaround, see these issues and PRs for the backstory:
// https://github.com/zurb/foundation-sites/issues/10244
// https://github.com/zurb/foundation-sites/pull/10222 and
// https://github.com/zurb/foundation-sites/pull/10164
$str: "> .#{$-zf-size}-shrink, > .#{$-zf-size}-full";
@for $i from 1 through $grid-columns {
$str: $str + ", > .#{$-zf-size}-#{$i}"
}
#{$str} {
flex-basis: auto;
}
}
@include -zf-each-breakpoint() {
// Responsive "auto" modifier
@if not($-zf-size == small) {
> .#{$-zf-size}-auto {
@include xy-cell-base(auto);
@include xy-cell-static(auto, false, $breakpoint: $-zf-size, $vertical: true);
}
}
%-xy-cell-base-shrink-vertical-#{$-zf-size} {
@include xy-cell-base(shrink);
}
// Responsive "shrink" modifier
@if not($-zf-size == small) {
> .#{$-zf-size}-shrink {
@extend %-xy-cell-base-shrink-vertical-#{$-zf-size};
@include xy-cell-static(shrink, false, $breakpoint: $-zf-size, $vertical: true);
}
}
// Responsive width modifiers
@for $i from 1 through $grid-columns {
// Sizing (percentage)
> .#{$-zf-size}-#{$i} {
@extend %-xy-cell-base-shrink-vertical-#{$-zf-size};
@include xy-cell-static($i, false, $vertical: true, $gutter-type: padding);
}
}
}
}
@if $padding-grid {
.grid-padding-y {
// Negative margin for nested grids
.grid-padding-y {
@include xy-gutters($negative: true, $gutter-position: top bottom);
}
// Base cell styles
> .cell {
@include xy-gutters($gutters: $grid-padding-gutters, $gutter-type: padding, $gutter-position: top bottom);
}
}
}
@if $margin-grid {
@include xy-margin-grid-classes(top bottom, true, '.grid-margin-y');
}
}
@mixin xy-frame-grid-classes($vertical-grid: true, $margin-grid: true) {
// Framed grid styles
.grid-frame {
@include xy-grid-frame;
}
.cell .grid-frame {
width: 100%; // Same as include with $nested, but with less css
}
.cell-block {
@include xy-cell-block();
}
.cell-block-y {
@include xy-cell-block(true);
}
.cell-block-container {
@include xy-cell-block-container();
}
@include -zf-each-breakpoint(false) {
.#{$-zf-size}-grid-frame {
@include xy-grid-frame;
}
.cell .#{$-zf-size}-grid-frame {
width: 100%; // Same as include with $nested, but with less css
}
.#{$-zf-size}-cell-block {
@include xy-cell-block();
}
.#{$-zf-size}-cell-block-container {
@include xy-cell-block-container();
}
.#{$-zf-size}-cell-block-y {
@include xy-cell-block(true);
}
}
@if $vertical-grid {
.grid-y {
&.grid-frame {
width: auto;
@include xy-grid-frame(true);
}
@include -zf-each-breakpoint(false) {
&.#{$-zf-size}-grid-frame {
width: auto;
@include xy-grid-frame(true);
}
}
}
.cell {
.grid-y.grid-frame {
height: 100%; // Same as include with $nested, but with less css
}
@include -zf-each-breakpoint(false) {
.grid-y.#{$-zf-size}-grid-frame {
height: 100%; // Same as include with $nested, but with less css
}
}
}
}
@if $margin-grid {
@include xy-margin-grid-classes(top bottom, true, '.grid-margin-y');
.grid-frame.grid-margin-y {
@include xy-grid-frame(true, false, $grid-margin-gutters, $include-base: false);
}
@include -zf-each-breakpoint(false) {
.grid-margin-y.#{$-zf-size}-grid-frame {
@include xy-grid-frame(true, false, $grid-margin-gutters, $-zf-size, false);
}
}
}
}
// Final classes
@mixin foundation-xy-grid-classes(
$base-grid: true,
$margin-grid: true,
$padding-grid: true,
$block-grid: true,
$collapse: true,
$offset: true,
$vertical-grid: true,
$frame-grid: true
) {
// Base grid styles
@if($base-grid) {
@include xy-base-grid-classes();
}
// Margin grid
@if($margin-grid) {
@include xy-margin-grid-classes();
}
// Padding grid
@if($padding-grid) {
@include xy-padding-grid-classes();
}
// Block grid
@if($block-grid) {
@include xy-block-grid-classes($margin-grid, $padding-grid);
}
// Collapse gutters
@if($collapse) {
@include xy-collapse-grid-classes($margin-grid, $padding-grid);
}
// Offset gutters
@if($offset) {
@include xy-offset-cell-classes();
}
// Vertical grid
@if($vertical-grid) {
@include xy-vertical-grid-classes($margin-grid, $padding-grid);
}
@if ($frame-grid) {
@include xy-frame-grid-classes($vertical-grid, $margin-grid)
}
}