149 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			SCSS
		
	
	
	
	
	
			
		
		
	
	
			149 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			SCSS
		
	
	
	
	
	
| // 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;
 | |
| 											}
 | |
| 										}
 | |
| 
 | |
| 								}
 | |
| 
 | |
| 						}
 | |
| 
 | |
| 			}
 | |
| 
 | |
| 	} |