104 lines
2.3 KiB
SCSS
104 lines
2.3 KiB
SCSS
// Column math
|
|
// ===========
|
|
|
|
|
|
// Is Symmetrical
|
|
// --------------
|
|
// Returns true if a grid is symmetrical.
|
|
// - [$columns] : <number> | <list>
|
|
@function is-symmetrical(
|
|
$columns: susy-get(columns)
|
|
) {
|
|
$columns: valid-columns($columns);
|
|
@return if(type-of($columns) == number, $columns, null);
|
|
}
|
|
|
|
|
|
// Susy Count
|
|
// ----------
|
|
// Find the number of columns in a given layout
|
|
// - [$columns] : <number> | <list>
|
|
@function susy-count(
|
|
$columns: susy-get(columns)
|
|
) {
|
|
$columns: valid-columns($columns);
|
|
@return is-symmetrical($columns) or length($columns);
|
|
}
|
|
|
|
|
|
// Susy Sum
|
|
// --------
|
|
// Find the total sum of column-units in a layout
|
|
// - [$columns] : <number> | <list>
|
|
// - [$gutters] : <ratio>
|
|
// - [$spread] : false/narrow | wide | wider
|
|
@function susy-sum(
|
|
$columns : susy-get(columns),
|
|
$gutters : susy-get(gutters),
|
|
$spread : false
|
|
) {
|
|
$columns: valid-columns($columns);
|
|
$gutters: valid-gutters($gutters);
|
|
|
|
$spread: if($spread == wide, 0, if($spread == wider, 1, -1));
|
|
$gutter-sum: (susy-count($columns) + $spread) * $gutters;
|
|
$column-sum: is-symmetrical($columns);
|
|
|
|
@if not($column-sum) {
|
|
@each $column in $columns {
|
|
$column-sum: ($column-sum or 0) + $column;
|
|
}
|
|
}
|
|
|
|
@return $column-sum + $gutter-sum;
|
|
}
|
|
|
|
|
|
// Susy Slice
|
|
// ----------
|
|
// Return a subset of columns at a given location.
|
|
// - $span : <number>
|
|
// - $location : <number>
|
|
// - [$columns] : <number> | <list>
|
|
@function susy-slice(
|
|
$span,
|
|
$location,
|
|
$columns: susy-get(columns)
|
|
) {
|
|
$columns: valid-columns($columns);
|
|
$sub-columns: $span;
|
|
|
|
@if not(is-symmetrical($columns)) {
|
|
$location: $location or 1;
|
|
$sub-columns: ();
|
|
@for $i from $location to ($location + $span) {
|
|
$sub-columns: append($sub-columns, nth($columns, $i));
|
|
}
|
|
}
|
|
|
|
@return $sub-columns;
|
|
}
|
|
|
|
|
|
// Susy
|
|
// ----
|
|
// Find the sum of a column-span.
|
|
// - $span : <number>
|
|
// - $location : <number>
|
|
// - [$columns] : <number> | <list>
|
|
// - [$gutters] : <ratio>
|
|
// - [$spread] : false/narrow | wide | wider
|
|
@function susy(
|
|
$span,
|
|
$location : false,
|
|
$columns : susy-get(columns),
|
|
$gutters : susy-get(gutters),
|
|
$spread : false
|
|
) {
|
|
$columns: valid-columns($columns);
|
|
$gutters: valid-gutters($gutters);
|
|
$span: susy-slice($span, $location, $columns);
|
|
|
|
@return susy-sum($span, $gutters, $spread);
|
|
}
|