Skip to content

Instantly share code, notes, and snippets.

@wiegertschouten
Created October 1, 2020 18:38
Show Gist options
  • Save wiegertschouten/443f7e061d1fc656b229ac4b5b0faece to your computer and use it in GitHub Desktop.
Save wiegertschouten/443f7e061d1fc656b229ac4b5b0faece to your computer and use it in GitHub Desktop.
A very simple grid system built with SASS and CSS grid
$columns: 12;
$gap: 30px;
$breakpoints: (
xs: 480px,
sm: 768px,
md: 960px,
lg: 1170px,
xl: 1280px
);
@mixin create-selectors($breakpoint: null) {
$infix: if($breakpoint == null, '', '-#{$breakpoint}');
@for $i from 1 through $columns {
.col#{$infix}-#{$i} {
grid-column-end: span $i;
}
.col-offset#{$infix}-#{$i} {
grid-column-start: $i + 1;
}
.row#{$infix}-#{$i} {
grid-row-end: span $i;
}
.row-offset#{$infix}-#{$i} {
grid-row-start: $i + 1;
}
}
}
.grid {
display: grid;
grid-template-columns: repeat($columns, 1fr);
grid-gap: $gap;
gap: $gap;
}
@include create-selectors;
@each $breakpoint, $width in $breakpoints {
@media (min-width: $width) {
@include create-selectors($breakpoint);
}
}
@nickpish
Copy link

nickpish commented May 7, 2025

@wiegertschouten This is fantastic- thank you for sharing! I'm using a variation of @arsors's approach to address the gap issue- setting my default gap to 50px and using gap: clamp(15px, 4vw, $gap); seems to work ok in my case.

@wiegertschouten
Copy link
Author

@nickpish Glad you found it helpful, and thanks for sharing your solution!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment