A grid system helps arrange content neatly in rows and columns. A mixin lets you reuse grid code easily in your styles.
Grid system mixin from scratch in SASS
Start learning this pattern below
Jump into concepts and practice - no test required
@mixin grid($columns, $gap: 1rem) { display: grid; grid-template-columns: repeat($columns, 1fr); gap: $gap; }
$columns sets how many columns you want.
$gap sets space between columns and rows, default is 1rem.
@mixin grid($columns, $gap: 1rem) { display: grid; grid-template-columns: repeat($columns, 1fr); gap: $gap; }
.container { @include grid(3); }
.container { @include grid(4, 2rem); }
This example shows a grid container with 3 columns and 1.5rem gap. On small screens, it changes to 1 column for easy reading. Each item is styled with color and padding. The container uses the grid mixin for layout.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>Grid System Mixin Example</title> <style type="text/scss"> @mixin grid($columns, $gap: 1rem) { display: grid; grid-template-columns: repeat($columns, 1fr); gap: $gap; } .container { @include grid(3, 1.5rem); background-color: #f0f0f0; padding: 1rem; } .item { background-color: #4a90e2; color: white; padding: 1rem; text-align: center; border-radius: 0.5rem; font-weight: bold; font-size: 1.2rem; } @media (max-width: 600px) { .container { @include grid(1, 1rem); } } </style> </head> <body> <main> <section class="container" aria-label="Sample grid container"> <div class="item" tabindex="0">Item 1</div> <div class="item" tabindex="0">Item 2</div> <div class="item" tabindex="0">Item 3</div> <div class="item" tabindex="0">Item 4</div> <div class="item" tabindex="0">Item 5</div> <div class="item" tabindex="0">Item 6</div> </section> </main> </body> </html>
Use repeat($columns, 1fr) to create equal width columns easily.
Set gap to control space between rows and columns at once.
Use media queries to change the number of columns on smaller screens for better readability.
A grid mixin helps create flexible column layouts with less code.
You can set how many columns and the gap between them easily.
Responsive design is simple by changing columns in media queries.
Practice
Solution
Step 1: Understand the role of mixins in Sass
Mixins let you reuse code blocks with parameters to customize styles.Step 2: Identify what a grid system mixin does
A grid system mixin helps create column layouts that adapt easily by changing parameters.Final Answer:
To create flexible column layouts with reusable code -> Option AQuick Check:
Grid mixin = flexible columns [OK]
- Confusing mixins with variables
- Thinking mixins add colors only
- Assuming mixins run JavaScript
Solution
Step 1: Check the display property for grid layout
Grid layouts requiredisplay: grid;, not flex or block.Step 2: Verify grid-template-columns and gap syntax
Usinggrid-template-columns: repeat($columns, 1fr);sets equal columns, andgap: $gap;sets spacing.Final Answer:
@mixin grid($columns, $gap) { display: grid; grid-template-columns: repeat($columns, 1fr); gap: $gap; } -> Option CQuick Check:
Grid needs display:grid and repeat() [OK]
- Using display:flex instead of grid
- Using incorrect property names like columns
- Missing repeat() function for columns
@mixin grid($cols, $gap) {
display: grid;
grid-template-columns: repeat($cols, 1fr);
gap: $gap;
}
.container {
@include grid(3, 2rem);
}What CSS will be generated for
.container?Solution
Step 1: Understand mixin parameters and usage
The mixin sets grid display, columns with repeat, and gap using passed values 3 and 2rem.Step 2: Translate Sass mixin to CSS output
Including the mixin with (3, 2rem) generates CSS withdisplay: grid;,grid-template-columns: repeat(3, 1fr);, andgap: 2rem;.Final Answer:
.container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 2rem; } -> Option AQuick Check:
Mixin params = CSS properties [OK]
- Confusing flex with grid display
- Writing grid-template-columns: 3fr instead of repeat()
- Using display:block by mistake
@mixin grid($cols, $gap) {
display: grid;
grid-template-columns: repeat($cols 1fr);
gap: $gap;
}Solution
Step 1: Check syntax of repeat() function
The repeat() function requires a comma between the number and the size, like repeat($cols, 1fr).Step 2: Verify other properties
Display is correctly set to grid, and gap is valid for grid layouts.Final Answer:
Missing comma between $cols and 1fr in repeat() function -> Option DQuick Check:
repeat() needs comma [OK]
- Omitting comma in repeat()
- Confusing display:flex with grid
- Thinking gap is invalid in grid
Solution
Step 1: Set default columns for large screens
The mixin sets 4 columns by default usingrepeat(4, 1fr).Step 2: Add media query for smaller screens
Inside@media (max-width: 600px), columns change to 2 withrepeat(2, 1fr).Step 3: Confirm display and gap properties
Display is grid and gap uses the parameter, which is correct.Final Answer:
@mixin responsive-grid($gap) { display: grid; grid-template-columns: repeat(4, 1fr); gap: $gap; @media (max-width: 600px) { grid-template-columns: repeat(2, 1fr); } } -> Option BQuick Check:
Default 4 cols, max-width 600px = 2 cols [OK]
- Using min-width instead of max-width for small screens
- Setting flex display instead of grid
- Reversing column counts in media query
