iegik
12/5/2016 - 3:19 AM

grid.less

// Works out the width of elements based
// on total number of columns and width
// number of columns being displayed.
// Values for @grid would be 12, 16 or 24
.grid-inline-block(@grid: 12, @margin: 0, @width: 100%) {
	@actions: column, prefix, suffix, pull, push;

	.grid-action(block){
		display: inline-block;
    vertical-align: top;
	}
  .grid-action(custom){
	.grid-action(block);
    margin-left: @margin;
		margin-right: @margin;
	}

	.grid-action(column, @cols:''){
		.grid-action(custom);
		width: (@width/@grid * @cols) - (@margin * 2);
	}

  .grid-action(row, @top:0, @bottom:0){
    .grid-action(block);
    margin-top: @margin - @top;
		margin-bottom: @margin - @bottom;
	}

	// Allows for padding before element
	.grid-action(prefix, @cols: ''){
		padding-left: (@width/@grid * @cols);
	}
	// Allows for padding after element
	.grid-action(suffix, @cols: ''){
		padding-right: (@width/@grid * @cols);
	}
	.grid-action(push, @cols: ''){
		position: relative;
		left: (@width/@grid * @cols);
	}
	.grid-action(pull, @cols: ''){
		position: relative;
		left: (@width/@grid * @cols) * -1;
	}
	// Removes left margin
	// Removes left margin
	.grid-action(alpha){
		margin-left: 0;
	}
	// Removes right margin
	.grid-action(omega){
		margin-right: 0;
	}

	.grid-generate(@actionClasses: @actions){
		.-(@i: length(@actions)) when (@i > 0) {
			@name: extract(@actions, @i);
			@actionClass: extract(@actionClasses, @i);
			.generate-columns(@n, @x: 1) when (@x =< @n) {
				.@{actionClass}@{x} {
					.grid-action(@name, @x);
				}
				.generate-columns(@n, (@x + 1));
			}
			.generate-columns(@cols);
			.-((@i - 1));
		} .-;
	}
}
@import 'mixins/module-inline-block.less';
.module-inline-block(@module, @grid-pad);
.module(){
	.module-action(custom);
}
.module(@modules){
	.module-action(column, @modules);
}
.module(@modules-x, @modules-y){
	.module-action(column, @modules-x);
    .module-action(row, @modules-y);
}
.module-row(){
	.module-action(row);
}
.module-row(@modules){
    .module-action(row, @modules);
}
.module-prefix(@modules){
	.module-action(prefix, @modules);
}
.module-suffix(@modules){
	.module-action(suffix, @modules);
}
.module-pull(@modules){
	.module-action(pull, @modules);
}
.module-push(@modules){
	.module-action(push, @modules);
}
.module-height(@modules){
	.module-action(height, @modules);
}

@import 'mixins/grid-inline-block.less';
.grid-inline-block(@cols, @grid-pad, @width);
.block(){
	.grid-action(block);
}
.column(){
	.grid-action(custom);
}
.column(@cols){
	.grid-action(column, @cols);
}
.row(){
	.grid-action(row);
}
.row-bordered(@top, @bottom){
	.grid-action(row, @top, @bottom);
}
.column-prefix(@cols){
	.grid-action(prefix, @cols);
}
.column-suffix(@cols){
	.grid-action(suffix, @cols);
}
.column-pull(@cols){
	.grid-action(pull, @cols);
}
.column-push(@cols){
	.grid-action(push, @cols);
}
@module: 20px;
@cols: 12;
@column: @module * 4;
@width: @column * @cols;
@grid-pad: @module / 2;
@grid-cell: @column - (@grid-pad * 2);
// Works out the width of elements based
// on total number of columns and width
// number of columns being displayed.
// Values for @module-width would be 12, 16 or 24
.module-inline-block(@module-width: '16px', @margin: 0) {
	@actions: column, prefix, suffix, pull, push, alpha, omega;

	.module-action(block){
		display: inline-block;
        vertical-align: top;
	}
    .module-action(custom){
		.module-action(block);
		margin: 0 @margin;
	}

	.module-action(column, @modules:''){
		.module-action(custom);
		width: (@module-width * @modules) - (@margin * 2);
	}
    .module-action(height, @modules:''){
		height: (@module-width * @modules);
	}

    .module-action(row, @modules:''){
        .module-action(block);
		height: (@module-width * @modules) - (@margin * 2);
		margin-top: @margin;
		margin-bottom: @margin;
	}

	// Allows for padding before element
	.module-action(prefix, @modules: ''){
		padding-left: (@module-width * @modules);
	}
	// Allows for padding after element
	.module-action(suffix, @modules: ''){
		padding-right: (@module-width * @modules);
	}
	.module-action(push, @modules: ''){
		position: relative;
		left: (@module-width * @modules);
	}
	.module-action(pull, @modules: ''){
		position: relative;
		left: (@module-width * @modules) * -1;
	}
	// Removes left margin
	.module-action(alpha){
		margin-left: 0;
	}
	// Removes right margin
	.module-action(omega){
		margin-right: 0;
	}

	.module-generate(@actionClasses: @actions){
		.-(@i: length(@actions)) when (@i > 0) {
			@name: extract(@actions, @i);
			@actionClass: extract(@actionClasses, @i);
			.generate-modules(@n, @x: 1) when (@x =< @n) {
				.@{actionClass}@{x} {
					.module-action(@name, @x);
				}
				.generate-modules(@n, (@x + 1));
			}
			.generate-modules(@modules);
			.-((@i - 1));
		} .-;
	}
}
@import 'variables.less';
.grid(){
    width: (@column * (@cols / 4) + 1);
    @media (min-width: (@column * (@cols / 3))) {
        width: (@column * (@cols / 3) + 1);
    }
    @media (min-width: (@column * (@cols / 2))) {
        width: (@column * (@cols / 2) + 1);
    }
    @media (min-width: (@column * @cols)) {
        width: (@column * @cols + 1);
    }
}