Subversion Repositories web.creative

Rev

Blame | Last modification | View Log | Download

// html-grid.scss v1.0 | @ajlkn | MIT licensed */

// Mixins.

  /// Initializes the current element as an HTML grid.
  /// @param {mixed} $gutters Gutters (either a single number to set both column/row gutters, or a list to set them individually).
  /// @param {mixed} $suffix Column class suffix (optional; either a single suffix or a list).
  @mixin html-grid($gutters: 1.5em, $suffix: '') {

    // Initialize.
      $cols: 12;
      $multipliers: 0, 0.25, 0.5, 1, 1.50, 2.00;
      $unit: 100% / $cols;

      // Suffixes.
        $suffixes: null;

        @if (type-of($suffix) == 'list') {
          $suffixes: $suffix;
        }
        @else {
          $suffixes: ($suffix);
        }

      // Gutters.
        $guttersCols: null;
        $guttersRows: null;

        @if (type-of($gutters) == 'list') {

          $guttersCols: nth($gutters, 1);
          $guttersRows: nth($gutters, 2);

        }
        @else {

          $guttersCols: $gutters;
          $guttersRows: 0;

        }

    // Row.
      display: flex;
      flex-wrap: wrap;
      box-sizing: border-box;
      align-items: stretch;

      // Columns.
        > * {
          box-sizing: border-box;
        }

      // Gutters.
        &.gtr-uniform {
          > * {
            > :last-child {
              margin-bottom: 0;
            }
          }
        }

      // Alignment.
        &.aln-left {
          justify-content: flex-start;
        }

        &.aln-center {
          justify-content: center;
        }

        &.aln-right {
          justify-content: flex-end;
        }

        &.aln-top {
          align-items: flex-start;
        }

        &.aln-middle {
          align-items: center;
        }

        &.aln-bottom {
          align-items: flex-end;
        }

    // Step through suffixes.
      @each $suffix in $suffixes {

        // Suffix.
          @if ($suffix != '') {
            $suffix: '-' + $suffix;
          }
          @else {
            $suffix: '';
          }

        // Row.

          // Important.
            > .imp#{$suffix} {
              order: -1;
            }

          // Columns, offsets.
            @for $i from 1 through $cols {
              > .col-#{$i}#{$suffix} {
                width: $unit * $i;
              }

              > .off-#{$i}#{$suffix} {
                margin-left: $unit * $i;
              }
            }

          // Step through multipliers.
            @each $multiplier in $multipliers {

              // Gutters.
                $class: null;

                @if ($multiplier != 1) {
                  $class: '.gtr-' + ($multiplier * 100);
                }

                &#{$class} {
                  margin-top: ($guttersRows * $multiplier * -1);
                  margin-left: ($guttersCols * $multiplier * -1);

                  > * {
                    padding: ($guttersRows * $multiplier) 0 0 ($guttersCols * $multiplier);
                  }

                  // Uniform.
                    &.gtr-uniform {
                      margin-top: $guttersCols * $multiplier * -1;

                      > * {
                        padding-top: $guttersCols * $multiplier;
                      }
                    }

                }

            }

      }

  }